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