1
0
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:
László Molnár
2013-08-28 00:24:54 +02:00
parent 1c13046297
commit 86392f197f
5 changed files with 1364 additions and 926 deletions

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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