dos/exe: don't clear the dirty stack - DOS does not do this either
This commit is contained in:
+5
-1
@@ -54,6 +54,7 @@ PackExe::PackExe(InputFile *f) :
|
|||||||
COMPILE_TIME_ASSERT(sizeof(exe_header_t) == 32);
|
COMPILE_TIME_ASSERT(sizeof(exe_header_t) == 32);
|
||||||
ih_exesize = ih_imagesize = ih_overlay = 0;
|
ih_exesize = ih_imagesize = ih_overlay = 0;
|
||||||
stack_for_lzma = 0;
|
stack_for_lzma = 0;
|
||||||
|
use_clear_dirty_stack = false;
|
||||||
|
|
||||||
// disable lzma for "--brute" unless explicitly given "--lzma"
|
// disable lzma for "--brute" unless explicitly given "--lzma"
|
||||||
if (opt->all_methods_use_lzma && !opt->method_lzma_seen)
|
if (opt->all_methods_use_lzma && !opt->method_lzma_seen)
|
||||||
@@ -157,7 +158,9 @@ void PackExe::buildLoader(const Filter *)
|
|||||||
addLoader("LZMA_DEC00",
|
addLoader("LZMA_DEC00",
|
||||||
opt->small ? "LZMA_DEC10" : "LZMA_DEC20",
|
opt->small ? "LZMA_DEC10" : "LZMA_DEC20",
|
||||||
"LZMA_DEC30",
|
"LZMA_DEC30",
|
||||||
ph.u_len > 0xffff ? "LZMA_DEC31" : "",
|
use_clear_dirty_stack ? "LZMA_DEC31" : "",
|
||||||
|
"LZMA_DEC32",
|
||||||
|
ph.u_len > 0xffff ? "LZMA_DEC33" : "",
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -174,6 +177,7 @@ void PackExe::buildLoader(const Filter *)
|
|||||||
|
|
||||||
unsigned clear_dirty_stack_low = 0x10 + lsize0;
|
unsigned clear_dirty_stack_low = 0x10 + lsize0;
|
||||||
clear_dirty_stack_low = ALIGN_UP(clear_dirty_stack_low, 2u);
|
clear_dirty_stack_low = ALIGN_UP(clear_dirty_stack_low, 2u);
|
||||||
|
if (use_clear_dirty_stack)
|
||||||
linker->defineSymbol("clear_dirty_stack_low", clear_dirty_stack_low);
|
linker->defineSymbol("clear_dirty_stack_low", clear_dirty_stack_low);
|
||||||
|
|
||||||
relocateLoader();
|
relocateLoader();
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
unsigned stack_for_lzma; // stack size required for lzma
|
unsigned stack_for_lzma; // stack size required for lzma
|
||||||
|
bool use_clear_dirty_stack;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+854
-833
File diff suppressed because it is too large
Load Diff
@@ -123,7 +123,7 @@ section LZMA_DEC20
|
|||||||
section LZMA_DEC30
|
section LZMA_DEC30
|
||||||
pop ds
|
pop ds
|
||||||
|
|
||||||
#if 1
|
section LZMA_DEC31
|
||||||
// clear dirty stack
|
// clear dirty stack
|
||||||
mov sp, bp
|
mov sp, bp
|
||||||
mov bx, offset clear_dirty_stack_low
|
mov bx, offset clear_dirty_stack_low
|
||||||
@@ -131,14 +131,13 @@ section LZMA_DEC30
|
|||||||
1: push ax
|
1: push ax
|
||||||
cmp sp, bx
|
cmp sp, bx
|
||||||
jnzs 1b
|
jnzs 1b
|
||||||
#endif
|
|
||||||
|
section LZMA_DEC32
|
||||||
mov sp, bp
|
mov sp, bp
|
||||||
mov di, offset lzma_u_len
|
mov di, offset lzma_u_len
|
||||||
|
|
||||||
ignore_reloc_overflow lzma_u_len
|
ignore_reloc_overflow lzma_u_len
|
||||||
|
|
||||||
|
section LZMA_DEC33
|
||||||
section LZMA_DEC31
|
|
||||||
pop ax
|
pop ax
|
||||||
push ax
|
push ax
|
||||||
add ax, offset lzma_u_len_segment
|
add ax, offset lzma_u_len_segment
|
||||||
|
|||||||
@@ -75,23 +75,25 @@ Idx Name Size VMA LMA File off Algn Flags
|
|||||||
70 ignore_reloc_overflow 00000008 00000000 00000000 0000036d 2**0 CONTENTS, RELOC, READONLY
|
70 ignore_reloc_overflow 00000008 00000000 00000000 0000036d 2**0 CONTENTS, RELOC, READONLY
|
||||||
71 LZMA_DEC10 000011a3 00000000 00000000 00000375 2**0 CONTENTS, READONLY
|
71 LZMA_DEC10 000011a3 00000000 00000000 00000375 2**0 CONTENTS, READONLY
|
||||||
72 LZMA_DEC20 0000123b 00000000 00000000 00001518 2**0 CONTENTS, READONLY
|
72 LZMA_DEC20 0000123b 00000000 00000000 00001518 2**0 CONTENTS, READONLY
|
||||||
73 LZMA_DEC30 00000012 00000000 00000000 00002753 2**0 CONTENTS, RELOC, READONLY
|
73 LZMA_DEC30 00000001 00000000 00000000 00002753 2**0 CONTENTS, READONLY
|
||||||
74 LZMA_DEC31 00000007 00000000 00000000 00002765 2**0 CONTENTS, RELOC, READONLY
|
74 LZMA_DEC31 0000000c 00000000 00000000 00002754 2**0 CONTENTS, RELOC, READONLY
|
||||||
75 EXEMAIN5 00000001 00000000 00000000 0000276c 2**0 CONTENTS, READONLY
|
75 LZMA_DEC32 00000005 00000000 00000000 00002760 2**0 CONTENTS, RELOC, READONLY
|
||||||
76 EXEADJUS 00000007 00000000 00000000 0000276d 2**0 CONTENTS, READONLY
|
76 LZMA_DEC33 00000007 00000000 00000000 00002765 2**0 CONTENTS, RELOC, READONLY
|
||||||
77 EXENOADJ 00000002 00000000 00000000 00002774 2**0 CONTENTS, READONLY
|
77 EXEMAIN5 00000001 00000000 00000000 0000276c 2**0 CONTENTS, READONLY
|
||||||
78 EXERELO1 0000001e 00000000 00000000 00002776 2**0 CONTENTS, RELOC, READONLY
|
78 EXEADJUS 00000007 00000000 00000000 0000276d 2**0 CONTENTS, READONLY
|
||||||
79 EXEREL9A 00000012 00000000 00000000 00002794 2**0 CONTENTS, RELOC, READONLY
|
79 EXENOADJ 00000002 00000000 00000000 00002774 2**0 CONTENTS, READONLY
|
||||||
80 EXERELO2 00000004 00000000 00000000 000027a6 2**0 CONTENTS, READONLY
|
80 EXERELO1 0000001e 00000000 00000000 00002776 2**0 CONTENTS, RELOC, READONLY
|
||||||
81 EXEREBIG 00000002 00000000 00000000 000027aa 2**0 CONTENTS, RELOC, READONLY
|
81 EXEREL9A 00000012 00000000 00000000 00002794 2**0 CONTENTS, RELOC, READONLY
|
||||||
82 EXERELO3 00000002 00000000 00000000 000027ac 2**0 CONTENTS, RELOC, READONLY
|
82 EXERELO2 00000004 00000000 00000000 000027a6 2**0 CONTENTS, READONLY
|
||||||
83 EXEMAIN8 00000003 00000000 00000000 000027ae 2**0 CONTENTS, READONLY
|
83 EXEREBIG 00000002 00000000 00000000 000027aa 2**0 CONTENTS, RELOC, READONLY
|
||||||
84 DEVICEEND 00000013 00000000 00000000 000027b1 2**0 CONTENTS, READONLY
|
84 EXERELO3 00000002 00000000 00000000 000027ac 2**0 CONTENTS, RELOC, READONLY
|
||||||
85 EXESTACK 00000006 00000000 00000000 000027c4 2**0 CONTENTS, RELOC, READONLY
|
85 EXEMAIN8 00000003 00000000 00000000 000027ae 2**0 CONTENTS, READONLY
|
||||||
86 EXESTASP 00000003 00000000 00000000 000027ca 2**0 CONTENTS, RELOC, READONLY
|
86 DEVICEEND 00000013 00000000 00000000 000027b1 2**0 CONTENTS, READONLY
|
||||||
87 EXEJUMPF 00000005 00000000 00000000 000027cd 2**0 CONTENTS, RELOC, READONLY
|
87 EXESTACK 00000006 00000000 00000000 000027c4 2**0 CONTENTS, RELOC, READONLY
|
||||||
88 EXERCSPO 00000004 00000000 00000000 000027d2 2**0 CONTENTS, RELOC, READONLY
|
88 EXESTASP 00000003 00000000 00000000 000027ca 2**0 CONTENTS, RELOC, READONLY
|
||||||
89 EXERETIP 00000006 00000000 00000000 000027d6 2**0 CONTENTS, RELOC, READONLY
|
89 EXEJUMPF 00000005 00000000 00000000 000027cd 2**0 CONTENTS, RELOC, READONLY
|
||||||
|
90 EXERCSPO 00000004 00000000 00000000 000027d2 2**0 CONTENTS, RELOC, READONLY
|
||||||
|
91 EXERETIP 00000006 00000000 00000000 000027d6 2**0 CONTENTS, RELOC, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
|
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
|
||||||
00000000 l d COMPRESSED_LZMA_START 00000000 COMPRESSED_LZMA_START
|
00000000 l d COMPRESSED_LZMA_START 00000000 COMPRESSED_LZMA_START
|
||||||
@@ -114,7 +116,7 @@ SYMBOL TABLE:
|
|||||||
00000000 l d NRV2EEX3 00000000 NRV2EEX3
|
00000000 l d NRV2EEX3 00000000 NRV2EEX3
|
||||||
00000000 l d NRV2EEX9 00000000 NRV2EEX9
|
00000000 l d NRV2EEX9 00000000 NRV2EEX9
|
||||||
00000000 l d LZMA_DEC00 00000000 LZMA_DEC00
|
00000000 l d LZMA_DEC00 00000000 LZMA_DEC00
|
||||||
00000000 l d LZMA_DEC30 00000000 LZMA_DEC30
|
00000000 l d LZMA_DEC32 00000000 LZMA_DEC32
|
||||||
00000000 l d EXERELO1 00000000 EXERELO1
|
00000000 l d EXERELO1 00000000 EXERELO1
|
||||||
00000000 l d EXERELO2 00000000 EXERELO2
|
00000000 l d EXERELO2 00000000 EXERELO2
|
||||||
00000000 l d LZMADEVICE 00000000 LZMADEVICE
|
00000000 l d LZMADEVICE 00000000 LZMADEVICE
|
||||||
@@ -169,7 +171,9 @@ SYMBOL TABLE:
|
|||||||
00000000 l d ignore_reloc_overflow 00000000 ignore_reloc_overflow
|
00000000 l d ignore_reloc_overflow 00000000 ignore_reloc_overflow
|
||||||
00000000 l d LZMA_DEC10 00000000 LZMA_DEC10
|
00000000 l d LZMA_DEC10 00000000 LZMA_DEC10
|
||||||
00000000 l d LZMA_DEC20 00000000 LZMA_DEC20
|
00000000 l d LZMA_DEC20 00000000 LZMA_DEC20
|
||||||
|
00000000 l d LZMA_DEC30 00000000 LZMA_DEC30
|
||||||
00000000 l d LZMA_DEC31 00000000 LZMA_DEC31
|
00000000 l d LZMA_DEC31 00000000 LZMA_DEC31
|
||||||
|
00000000 l d LZMA_DEC33 00000000 LZMA_DEC33
|
||||||
00000000 l d EXEMAIN5 00000000 EXEMAIN5
|
00000000 l d EXEMAIN5 00000000 EXEMAIN5
|
||||||
00000000 l d EXEADJUS 00000000 EXEADJUS
|
00000000 l d EXEADJUS 00000000 EXEADJUS
|
||||||
00000000 l d EXENOADJ 00000000 EXENOADJ
|
00000000 l d EXENOADJ 00000000 EXENOADJ
|
||||||
@@ -389,15 +393,18 @@ OFFSET TYPE VALUE
|
|||||||
00000004 R_386_8 lzma_properties
|
00000004 R_386_8 lzma_properties
|
||||||
00000005 R_386_8 LZMA_DEC00
|
00000005 R_386_8 LZMA_DEC00
|
||||||
00000006 R_386_8 lzma_u_len
|
00000006 R_386_8 lzma_u_len
|
||||||
00000007 R_386_8 LZMA_DEC30
|
00000007 R_386_8 LZMA_DEC32
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_DEC30]:
|
|
||||||
OFFSET TYPE VALUE
|
|
||||||
00000004 R_386_16 clear_dirty_stack_low
|
|
||||||
00000010 R_386_16 lzma_u_len
|
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_DEC31]:
|
RELOCATION RECORDS FOR [LZMA_DEC31]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
|
00000003 R_386_16 clear_dirty_stack_low
|
||||||
|
|
||||||
|
RELOCATION RECORDS FOR [LZMA_DEC32]:
|
||||||
|
OFFSET TYPE VALUE
|
||||||
|
00000003 R_386_16 lzma_u_len
|
||||||
|
|
||||||
|
RELOCATION RECORDS FOR [LZMA_DEC33]:
|
||||||
|
OFFSET TYPE VALUE
|
||||||
00000003 R_386_16 lzma_u_len_segment
|
00000003 R_386_16 lzma_u_len_segment
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [EXERELO1]:
|
RELOCATION RECORDS FOR [EXERELO1]:
|
||||||
|
|||||||
Reference in New Issue
Block a user