1
0
mirror of https://github.com/upx/upx synced 2025-09-28 19:06:07 +08:00

Minor dos/exe stub optimizations.

This commit is contained in:
Markus F.X.J. Oberhumer 2007-03-04 16:47:13 +01:00
parent 1377b54b9e
commit ac457792b4
7 changed files with 1871 additions and 5114 deletions

View File

@ -154,7 +154,9 @@ void PackExe::buildLoader(const Filter *)
if (M_IS_LZMA(ph.method)) if (M_IS_LZMA(ph.method))
{ {
addLoader("LZMA_DEC00,LZMA_DEC10,LZMA_DEC99,LZMA_DEC30", addLoader("LZMA_DEC00",
opt->small ? "LZMA_DEC10" : "LZMA_DEC20",
"LZMA_DEC30",
ph.u_len > 0xffff ? "LZMA_DEC31" : "", ph.u_len > 0xffff ? "LZMA_DEC31" : "",
NULL NULL
); );

File diff suppressed because it is too large Load Diff

View File

@ -18,7 +18,11 @@ endif
vpath %.c $(top_srcdir)/src/stub/src/c vpath %.c $(top_srcdir)/src/stub/src/c
STUBS = STUBS =
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),)
ifneq ($(wildcard $(WATCOM)/binl/wcl),)
STUBS += lzma_d_cf.S lzma_d_cs.S STUBS += lzma_d_cf.S lzma_d_cs.S
endif
endif
default.targets = all default.targets = all
ifeq ($(strip $(STUBS)),) ifeq ($(strip $(STUBS)),)
@ -33,7 +37,7 @@ include $(top_srcdir)/src/stub/Makefile
# ************************************************************************/ # ************************************************************************/
# enumerate the names of all environment variables # enumerate the names of all environment variables
# FIXME: "origin" does not work for things like "export LC_ALL=C" # FIXME: "origin" does not work for things like "export LC_ALL = C"
##__minienv_varlist = $(foreach v,$1,$(if $(findstring environment,$(origin $v)),$v)) ##__minienv_varlist = $(foreach v,$1,$(if $(findstring environment,$(origin $v)),$v))
__minienv_varlist = $(foreach v,$1,$(if $($v),$v)) __minienv_varlist = $(foreach v,$1,$(if $($v),$v))
# enumerate the names of all environment variables # enumerate the names of all environment variables
@ -134,7 +138,7 @@ CL += -I$(call winedir_s,$(top_srcdir)/src)
endif endif
# Open Watcom C/C++ 1.6 # Open Watcom C/C++ 1.6
# http://openwatcom.com/ # http://www.openwatcom.com/
ifneq ($(wildcard $(WATCOM)/binl/wcl),) ifneq ($(wildcard $(WATCOM)/binl/wcl),)
c := tc.method-lzma.wcl c := tc.method-lzma.wcl
$c = PATH='$(WATCOM)/binl:$(PATH)' $(WATCOM)/binl/wcl -zq -bt=dos $c = PATH='$(WATCOM)/binl:$(PATH)' $(WATCOM)/binl/wcl -zq -bt=dos
@ -147,13 +151,12 @@ $c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src $c += -I$(top_srcdir)/src
endif endif
lzma_d_c%.S : lzma_d_c%.i cleanasm.py $(MAKEFILE_LIST)
$(PYTHON) cleanasm.py --label-prefix=$(LABEL_PREFIX) $< $@
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),) ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),)
ifneq ($(wildcard $(WATCOM)/binl/wcl),) ifneq ($(wildcard $(WATCOM)/binl/wcl),)
lzma_d_c%.i : tmp/lzma_d_c%.i ; cp $< $@ lzma_d_c%.S : tmp/lzma_d_c%.i cleanasm.py $(MAKEFILE_LIST)
$(PYTHON) cleanasm.py --label-prefix=$(LABEL_PREFIX) $< $@
tmp/lzma_d_c%.i : lzma_d_c.c wdis2gas.py $(MAKEFILE_LIST) $(TMP_DEPS) tmp/lzma_d_c%.i : lzma_d_c.c wdis2gas.py $(MAKEFILE_LIST) $(TMP_DEPS)
rm -f tmp/$T*.i tmp/$T*.o tmp/$T*.obj tmp/$T*.S rm -f tmp/$T*.i tmp/$T*.o tmp/$T*.obj tmp/$T*.S
@ -180,8 +183,7 @@ endif
$(call tc,f-objstrip,tmp/$T.o) $(call tc,f-objstrip,tmp/$T.o)
$(call tc,objdump) -b elf32-i386 -m i8086 -M intel -dr -j .text.LzmaDecode --no-show -w tmp/$T.o | $(RTRIM) | perl -pe 's/DWORD/dword/g; s/WORD/word/g; s/BYTE/byte/g; s/PTR/ptr/g;' > $@ $(call tc,objdump) -b elf32-i386 -m i8086 -M intel -dr -j .text.LzmaDecode --no-show -w tmp/$T.o | $(RTRIM) | perl -pe 's/DWORD/dword/g; s/WORD/word/g; s/BYTE/byte/g; s/PTR/ptr/g;' > $@
.PRECIOUS: lzma_d_c%.i .PRECIOUS: lzma_d_c%.i tmp/lzma_d_c%.i
.PRECIOUS: tmp/lzma_d_c%.i
endif endif
endif endif

View File

@ -42,16 +42,10 @@
// //
**************************************************************************/ **************************************************************************/
section LZMA_DEC99
.macro LZMA_DEC99_dummy
.endm
// init // init
section LZMA_DEC00 section LZMA_DEC00
//.byte 0xcc //.byte 0xcc
push ds
mov bp, sp mov bp, sp
#if 0 #if 0
// DEBUG - check for enough stack // DEBUG - check for enough stack
@ -91,26 +85,24 @@ section LZMA_DEC00
push ds // in [bp + 8] push ds // in [bp + 8]
push si // [bp + 6] push si // [bp + 6]
add bx, 4
push bx // &state __near [bp + 4]
// enter small memory model // enter small memory model
push ds // save ds && dummy for call
push ss push ss
pop ds pop ds
add bx, 4 // fill properties
push bx // &state __near [bp + 4] movw [bx], offset lzma_properties
mov ax, offset lzma_properties_hi movw [bx+2], offset lzma_properties_hi
mov [bx + 2], ax
mov ax, offset lzma_properties
mov [bx], ax
call LZMA_DEC10
jmp LZMA_DEC30
ignore_reloc_overflow lzma_u_len ignore_reloc_overflow lzma_u_len
ignore_reloc_overflow lzma_c_len ignore_reloc_overflow lzma_c_len
ignore_reloc_overflow lzma_properties ignore_reloc_overflow lzma_properties
//#define ret #define ret
section LZMA_DEC10 section LZMA_DEC10
.arch i8086, nojumps .arch i8086, nojumps
#define SMALL 1 #define SMALL 1
@ -119,18 +111,18 @@ section LZMA_DEC10
#undef SMALL #undef SMALL
section LZMA_DEC20 section LZMA_DEC20
.arch i8086, nojumps .arch i8086, nojumps
#define SMALL 1 #define FAST 1
//#define FAST 1
#include "lzma_m.h" #include "lzma_m.h"
#include "lzma_d_cf.S" #include "lzma_d_cf.S"
//#undef FAST #undef FAST
#undef SMALL
.arch i8086, jumps .arch i8086, jumps
#undef ret #undef ret
// cleanup // cleanup
section LZMA_DEC30 section LZMA_DEC30
pop ds
#if 1 #if 1
// clear dirty stack // clear dirty stack
mov sp, bp mov sp, bp
@ -141,7 +133,6 @@ section LZMA_DEC30
jnzs 1b jnzs 1b
#endif #endif
mov sp, bp mov sp, bp
pop ds
mov di, offset lzma_u_len mov di, offset lzma_u_len
ignore_reloc_overflow lzma_u_len ignore_reloc_overflow lzma_u_len

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -69,28 +69,27 @@ Idx Name Size VMA LMA File off Algn Flags
64 NRV2EEX3 00000015 00000000 00000000 00000316 2**0 CONTENTS, RELOC, READONLY 64 NRV2EEX3 00000015 00000000 00000000 00000316 2**0 CONTENTS, RELOC, READONLY
65 N2E64K02 0000000b 00000000 00000000 0000032b 2**0 CONTENTS, READONLY 65 N2E64K02 0000000b 00000000 00000000 0000032b 2**0 CONTENTS, READONLY
66 NRV2EEX9 00000004 00000000 00000000 00000336 2**0 CONTENTS, READONLY 66 NRV2EEX9 00000004 00000000 00000000 00000336 2**0 CONTENTS, READONLY
67 LZMA_DEC99 00000000 00000000 00000000 0000033a 2**0 CONTENTS, READONLY 67 LZMA_DEC00 00000033 00000000 00000000 0000033a 2**0 CONTENTS, RELOC, READONLY
68 LZMA_DEC00 0000003b 00000000 00000000 0000033a 2**0 CONTENTS, RELOC, READONLY 68 ignore_reloc_overflow 00000008 00000000 00000000 0000036d 2**0 CONTENTS, RELOC, READONLY
69 ignore_reloc_overflow 00000008 00000000 00000000 00000375 2**0 CONTENTS, RELOC, READONLY 69 LZMA_DEC10 000011a3 00000000 00000000 00000375 2**0 CONTENTS, READONLY
70 LZMA_DEC10 000011a4 00000000 00000000 0000037d 2**0 CONTENTS, READONLY 70 LZMA_DEC20 0000123b 00000000 00000000 00001518 2**0 CONTENTS, READONLY
71 LZMA_DEC20 000011a4 00000000 00000000 00001521 2**0 CONTENTS, READONLY 71 LZMA_DEC30 00000012 00000000 00000000 00002753 2**0 CONTENTS, RELOC, READONLY
72 LZMA_DEC30 00000012 00000000 00000000 000026c5 2**0 CONTENTS, RELOC, READONLY 72 LZMA_DEC31 00000007 00000000 00000000 00002765 2**0 CONTENTS, RELOC, READONLY
73 LZMA_DEC31 00000007 00000000 00000000 000026d7 2**0 CONTENTS, RELOC, READONLY 73 EXEMAIN5 00000001 00000000 00000000 0000276c 2**0 CONTENTS, READONLY
74 EXEMAIN5 00000001 00000000 00000000 000026de 2**0 CONTENTS, READONLY 74 EXEADJUS 00000007 00000000 00000000 0000276d 2**0 CONTENTS, READONLY
75 EXEADJUS 00000007 00000000 00000000 000026df 2**0 CONTENTS, READONLY 75 EXENOADJ 00000002 00000000 00000000 00002774 2**0 CONTENTS, READONLY
76 EXENOADJ 00000002 00000000 00000000 000026e6 2**0 CONTENTS, READONLY 76 EXERELO1 0000001e 00000000 00000000 00002776 2**0 CONTENTS, RELOC, READONLY
77 EXERELO1 0000001e 00000000 00000000 000026e8 2**0 CONTENTS, RELOC, READONLY 77 EXEREL9A 00000012 00000000 00000000 00002794 2**0 CONTENTS, RELOC, READONLY
78 EXEREL9A 00000012 00000000 00000000 00002706 2**0 CONTENTS, RELOC, READONLY 78 EXERELO2 00000004 00000000 00000000 000027a6 2**0 CONTENTS, READONLY
79 EXERELO2 00000004 00000000 00000000 00002718 2**0 CONTENTS, READONLY 79 EXEREBIG 00000002 00000000 00000000 000027aa 2**0 CONTENTS, RELOC, READONLY
80 EXEREBIG 00000002 00000000 00000000 0000271c 2**0 CONTENTS, RELOC, READONLY 80 EXERELO3 00000002 00000000 00000000 000027ac 2**0 CONTENTS, RELOC, READONLY
81 EXERELO3 00000002 00000000 00000000 0000271e 2**0 CONTENTS, RELOC, READONLY 81 EXEMAIN8 00000003 00000000 00000000 000027ae 2**0 CONTENTS, READONLY
82 EXEMAIN8 00000003 00000000 00000000 00002720 2**0 CONTENTS, READONLY 82 DEVICEEND 00000013 00000000 00000000 000027b1 2**0 CONTENTS, READONLY
83 DEVICEEND 00000013 00000000 00000000 00002723 2**0 CONTENTS, READONLY 83 EXESTACK 00000006 00000000 00000000 000027c4 2**0 CONTENTS, RELOC, READONLY
84 EXESTACK 00000006 00000000 00000000 00002736 2**0 CONTENTS, RELOC, READONLY 84 EXESTASP 00000003 00000000 00000000 000027ca 2**0 CONTENTS, RELOC, READONLY
85 EXESTASP 00000003 00000000 00000000 0000273c 2**0 CONTENTS, RELOC, READONLY 85 EXEJUMPF 00000005 00000000 00000000 000027cd 2**0 CONTENTS, RELOC, READONLY
86 EXEJUMPF 00000005 00000000 00000000 0000273f 2**0 CONTENTS, RELOC, READONLY 86 EXERCSPO 00000004 00000000 00000000 000027d2 2**0 CONTENTS, RELOC, READONLY
87 EXERCSPO 00000004 00000000 00000000 00002744 2**0 CONTENTS, RELOC, READONLY 87 EXERETIP 00000006 00000000 00000000 000027d6 2**0 CONTENTS, RELOC, READONLY
88 EXERETIP 00000006 00000000 00000000 00002748 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
@ -113,7 +112,6 @@ 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_DEC10 00000000 LZMA_DEC10
00000000 l d LZMA_DEC30 00000000 LZMA_DEC30 00000000 l d LZMA_DEC30 00000000 LZMA_DEC30
00000000 l d EXERELO1 00000000 EXERELO1 00000000 l d EXERELO1 00000000 EXERELO1
00000000 l d EXERELO2 00000000 EXERELO2 00000000 l d EXERELO2 00000000 EXERELO2
@ -164,8 +162,8 @@ SYMBOL TABLE:
00000000 l d N2EX8602 00000000 N2EX8602 00000000 l d N2EX8602 00000000 N2EX8602
00000000 l d N2E28602 00000000 N2E28602 00000000 l d N2E28602 00000000 N2E28602
00000000 l d N2E64K02 00000000 N2E64K02 00000000 l d N2E64K02 00000000 N2E64K02
00000000 l d LZMA_DEC99 00000000 LZMA_DEC99
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_DEC20 00000000 LZMA_DEC20 00000000 l d LZMA_DEC20 00000000 LZMA_DEC20
00000000 l d LZMA_DEC31 00000000 LZMA_DEC31 00000000 l d LZMA_DEC31 00000000 LZMA_DEC31
00000000 l d EXEMAIN5 00000000 EXEMAIN5 00000000 l d EXEMAIN5 00000000 EXEMAIN5
@ -198,8 +196,8 @@ SYMBOL TABLE:
00000000 *UND* 00000000 lzma_u_len 00000000 *UND* 00000000 lzma_u_len
00000000 *UND* 00000000 lzma_c_len_hi 00000000 *UND* 00000000 lzma_c_len_hi
00000000 *UND* 00000000 lzma_c_len 00000000 *UND* 00000000 lzma_c_len
00000000 *UND* 00000000 lzma_properties_hi
00000000 *UND* 00000000 lzma_properties 00000000 *UND* 00000000 lzma_properties
00000000 *UND* 00000000 lzma_properties_hi
00000000 *UND* 00000000 clear_dirty_stack_low 00000000 *UND* 00000000 clear_dirty_stack_low
00000000 *UND* 00000000 lzma_u_len_segment 00000000 *UND* 00000000 lzma_u_len_segment
00000000 *UND* 00000000 reloc_size 00000000 *UND* 00000000 reloc_size
@ -367,15 +365,13 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [LZMA_DEC00]: RELOCATION RECORDS FOR [LZMA_DEC00]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
00000005 R_386_16 lzma_stack_adjust 00000004 R_386_16 lzma_stack_adjust
0000000d R_386_16 lzma_u_len_hi 0000000c R_386_16 lzma_u_len_hi
00000011 R_386_16 lzma_u_len 00000010 R_386_16 lzma_u_len
0000001b R_386_16 lzma_c_len_hi 0000001a R_386_16 lzma_c_len_hi
0000001f R_386_16 lzma_c_len 0000001e R_386_16 lzma_c_len
0000002b R_386_16 lzma_properties_hi 0000002c R_386_16 lzma_properties
00000031 R_386_16 lzma_properties 00000031 R_386_16 lzma_properties_hi
00000036 R_386_PC16 LZMA_DEC10
00000039 R_386_PC16 LZMA_DEC30
RELOCATION RECORDS FOR [ignore_reloc_overflow]: RELOCATION RECORDS FOR [ignore_reloc_overflow]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
@ -390,7 +386,7 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [LZMA_DEC30]: RELOCATION RECORDS FOR [LZMA_DEC30]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
00000003 R_386_16 clear_dirty_stack_low 00000004 R_386_16 clear_dirty_stack_low
00000010 R_386_16 lzma_u_len 00000010 R_386_16 lzma_u_len
RELOCATION RECORDS FOR [LZMA_DEC31]: RELOCATION RECORDS FOR [LZMA_DEC31]: