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)
|
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;
|
*location += value;
|
||||||
|
}
|
||||||
else if (strcmp(type, "16") == 0)
|
else if (strcmp(type, "16") == 0)
|
||||||
set_le16(location, get_le16(location) + value);
|
set_le16(location, get_le16(location) + value);
|
||||||
else if (strcmp(type, "32") == 0)
|
else if (strcmp(type, "32") == 0)
|
||||||
|
@ -810,7 +819,16 @@ void ElfLinkerAMD64::relocate1(Relocation *rel, upx_byte *location,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(type, "8") == 0)
|
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;
|
*location += value;
|
||||||
|
}
|
||||||
else if (strcmp(type, "16") == 0)
|
else if (strcmp(type, "16") == 0)
|
||||||
set_le16(location, get_le16(location) + value);
|
set_le16(location, get_le16(location) + value);
|
||||||
else if (strcmp(type, "32") == 0)
|
else if (strcmp(type, "32") == 0)
|
||||||
|
|
|
@ -72,7 +72,7 @@ section LZMA_DEC00
|
||||||
push eax // dummy for call
|
push eax // dummy for call
|
||||||
|
|
||||||
// hardwired LzmaDecodeProperties()
|
// hardwired LzmaDecodeProperties()
|
||||||
mov dword ptr [ebx], offset UPXd // lc, lp, pb, dummy
|
movw [ebx], offset UPXd // lc, lp, pb, dummy
|
||||||
|
|
||||||
|
|
||||||
section LZMA_ELF00
|
section LZMA_ELF00
|
||||||
|
@ -107,7 +107,7 @@ section LZMA_ELF00
|
||||||
push ebx // &outSizeProcessed
|
push ebx // &outSizeProcessed
|
||||||
add ebx, 4
|
add ebx, 4
|
||||||
mov ecx,[O_OUTS + ebp] // &outSize
|
mov ecx,[O_OUTS + ebp] // &outSize
|
||||||
push dword [ecx] // outSize
|
push [ecx] // outSize
|
||||||
push edi // out
|
push edi // out
|
||||||
push ebx // &inSizeProcessed
|
push ebx // &inSizeProcessed
|
||||||
add ebx, 4
|
add ebx, 4
|
||||||
|
|
|
@ -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
|
||||||
|
@ -57,20 +57,19 @@
|
||||||
#define getbit getbit_n2b
|
#define getbit getbit_n2b
|
||||||
|
|
||||||
|
|
||||||
section N2BSMA10
|
section N2BSMA10
|
||||||
jmps dcl1_n2b
|
jmps dcl1_n2b
|
||||||
decompr_literals_n2b:
|
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]
|
||||||
inc esi
|
inc esi
|
||||||
mov [edi], al
|
mov [edi], al
|
||||||
inc edi
|
inc edi
|
||||||
section N2BDEC10
|
section N2BDEC10
|
||||||
|
|
||||||
|
|
||||||
decompr_loop_n2b:
|
decompr_loop_n2b:
|
||||||
|
@ -79,31 +78,31 @@ decompr_loop_n2b:
|
||||||
dcl1_n2b:
|
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:
|
||||||
getbit 1
|
getbit 1
|
||||||
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
|
||||||
sub eax, 3
|
sub eax, 3
|
||||||
jb decompr_ebpeax_n2b
|
jb decompr_ebpeax_n2b
|
||||||
|
@ -111,39 +110,38 @@ 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
|
||||||
section N2BFAS50
|
section N2BFAS50
|
||||||
add ecx, 2
|
add ecx, 2
|
||||||
section N2BDEC50
|
section N2BDEC50
|
||||||
decompr_got_mlen_n2b:
|
decompr_got_mlen_n2b:
|
||||||
cmp ebp, -0xd00
|
cmp ebp, -0xd00
|
||||||
adc ecx, 1
|
adc ecx, 1
|
||||||
section N2BSMA60
|
section N2BSMA60
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
push esi
|
push esi
|
||||||
#else
|
#else
|
||||||
|
@ -158,13 +156,13 @@ section N2BSMA60
|
||||||
mov esi, edx
|
mov esi, edx
|
||||||
#endif
|
#endif
|
||||||
jmp decompr_loop_n2b
|
jmp decompr_loop_n2b
|
||||||
section N2BFAS60
|
section N2BFAS60
|
||||||
lea edx, [edi+ebp]
|
lea edx, [edi+ebp]
|
||||||
cmp ebp, -4
|
cmp ebp, -4
|
||||||
#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
|
||||||
|
@ -172,9 +170,8 @@ loop3_n2b:
|
||||||
inc edi
|
inc edi
|
||||||
dec ecx
|
dec ecx
|
||||||
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
|
||||||
|
@ -183,10 +180,9 @@ decompr_copy4_n2b:
|
||||||
sub ecx, 4
|
sub ecx, 4
|
||||||
ja decompr_copy4_n2b
|
ja decompr_copy4_n2b
|
||||||
add edi, ecx
|
add edi, ecx
|
||||||
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
|
||||||
|
|
||||||
|
|
|
@ -58,53 +58,51 @@
|
||||||
#define getbit getbit_n2d
|
#define getbit getbit_n2d
|
||||||
|
|
||||||
|
|
||||||
section N2DSMA10
|
section N2DSMA10
|
||||||
jmps dcl1_n2d
|
jmps dcl1_n2d
|
||||||
decompr_literals_n2d:
|
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
|
||||||
dcl1_n2d:
|
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:
|
||||||
getbit 1
|
getbit 1
|
||||||
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
|
||||||
getbit 1
|
getbit 1
|
||||||
adc eax, eax
|
adc eax, 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,32 +125,31 @@ 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
|
||||||
section N2DFAS50
|
section N2DFAS50
|
||||||
add ecx, 2
|
add ecx, 2
|
||||||
section N2DDEC50
|
section N2DDEC50
|
||||||
decompr_got_mlen_n2d:
|
decompr_got_mlen_n2d:
|
||||||
cmp ebp, -0x500
|
cmp ebp, -0x500
|
||||||
adc ecx, 1
|
adc ecx, 1
|
||||||
section N2DSMA60
|
section N2DSMA60
|
||||||
#ifndef UPX102
|
#ifndef UPX102
|
||||||
push esi
|
push esi
|
||||||
#else
|
#else
|
||||||
|
@ -166,14 +163,14 @@ section N2DSMA60
|
||||||
#else
|
#else
|
||||||
mov esi, edx
|
mov esi, edx
|
||||||
#endif
|
#endif
|
||||||
jmp decompr_loop_n2d
|
jmp decompr_loop_n2d
|
||||||
section N2DFAS60
|
section N2DFAS60
|
||||||
lea edx, [edi+ebp]
|
lea edx, [edi+ebp]
|
||||||
cmp ebp, -4
|
cmp ebp, -4
|
||||||
#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
|
||||||
|
@ -181,9 +178,8 @@ loop3_n2d:
|
||||||
inc edi
|
inc edi
|
||||||
dec ecx
|
dec ecx
|
||||||
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
|
||||||
|
@ -192,10 +188,9 @@ decompr_copy4_n2d:
|
||||||
sub ecx, 4
|
sub ecx, 4
|
||||||
ja decompr_copy4_n2d
|
ja decompr_copy4_n2d
|
||||||
add edi, ecx
|
add edi, ecx
|
||||||
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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user