mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
merge
This commit is contained in:
commit
2f48b840ae
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user