mirror of
https://github.com/upx/upx.git
synced 2025-08-11 22:52:30 +08:00
win64/pe: lzma support added
This commit is contained in:
@ -139,17 +139,10 @@ PackW64Pep::~PackW64Pep()
|
||||
}
|
||||
|
||||
|
||||
const int *PackW64Pep::getCompressionMethods(int method, int /*level*/) const
|
||||
const int *PackW64Pep::getCompressionMethods(int method, int level) const
|
||||
{
|
||||
// FIXME bool small = ih.codesize + ih.datasize <= 256*1024;
|
||||
//return Packer::getDefaultCompressionMethods_le32(method, level, small);
|
||||
static const int m_nrv2b[] = { M_NRV2B_LE32, M_END };
|
||||
static const int m_nrv2d[] = { M_NRV2D_LE32, M_END };
|
||||
static const int m_nrv2e[] = { M_NRV2E_LE32, M_END };
|
||||
if (M_IS_NRV2B(method)) return m_nrv2b;
|
||||
if (M_IS_NRV2D(method)) return m_nrv2d;
|
||||
if (M_IS_NRV2E(method)) return m_nrv2e;
|
||||
return m_nrv2e;
|
||||
bool small = ih.codesize + ih.datasize <= 256*1024;
|
||||
return Packer::getDefaultCompressionMethods_le32(method, level, small);
|
||||
}
|
||||
|
||||
|
||||
@ -693,9 +686,9 @@ void PackW64Pep::buildLoader(const Filter *ft)
|
||||
tmp_tlsindex ? "PETLSHAK" : "",
|
||||
"PEMAIN02",
|
||||
//ph.first_offset_found == 1 ? "PEMAIN03" : "",
|
||||
"NRV_HEAD",
|
||||
ph.method == M_NRV2B_LE32 ? "NRV2B" :
|
||||
ph.method == M_NRV2D_LE32 ? "NRV2D" : "NRV2E",
|
||||
M_IS_LZMA(ph.method) ? "LZMA_HEAD,LZMA_ELF00,LZMA_DEC20,LZMA_TAIL" :
|
||||
M_IS_NRV2B(ph.method) ? "NRV_HEAD,NRV2B" :
|
||||
M_IS_NRV2D(ph.method) ? "NRV_HEAD,NRV2D" : "NRV_HEAD,NRV2E",
|
||||
//getDecompressorSections(),
|
||||
/*multipass ? "PEMULTIP" : */ "",
|
||||
"PEMAIN10",
|
||||
@ -1140,7 +1133,11 @@ void PackW64Pep::pack(OutputFile *fo)
|
||||
linker->defineSymbol("VirtualFree", myimport + get_le32(oimpdlls + 16) + 32);
|
||||
#endif
|
||||
|
||||
//FIXME defineDecompressorSymbols();
|
||||
if (M_IS_LZMA(ph.method))
|
||||
{
|
||||
linker->defineSymbol("lzma_c_len", ph.c_len - 2);
|
||||
linker->defineSymbol("lzma_u_len", ph.u_len);
|
||||
}
|
||||
defineFilterSymbols(&ft);
|
||||
linker->defineSymbol("filter_buffer_start", ih.codebase - rvamin);
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -182,13 +182,25 @@ section NRV2D
|
||||
#include "arch/amd64/nrv2d_d.S"
|
||||
section NRV2E
|
||||
#include "arch/amd64/nrv2e_d.S"
|
||||
|
||||
#if 0
|
||||
#include "arch/amd64/lzma_d.S"
|
||||
#endif
|
||||
|
||||
#undef len
|
||||
|
||||
.intel_syntax noprefix
|
||||
section LZMA_HEAD
|
||||
mov eax, IMM32(lzma_u_len)
|
||||
push rax
|
||||
mov rcx, rsp
|
||||
mov rdx, rdi
|
||||
mov rdi, rsi
|
||||
mov esi, IMM32(lzma_c_len)
|
||||
|
||||
.att_syntax
|
||||
#include "arch/amd64/regs.h"
|
||||
#include "arch/amd64/lzma_d.S"
|
||||
|
||||
.intel_syntax noprefix
|
||||
section LZMA_TAIL
|
||||
leave
|
||||
pop rax
|
||||
// =============
|
||||
section PEMAIN10
|
||||
eof:
|
||||
|
@ -46,8 +46,9 @@ section LZMA_ELF00
|
||||
// addq src,lsrc; push lsrc // &input_eof
|
||||
|
||||
#define M_LZMA 14
|
||||
#ifndef NO_METHOD_CHECK
|
||||
cmpb $ M_LZMA,methb; jne not_lzma
|
||||
|
||||
#endif
|
||||
pushq %rbp; movq %rsp,%rbp // we use alloca
|
||||
|
||||
//LzmaDecode( // from lzmaSDK/C/7zip/Compress/LZMA_C/LzmaDecode.h
|
||||
@ -75,7 +76,7 @@ section LZMA_ELF00
|
||||
leaq -(2*szSizeT +4) - 2*LZMA_BASE_SIZE(%rsp,%rbx,2), %rbx
|
||||
andq $~0<<6,%rbx // 64-byte align
|
||||
1:
|
||||
pushq $0 // clera CLzmaDecoderState on stack
|
||||
pushq $0 // clear CLzmaDecoderState on stack
|
||||
cmpq %rbx,%rsp
|
||||
jne 1b
|
||||
|
||||
|
@ -15,37 +15,43 @@ Idx Name Size VMA LMA File off Algn
|
||||
10 NRV2B 00000087 0000000000000000 0000000000000000 000000eb 2**0 CONTENTS, RELOC, READONLY
|
||||
11 NRV2D 00000095 0000000000000000 0000000000000000 00000172 2**0 CONTENTS, RELOC, READONLY
|
||||
12 NRV2E 000000ae 0000000000000000 0000000000000000 00000207 2**0 CONTENTS, RELOC, READONLY
|
||||
13 PEMAIN10 00000001 0000000000000000 0000000000000000 000002b5 2**0 CONTENTS, READONLY
|
||||
14 PETLSHAK2 00000004 0000000000000000 0000000000000000 000002b6 2**0 CONTENTS, READONLY
|
||||
15 PECTTPOS 00000007 0000000000000000 0000000000000000 000002ba 2**0 CONTENTS, RELOC, READONLY
|
||||
16 PECTTNUL 00000003 0000000000000000 0000000000000000 000002c1 2**0 CONTENTS, READONLY
|
||||
17 PEFILTER49 0000004e 0000000000000000 0000000000000000 000002c4 2**0 CONTENTS, RELOC, READONLY
|
||||
18 PEIMPORT 00000034 0000000000000000 0000000000000000 00000312 2**0 CONTENTS, RELOC, READONLY
|
||||
19 PEIBYORD 00000002 0000000000000000 0000000000000000 00000346 2**0 CONTENTS, RELOC, READONLY
|
||||
20 PEK32ORD 00000012 0000000000000000 0000000000000000 00000348 2**0 CONTENTS, RELOC, READONLY
|
||||
21 PEIMORD1 0000000a 0000000000000000 0000000000000000 0000035a 2**0 CONTENTS, RELOC, READONLY
|
||||
22 PEIMPOR2 00000021 0000000000000000 0000000000000000 00000364 2**0 CONTENTS, RELOC, READONLY
|
||||
23 PEIERDLL 0000000b 0000000000000000 0000000000000000 00000385 2**0 CONTENTS, READONLY
|
||||
24 PEIEREXE 00000006 0000000000000000 0000000000000000 00000390 2**0 CONTENTS, RELOC, READONLY
|
||||
25 PEIMDONE 00000004 0000000000000000 0000000000000000 00000396 2**0 CONTENTS, READONLY
|
||||
26 PERELOC1 00000007 0000000000000000 0000000000000000 0000039a 2**0 CONTENTS, RELOC, READONLY
|
||||
27 PERELOC2 00000004 0000000000000000 0000000000000000 000003a1 2**0 CONTENTS, READONLY
|
||||
28 PERELOC3 00000030 0000000000000000 0000000000000000 000003a5 2**0 CONTENTS, RELOC, READONLY
|
||||
29 REL64BIG 0000000a 0000000000000000 0000000000000000 000003d5 2**0 CONTENTS, RELOC, READONLY
|
||||
30 RELOC64J 00000002 0000000000000000 0000000000000000 000003df 2**0 CONTENTS, RELOC, READONLY
|
||||
31 PERLOHI0 0000000a 0000000000000000 0000000000000000 000003e1 2**0 CONTENTS, RELOC, READONLY
|
||||
32 PERELLO0 0000000b 0000000000000000 0000000000000000 000003eb 2**0 CONTENTS, READONLY
|
||||
33 PERELHI0 0000000e 0000000000000000 0000000000000000 000003f6 2**0 CONTENTS, READONLY
|
||||
34 PEDEPHAK 0000004b 0000000000000000 0000000000000000 00000404 2**0 CONTENTS, RELOC, READONLY
|
||||
35 PETLSC 0000001b 0000000000000000 0000000000000000 0000044f 2**0 CONTENTS, RELOC, READONLY
|
||||
36 PEMAIN20 00000004 0000000000000000 0000000000000000 0000046a 2**0 CONTENTS, READONLY
|
||||
37 CLEARSTACK 00000010 0000000000000000 0000000000000000 0000046e 2**0 CONTENTS, READONLY
|
||||
38 PEMAIN21 00000000 0000000000000000 0000000000000000 0000047e 2**0 CONTENTS, READONLY
|
||||
39 PEISDLL9 0000000f 0000000000000000 0000000000000000 0000047e 2**0 CONTENTS, READONLY
|
||||
40 PERETURN 00000004 0000000000000000 0000000000000000 0000048d 2**0 CONTENTS, READONLY
|
||||
41 PEDOJUMP 00000005 0000000000000000 0000000000000000 00000491 2**0 CONTENTS, RELOC, READONLY
|
||||
42 PETLSC2 00000028 0000000000000000 0000000000000000 00000496 2**0 CONTENTS, RELOC, READONLY
|
||||
43 UPX1HEAD 00000020 0000000000000000 0000000000000000 000004be 2**0 CONTENTS, READONLY
|
||||
13 LZMA_HEAD 00000014 0000000000000000 0000000000000000 000002b5 2**0 CONTENTS, RELOC, READONLY
|
||||
14 LZMA_ELF00 0000005a 0000000000000000 0000000000000000 000002c9 2**0 CONTENTS, READONLY
|
||||
15 LZMA_DEC10 000009f7 0000000000000000 0000000000000000 00000323 2**0 CONTENTS, READONLY
|
||||
16 LZMA_DEC20 000009f7 0000000000000000 0000000000000000 00000d1a 2**0 CONTENTS, READONLY
|
||||
17 LZMA_DEC30 00000014 0000000000000000 0000000000000000 00001711 2**0 CONTENTS, READONLY
|
||||
18 LZMA_TAIL 00000002 0000000000000000 0000000000000000 00001725 2**0 CONTENTS, READONLY
|
||||
19 PEMAIN10 00000001 0000000000000000 0000000000000000 00001727 2**0 CONTENTS, READONLY
|
||||
20 PETLSHAK2 00000004 0000000000000000 0000000000000000 00001728 2**0 CONTENTS, READONLY
|
||||
21 PECTTPOS 00000007 0000000000000000 0000000000000000 0000172c 2**0 CONTENTS, RELOC, READONLY
|
||||
22 PECTTNUL 00000003 0000000000000000 0000000000000000 00001733 2**0 CONTENTS, READONLY
|
||||
23 PEFILTER49 0000004e 0000000000000000 0000000000000000 00001736 2**0 CONTENTS, RELOC, READONLY
|
||||
24 PEIMPORT 00000034 0000000000000000 0000000000000000 00001784 2**0 CONTENTS, RELOC, READONLY
|
||||
25 PEIBYORD 00000002 0000000000000000 0000000000000000 000017b8 2**0 CONTENTS, RELOC, READONLY
|
||||
26 PEK32ORD 00000012 0000000000000000 0000000000000000 000017ba 2**0 CONTENTS, RELOC, READONLY
|
||||
27 PEIMORD1 0000000a 0000000000000000 0000000000000000 000017cc 2**0 CONTENTS, RELOC, READONLY
|
||||
28 PEIMPOR2 00000021 0000000000000000 0000000000000000 000017d6 2**0 CONTENTS, RELOC, READONLY
|
||||
29 PEIERDLL 0000000b 0000000000000000 0000000000000000 000017f7 2**0 CONTENTS, READONLY
|
||||
30 PEIEREXE 00000006 0000000000000000 0000000000000000 00001802 2**0 CONTENTS, RELOC, READONLY
|
||||
31 PEIMDONE 00000004 0000000000000000 0000000000000000 00001808 2**0 CONTENTS, READONLY
|
||||
32 PERELOC1 00000007 0000000000000000 0000000000000000 0000180c 2**0 CONTENTS, RELOC, READONLY
|
||||
33 PERELOC2 00000004 0000000000000000 0000000000000000 00001813 2**0 CONTENTS, READONLY
|
||||
34 PERELOC3 00000030 0000000000000000 0000000000000000 00001817 2**0 CONTENTS, RELOC, READONLY
|
||||
35 REL64BIG 0000000a 0000000000000000 0000000000000000 00001847 2**0 CONTENTS, RELOC, READONLY
|
||||
36 RELOC64J 00000002 0000000000000000 0000000000000000 00001851 2**0 CONTENTS, RELOC, READONLY
|
||||
37 PERLOHI0 0000000a 0000000000000000 0000000000000000 00001853 2**0 CONTENTS, RELOC, READONLY
|
||||
38 PERELLO0 0000000b 0000000000000000 0000000000000000 0000185d 2**0 CONTENTS, READONLY
|
||||
39 PERELHI0 0000000e 0000000000000000 0000000000000000 00001868 2**0 CONTENTS, READONLY
|
||||
40 PEDEPHAK 0000004b 0000000000000000 0000000000000000 00001876 2**0 CONTENTS, RELOC, READONLY
|
||||
41 PETLSC 0000001b 0000000000000000 0000000000000000 000018c1 2**0 CONTENTS, RELOC, READONLY
|
||||
42 PEMAIN20 00000004 0000000000000000 0000000000000000 000018dc 2**0 CONTENTS, READONLY
|
||||
43 CLEARSTACK 00000010 0000000000000000 0000000000000000 000018e0 2**0 CONTENTS, READONLY
|
||||
44 PEMAIN21 00000000 0000000000000000 0000000000000000 000018f0 2**0 CONTENTS, READONLY
|
||||
45 PEISDLL9 0000000f 0000000000000000 0000000000000000 000018f0 2**0 CONTENTS, READONLY
|
||||
46 PERETURN 00000004 0000000000000000 0000000000000000 000018ff 2**0 CONTENTS, READONLY
|
||||
47 PEDOJUMP 00000005 0000000000000000 0000000000000000 00001903 2**0 CONTENTS, RELOC, READONLY
|
||||
48 PETLSC2 00000028 0000000000000000 0000000000000000 00001908 2**0 CONTENTS, RELOC, READONLY
|
||||
49 UPX1HEAD 00000020 0000000000000000 0000000000000000 00001930 2**0 CONTENTS, READONLY
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
|
||||
0000000000000000 l d PEMAIN10 0000000000000000 PEMAIN10
|
||||
@ -70,6 +76,12 @@ SYMBOL TABLE:
|
||||
0000000000000000 l d NRV2B 0000000000000000 NRV2B
|
||||
0000000000000000 l d NRV2D 0000000000000000 NRV2D
|
||||
0000000000000000 l d NRV2E 0000000000000000 NRV2E
|
||||
0000000000000000 l d LZMA_HEAD 0000000000000000 LZMA_HEAD
|
||||
0000000000000000 l d LZMA_ELF00 0000000000000000 LZMA_ELF00
|
||||
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
|
||||
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
|
||||
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
|
||||
0000000000000000 l d LZMA_TAIL 0000000000000000 LZMA_TAIL
|
||||
0000000000000000 l d PETLSHAK2 0000000000000000 PETLSHAK2
|
||||
0000000000000000 l d PECTTPOS 0000000000000000 PECTTPOS
|
||||
0000000000000000 l d PECTTNUL 0000000000000000 PECTTNUL
|
||||
@ -104,6 +116,8 @@ SYMBOL TABLE:
|
||||
0000000000000000 *UND* 0000000000000000 icon_delta
|
||||
0000000000000000 *UND* 0000000000000000 tls_address
|
||||
0000000000000000 *UND* 0000000000000000 tls_value
|
||||
0000000000000000 *UND* 0000000000000000 lzma_u_len
|
||||
0000000000000000 *UND* 0000000000000000 lzma_c_len
|
||||
0000000000000000 *UND* 0000000000000000 filter_buffer_start
|
||||
0000000000000000 *UND* 0000000000000000 filter_length
|
||||
0000000000000000 *UND* 0000000000000000 filter_cto
|
||||
@ -161,6 +175,11 @@ OFFSET TYPE VALUE
|
||||
00000000000000a5 R_X86_64_PC32 NRV_HEAD+0x000000000000001b
|
||||
0000000000000052 R_X86_64_PC32 PEMAIN10+0xfffffffffffffffc
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_HEAD]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000001 R_X86_64_32 lzma_u_len+0x0000000080000000
|
||||
0000000000000010 R_X86_64_32 lzma_c_len+0x0000000080000000
|
||||
|
||||
RELOCATION RECORDS FOR [PECTTPOS]:
|
||||
OFFSET TYPE VALUE
|
||||
0000000000000003 R_X86_64_32S filter_buffer_start
|
||||
|
Reference in New Issue
Block a user