1
0
mirror of https://github.com/upx/upx synced 2025-09-28 19:06:07 +08:00

fixes for the i386 nrv2b & nrv2d stubs

This commit is contained in:
László Molnár 2006-07-17 16:56:17 +02:00
parent 1b2837915d
commit e881e008b8
2 changed files with 66 additions and 75 deletions

View File

@ -48,7 +48,7 @@
jnz 1f jnz 1f
.endif .endif
mov ebx, [esi] mov ebx, [esi]
sub esi, byte -4 sub esi, -4
adc ebx, ebx adc ebx, ebx
1: 1:
.endm .endm
@ -63,7 +63,6 @@ decompr_literals_n2b:
movsb movsb
section N2BFAS10 section N2BFAS10
jmps dcl1_n2b jmps dcl1_n2b
.balign 8
section N2BFAS11 section N2BFAS11
decompr_literalb_n2b: decompr_literalb_n2b:
mov al, [esi] mov al, [esi]
@ -80,14 +79,14 @@ dcl1_n2b:
getbit 32 getbit 32
dcl2_n2b: dcl2_n2b:
section N2BSMA20 section N2BSMA20
jc decompr_literals_n2b jcs decompr_literals_n2b
xor eax, eax xor eax, eax
inc eax inc eax
section N2BFAS20 section N2BFAS20
#ifndef UPX102 #ifndef UPX102
mov al, [edi] // force data cache allocate (PentiumPlain or MMX) mov al, [edi] // force data cache allocate (PentiumPlain or MMX)
#endif #endif
jc decompr_literalb_n2b jcs decompr_literalb_n2b
mov eax, 1 mov eax, 1
section N2BDEC20 section N2BDEC20
loop1_n2b: loop1_n2b:
@ -95,13 +94,13 @@ loop1_n2b:
adc eax, eax adc eax, eax
section N2BSMA30 section N2BSMA30
getbit 1 getbit 1
jnc loop1_n2b jncs loop1_n2b
section N2BFAS30 section N2BFAS30
add ebx, ebx add ebx, ebx
jnc loop1_n2b jncs loop1_n2b
jnz loopend1_n2b jnz loopend1_n2b
getbit 32 getbit 32
jnc loop1_n2b jncs loop1_n2b
loopend1_n2b: loopend1_n2b:
section N2BDEC30 section N2BDEC30
xor ecx, ecx xor ecx, ecx
@ -111,29 +110,28 @@ section N2BDEC30
mov al, [esi] mov al, [esi]
inc esi inc esi
xor eax, -1 xor eax, -1
jz decompr_end_n2b jzs decompr_end_n2b
mov ebp, eax mov ebp, eax
decompr_ebpeax_n2b: decompr_ebpeax_n2b:
getbit 1 getbit 1
adc ecx, ecx adc ecx, ecx
getbit 1 getbit 1
adc ecx, ecx adc ecx, ecx
jnz decompr_got_mlen_n2b jnzs decompr_got_mlen_n2b
inc ecx inc ecx
loop2_n2b: loop2_n2b:
getbit 1 getbit 1
adc ecx, ecx adc ecx, ecx
section N2BSMA40 section N2BSMA40
getbit 1 getbit 1
jnc loop2_n2b jncs loop2_n2b
section N2BFAS40 section N2BFAS40
add ebx, ebx add ebx, ebx
jnc loop2_n2b jncs loop2_n2b
jnz loopend2_n2b jnz loopend2_n2b
getbit 32 getbit 32
jnc loop2_n2b jncs loop2_n2b
loopend2_n2b: loopend2_n2b:
section N2BDUMM1
section N2BSMA50 section N2BSMA50
inc ecx inc ecx
inc ecx inc ecx
@ -164,7 +162,7 @@ section N2BFAS60
#ifndef UPX102 #ifndef UPX102
mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX) mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX)
#endif #endif
jbe decompr_copy4_n2b jbes decompr_copy4_n2b
loop3_n2b: loop3_n2b:
mov al, [edx] mov al, [edx]
inc edx inc edx
@ -174,7 +172,6 @@ loop3_n2b:
jnz loop3_n2b jnz loop3_n2b
jmp decompr_loop_n2b jmp decompr_loop_n2b
section N2BFAS61 section N2BFAS61
.balign 4
decompr_copy4_n2b: decompr_copy4_n2b:
mov eax, [edx] mov eax, [edx]
add edx, 4 add edx, 4
@ -186,7 +183,6 @@ decompr_copy4_n2b:
jmp decompr_loop_n2b jmp decompr_loop_n2b
section N2BDEC60 section N2BDEC60
decompr_end_n2b: decompr_end_n2b:
section NRV2BEND
// vi:ts=8:et // vi:ts=8:et

View File

@ -64,16 +64,14 @@ decompr_literals_n2d:
movsb movsb
section N2DFAS10 section N2DFAS10
jmps dcl1_n2d jmps dcl1_n2d
.balign 8
section N2DFAS11 section N2DFAS11
decompr_literalb_n2d: decompr_literalb_n2d:
mov al, [esi] mov al, [esi]
inc esi inc esi
mov [edi], al mov [edi], al
inc edi inc edi
section N2DDEC10 section N2DDEC10
decompr_loop_n2d: decompr_loop_n2d:
add ebx, ebx add ebx, ebx
jnz dcl2_n2d jnz dcl2_n2d
@ -81,14 +79,14 @@ dcl1_n2d:
getbit 32 getbit 32
dcl2_n2d: dcl2_n2d:
section N2DSMA20 section N2DSMA20
jc decompr_literals_n2d jcs decompr_literals_n2d
xor eax, eax xor eax, eax
inc eax inc eax
section N2DFAS20 section N2DFAS20
#ifndef UPX102 #ifndef UPX102
mov al, [edi] // force data cache allocate (PentiumPlain or MMX) mov al, [edi] // force data cache allocate (PentiumPlain or MMX)
#endif #endif
jc decompr_literalb_n2d jcs decompr_literalb_n2d
mov eax, 1 mov eax, 1
section N2DDEC20 section N2DDEC20
loop1_n2d: loop1_n2d:
@ -96,13 +94,13 @@ loop1_n2d:
adc eax, eax adc eax, eax
section N2DSMA30 section N2DSMA30
getbit 1 getbit 1
jc loopend1_n2d jcs loopend1_n2d
section N2DFAS30 section N2DFAS30
add ebx, ebx add ebx, ebx
jnc loopcontinue1_n2d jnc loopcontinue1_n2d
jnz loopend1_n2d jnzs loopend1_n2d
getbit 32 getbit 32
jc loopend1_n2d jcs loopend1_n2d
loopcontinue1_n2d: loopcontinue1_n2d:
section N2DDEC30 section N2DDEC30
dec eax dec eax
@ -117,7 +115,7 @@ loopend1_n2d:
mov al, [esi] mov al, [esi]
inc esi inc esi
xor eax, -1 xor eax, -1
jz decompr_end_n2d jzs decompr_end_n2d
sar eax, 1 // shift low-bit into carry sar eax, 1 // shift low-bit into carry
mov ebp, eax mov ebp, eax
jmps decompr_ebpeax_n2d jmps decompr_ebpeax_n2d
@ -127,22 +125,21 @@ decompr_ebpeax_n2d:
adc ecx, ecx adc ecx, ecx
getbit 1 getbit 1
adc ecx, ecx adc ecx, ecx
jnz decompr_got_mlen_n2d jnzs decompr_got_mlen_n2d
inc ecx inc ecx
loop2_n2d: loop2_n2d:
getbit 1 getbit 1
adc ecx, ecx adc ecx, ecx
section N2DSMA40 section N2DSMA40
getbit 1 getbit 1
jnc loop2_n2d jncs loop2_n2d
section N2DFAS40 section N2DFAS40
add ebx, ebx add ebx, ebx
jnc loop2_n2d jncs loop2_n2d
jnz loopend2_n2d jnz loopend2_n2d
getbit 32 getbit 32
jnc loop2_n2d jncs loop2_n2d
loopend2_n2d: loopend2_n2d:
section N2DDUMM1
section N2DSMA50 section N2DSMA50
inc ecx inc ecx
inc ecx inc ecx
@ -173,7 +170,7 @@ section N2DFAS60
#ifndef UPX102 #ifndef UPX102
mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX) mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX)
#endif #endif
jbe decompr_copy4_n2d jbes decompr_copy4_n2d
loop3_n2d: loop3_n2d:
mov al, [edx] mov al, [edx]
inc edx inc edx
@ -183,7 +180,6 @@ loop3_n2d:
jnz loop3_n2d jnz loop3_n2d
jmp decompr_loop_n2d jmp decompr_loop_n2d
section N2DFAS61 section N2DFAS61
.balign 4
decompr_copy4_n2d: decompr_copy4_n2d:
mov eax, [edx] mov eax, [edx]
add edx, 4 add edx, 4
@ -195,7 +191,6 @@ decompr_copy4_n2d:
jmp decompr_loop_n2d jmp decompr_loop_n2d
section N2DDEC60 section N2DDEC60
decompr_end_n2d: decompr_end_n2d:
section NRV2DEND
// vi:ts=8:et // vi:ts=8:et