1
0
mirror of https://github.com/upx/upx synced 2025-09-28 19:06:07 +08:00
This commit is contained in:
John Reiser 2006-07-17 08:06:06 -07:00
commit 2f48b840ae
4 changed files with 86 additions and 77 deletions

View File

@ -787,7 +787,16 @@ void ElfLinkerX86::relocate1(Relocation *rel, upx_byte *location,
}
if (strcmp(type, "8") == 0)
{
int displ = (char) *location + (int) value;
if (displ < -127 || displ > 128)
{
printf("target out of range (%d) in reloc %s:%x\n",
displ, rel->section->name, rel->offset);
abort();
}
*location += value;
}
else if (strcmp(type, "16") == 0)
set_le16(location, get_le16(location) + value);
else if (strcmp(type, "32") == 0)
@ -810,7 +819,16 @@ void ElfLinkerAMD64::relocate1(Relocation *rel, upx_byte *location,
}
if (strcmp(type, "8") == 0)
{
int displ = (char) *location + (int) value;
if (displ < -127 || displ > 128)
{
printf("target out of range (%d) in reloc %s:%x\n",
displ, rel->section->name, rel->offset);
abort();
}
*location += value;
}
else if (strcmp(type, "16") == 0)
set_le16(location, get_le16(location) + value);
else if (strcmp(type, "32") == 0)

View File

@ -72,7 +72,7 @@ section LZMA_DEC00
push eax // dummy for call
// hardwired LzmaDecodeProperties()
mov dword ptr [ebx], offset UPXd // lc, lp, pb, dummy
movw [ebx], offset UPXd // lc, lp, pb, dummy
section LZMA_ELF00
@ -107,7 +107,7 @@ section LZMA_ELF00
push ebx // &outSizeProcessed
add ebx, 4
mov ecx,[O_OUTS + ebp] // &outSize
push dword [ecx] // outSize
push [ecx] // outSize
push edi // out
push ebx // &inSizeProcessed
add ebx, 4

View File

@ -48,7 +48,7 @@
jnz 1f
.endif
mov ebx, [esi]
sub esi, byte -4
sub esi, -4
adc ebx, ebx
1:
.endm
@ -57,20 +57,19 @@
#define getbit getbit_n2b
section N2BSMA10
section N2BSMA10
jmps dcl1_n2b
decompr_literals_n2b:
movsb
section N2BFAS10
section N2BFAS10
jmps dcl1_n2b
.balign 8
section N2BFAS11
section N2BFAS11
decompr_literalb_n2b:
mov al, [esi]
inc esi
mov [edi], al
inc edi
section N2BDEC10
section N2BDEC10
decompr_loop_n2b:
@ -79,31 +78,31 @@ decompr_loop_n2b:
dcl1_n2b:
getbit 32
dcl2_n2b:
section N2BSMA20
jc decompr_literals_n2b
section N2BSMA20
jcs decompr_literals_n2b
xor eax, eax
inc eax
section N2BFAS20
section N2BFAS20
#ifndef UPX102
mov al, [edi] // force data cache allocate (PentiumPlain or MMX)
#endif
jc decompr_literalb_n2b
jcs decompr_literalb_n2b
mov eax, 1
section N2BDEC20
section N2BDEC20
loop1_n2b:
getbit 1
adc eax, eax
section N2BSMA30
section N2BSMA30
getbit 1
jnc loop1_n2b
section N2BFAS30
jncs loop1_n2b
section N2BFAS30
add ebx, ebx
jnc loop1_n2b
jncs loop1_n2b
jnz loopend1_n2b
getbit 32
jnc loop1_n2b
jncs loop1_n2b
loopend1_n2b:
section N2BDEC30
section N2BDEC30
xor ecx, ecx
sub eax, 3
jb decompr_ebpeax_n2b
@ -111,39 +110,38 @@ section N2BDEC30
mov al, [esi]
inc esi
xor eax, -1
jz decompr_end_n2b
jzs decompr_end_n2b
mov ebp, eax
decompr_ebpeax_n2b:
getbit 1
adc ecx, ecx
getbit 1
adc ecx, ecx
jnz decompr_got_mlen_n2b
jnzs decompr_got_mlen_n2b
inc ecx
loop2_n2b:
getbit 1
adc ecx, ecx
section N2BSMA40
section N2BSMA40
getbit 1
jnc loop2_n2b
section N2BFAS40
jncs loop2_n2b
section N2BFAS40
add ebx, ebx
jnc loop2_n2b
jncs loop2_n2b
jnz loopend2_n2b
getbit 32
jnc loop2_n2b
jncs loop2_n2b
loopend2_n2b:
section N2BDUMM1
section N2BSMA50
section N2BSMA50
inc ecx
inc ecx
section N2BFAS50
section N2BFAS50
add ecx, 2
section N2BDEC50
section N2BDEC50
decompr_got_mlen_n2b:
cmp ebp, -0xd00
adc ecx, 1
section N2BSMA60
section N2BSMA60
#ifndef UPX102
push esi
#else
@ -158,13 +156,13 @@ section N2BSMA60
mov esi, edx
#endif
jmp decompr_loop_n2b
section N2BFAS60
section N2BFAS60
lea edx, [edi+ebp]
cmp ebp, -4
#ifndef UPX102
mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX)
#endif
jbe decompr_copy4_n2b
jbes decompr_copy4_n2b
loop3_n2b:
mov al, [edx]
inc edx
@ -172,9 +170,8 @@ loop3_n2b:
inc edi
dec ecx
jnz loop3_n2b
jmp decompr_loop_n2b
section N2BFAS61
.balign 4
jmp decompr_loop_n2b
section N2BFAS61
decompr_copy4_n2b:
mov eax, [edx]
add edx, 4
@ -183,10 +180,9 @@ decompr_copy4_n2b:
sub ecx, 4
ja decompr_copy4_n2b
add edi, ecx
jmp decompr_loop_n2b
section N2BDEC60
jmp decompr_loop_n2b
section N2BDEC60
decompr_end_n2b:
section NRV2BEND
// vi:ts=8:et

View File

@ -58,53 +58,51 @@
#define getbit getbit_n2d
section N2DSMA10
section N2DSMA10
jmps dcl1_n2d
decompr_literals_n2d:
movsb
section N2DFAS10
section N2DFAS10
jmps dcl1_n2d
.balign 8
section N2DFAS11
section N2DFAS11
decompr_literalb_n2d:
mov al, [esi]
inc esi
mov [edi], al
inc edi
section N2DDEC10
section N2DDEC10
decompr_loop_n2d:
add ebx, ebx
jnz dcl2_n2d
dcl1_n2d:
getbit 32
dcl2_n2d:
section N2DSMA20
jc decompr_literals_n2d
section N2DSMA20
jcs decompr_literals_n2d
xor eax, eax
inc eax
section N2DFAS20
section N2DFAS20
#ifndef UPX102
mov al, [edi] // force data cache allocate (PentiumPlain or MMX)
#endif
jc decompr_literalb_n2d
jcs decompr_literalb_n2d
mov eax, 1
section N2DDEC20
section N2DDEC20
loop1_n2d:
getbit 1
adc eax, eax
section N2DSMA30
section N2DSMA30
getbit 1
jc loopend1_n2d
section N2DFAS30
jcs loopend1_n2d
section N2DFAS30
add ebx, ebx
jnc loopcontinue1_n2d
jnz loopend1_n2d
jnzs loopend1_n2d
getbit 32
jc loopend1_n2d
jcs loopend1_n2d
loopcontinue1_n2d:
section N2DDEC30
section N2DDEC30
dec eax
getbit 1
adc eax, eax
@ -117,7 +115,7 @@ loopend1_n2d:
mov al, [esi]
inc esi
xor eax, -1
jz decompr_end_n2d
jzs decompr_end_n2d
sar eax, 1 // shift low-bit into carry
mov ebp, eax
jmps decompr_ebpeax_n2d
@ -127,32 +125,31 @@ decompr_ebpeax_n2d:
adc ecx, ecx
getbit 1
adc ecx, ecx
jnz decompr_got_mlen_n2d
jnzs decompr_got_mlen_n2d
inc ecx
loop2_n2d:
getbit 1
adc ecx, ecx
section N2DSMA40
section N2DSMA40
getbit 1
jnc loop2_n2d
section N2DFAS40
jncs loop2_n2d
section N2DFAS40
add ebx, ebx
jnc loop2_n2d
jncs loop2_n2d
jnz loopend2_n2d
getbit 32
jnc loop2_n2d
jncs loop2_n2d
loopend2_n2d:
section N2DDUMM1
section N2DSMA50
section N2DSMA50
inc ecx
inc ecx
section N2DFAS50
section N2DFAS50
add ecx, 2
section N2DDEC50
section N2DDEC50
decompr_got_mlen_n2d:
cmp ebp, -0x500
adc ecx, 1
section N2DSMA60
section N2DSMA60
#ifndef UPX102
push esi
#else
@ -166,14 +163,14 @@ section N2DSMA60
#else
mov esi, edx
#endif
jmp decompr_loop_n2d
section N2DFAS60
jmp decompr_loop_n2d
section N2DFAS60
lea edx, [edi+ebp]
cmp ebp, -4
#ifndef UPX102
mov al, [edi+ecx] // force data cache allocate (PentiumPlain or MMX)
#endif
jbe decompr_copy4_n2d
jbes decompr_copy4_n2d
loop3_n2d:
mov al, [edx]
inc edx
@ -181,9 +178,8 @@ loop3_n2d:
inc edi
dec ecx
jnz loop3_n2d
jmp decompr_loop_n2d
section N2DFAS61
.balign 4
jmp decompr_loop_n2d
section N2DFAS61
decompr_copy4_n2d:
mov eax, [edx]
add edx, 4
@ -192,10 +188,9 @@ decompr_copy4_n2d:
sub ecx, 4
ja decompr_copy4_n2d
add edi, ecx
jmp decompr_loop_n2d
section N2DDEC60
jmp decompr_loop_n2d
section N2DDEC60
decompr_end_n2d:
section NRV2DEND
// vi:ts=8:et