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))
{
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" : "",
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
STUBS =
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),)
ifneq ($(wildcard $(WATCOM)/binl/wcl),)
STUBS += lzma_d_cf.S lzma_d_cs.S
endif
endif
default.targets = all
ifeq ($(strip $(STUBS)),)
@ -33,7 +37,7 @@ include $(top_srcdir)/src/stub/Makefile
# ************************************************************************/
# 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 $($v),$v))
# enumerate the names of all environment variables
@ -134,7 +138,7 @@ CL += -I$(call winedir_s,$(top_srcdir)/src)
endif
# Open Watcom C/C++ 1.6
# http://openwatcom.com/
# http://www.openwatcom.com/
ifneq ($(wildcard $(WATCOM)/binl/wcl),)
c := tc.method-lzma.wcl
$c = PATH='$(WATCOM)/binl:$(PATH)' $(WATCOM)/binl/wcl -zq -bt=dos
@ -147,13 +151,12 @@ $c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src
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 $(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)
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,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: tmp/lzma_d_c%.i
.PRECIOUS: lzma_d_c%.i tmp/lzma_d_c%.i
endif
endif

View File

@ -42,16 +42,10 @@
//
**************************************************************************/
section LZMA_DEC99
.macro LZMA_DEC99_dummy
.endm
// init
section LZMA_DEC00
//.byte 0xcc
push ds
mov bp, sp
#if 0
// DEBUG - check for enough stack
@ -91,26 +85,24 @@ section LZMA_DEC00
push ds // in [bp + 8]
push si // [bp + 6]
add bx, 4
push bx // &state __near [bp + 4]
// enter small memory model
push ds // save ds && dummy for call
push ss
pop ds
add bx, 4
push bx // &state __near [bp + 4]
mov ax, offset lzma_properties_hi
mov [bx + 2], ax
mov ax, offset lzma_properties
mov [bx], ax
call LZMA_DEC10
jmp LZMA_DEC30
// fill properties
movw [bx], offset lzma_properties
movw [bx+2], offset lzma_properties_hi
ignore_reloc_overflow lzma_u_len
ignore_reloc_overflow lzma_c_len
ignore_reloc_overflow lzma_properties
//#define ret
#define ret
section LZMA_DEC10
.arch i8086, nojumps
#define SMALL 1
@ -119,18 +111,18 @@ section LZMA_DEC10
#undef SMALL
section LZMA_DEC20
.arch i8086, nojumps
#define SMALL 1
//#define FAST 1
#define FAST 1
#include "lzma_m.h"
#include "lzma_d_cf.S"
//#undef FAST
#undef SMALL
#undef FAST
.arch i8086, jumps
#undef ret
// cleanup
section LZMA_DEC30
pop ds
#if 1
// clear dirty stack
mov sp, bp
@ -141,7 +133,6 @@ section LZMA_DEC30
jnzs 1b
#endif
mov sp, bp
pop ds
mov di, offset 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
65 N2E64K02 0000000b 00000000 00000000 0000032b 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
68 LZMA_DEC00 0000003b 00000000 00000000 0000033a 2**0 CONTENTS, RELOC, READONLY
69 ignore_reloc_overflow 00000008 00000000 00000000 00000375 2**0 CONTENTS, RELOC, READONLY
70 LZMA_DEC10 000011a4 00000000 00000000 0000037d 2**0 CONTENTS, READONLY
71 LZMA_DEC20 000011a4 00000000 00000000 00001521 2**0 CONTENTS, READONLY
72 LZMA_DEC30 00000012 00000000 00000000 000026c5 2**0 CONTENTS, RELOC, READONLY
73 LZMA_DEC31 00000007 00000000 00000000 000026d7 2**0 CONTENTS, RELOC, READONLY
74 EXEMAIN5 00000001 00000000 00000000 000026de 2**0 CONTENTS, READONLY
75 EXEADJUS 00000007 00000000 00000000 000026df 2**0 CONTENTS, READONLY
76 EXENOADJ 00000002 00000000 00000000 000026e6 2**0 CONTENTS, READONLY
77 EXERELO1 0000001e 00000000 00000000 000026e8 2**0 CONTENTS, RELOC, READONLY
78 EXEREL9A 00000012 00000000 00000000 00002706 2**0 CONTENTS, RELOC, READONLY
79 EXERELO2 00000004 00000000 00000000 00002718 2**0 CONTENTS, READONLY
80 EXEREBIG 00000002 00000000 00000000 0000271c 2**0 CONTENTS, RELOC, READONLY
81 EXERELO3 00000002 00000000 00000000 0000271e 2**0 CONTENTS, RELOC, READONLY
82 EXEMAIN8 00000003 00000000 00000000 00002720 2**0 CONTENTS, READONLY
83 DEVICEEND 00000013 00000000 00000000 00002723 2**0 CONTENTS, READONLY
84 EXESTACK 00000006 00000000 00000000 00002736 2**0 CONTENTS, RELOC, READONLY
85 EXESTASP 00000003 00000000 00000000 0000273c 2**0 CONTENTS, RELOC, READONLY
86 EXEJUMPF 00000005 00000000 00000000 0000273f 2**0 CONTENTS, RELOC, READONLY
87 EXERCSPO 00000004 00000000 00000000 00002744 2**0 CONTENTS, RELOC, READONLY
88 EXERETIP 00000006 00000000 00000000 00002748 2**0 CONTENTS, RELOC, READONLY
67 LZMA_DEC00 00000033 00000000 00000000 0000033a 2**0 CONTENTS, RELOC, READONLY
68 ignore_reloc_overflow 00000008 00000000 00000000 0000036d 2**0 CONTENTS, RELOC, READONLY
69 LZMA_DEC10 000011a3 00000000 00000000 00000375 2**0 CONTENTS, READONLY
70 LZMA_DEC20 0000123b 00000000 00000000 00001518 2**0 CONTENTS, READONLY
71 LZMA_DEC30 00000012 00000000 00000000 00002753 2**0 CONTENTS, RELOC, READONLY
72 LZMA_DEC31 00000007 00000000 00000000 00002765 2**0 CONTENTS, RELOC, READONLY
73 EXEMAIN5 00000001 00000000 00000000 0000276c 2**0 CONTENTS, READONLY
74 EXEADJUS 00000007 00000000 00000000 0000276d 2**0 CONTENTS, READONLY
75 EXENOADJ 00000002 00000000 00000000 00002774 2**0 CONTENTS, READONLY
76 EXERELO1 0000001e 00000000 00000000 00002776 2**0 CONTENTS, RELOC, READONLY
77 EXEREL9A 00000012 00000000 00000000 00002794 2**0 CONTENTS, RELOC, READONLY
78 EXERELO2 00000004 00000000 00000000 000027a6 2**0 CONTENTS, READONLY
79 EXEREBIG 00000002 00000000 00000000 000027aa 2**0 CONTENTS, RELOC, READONLY
80 EXERELO3 00000002 00000000 00000000 000027ac 2**0 CONTENTS, RELOC, READONLY
81 EXEMAIN8 00000003 00000000 00000000 000027ae 2**0 CONTENTS, READONLY
82 DEVICEEND 00000013 00000000 00000000 000027b1 2**0 CONTENTS, READONLY
83 EXESTACK 00000006 00000000 00000000 000027c4 2**0 CONTENTS, RELOC, READONLY
84 EXESTASP 00000003 00000000 00000000 000027ca 2**0 CONTENTS, RELOC, READONLY
85 EXEJUMPF 00000005 00000000 00000000 000027cd 2**0 CONTENTS, RELOC, READONLY
86 EXERCSPO 00000004 00000000 00000000 000027d2 2**0 CONTENTS, RELOC, READONLY
87 EXERETIP 00000006 00000000 00000000 000027d6 2**0 CONTENTS, RELOC, READONLY
SYMBOL TABLE:
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
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 NRV2EEX9 00000000 NRV2EEX9
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 EXERELO1 00000000 EXERELO1
00000000 l d EXERELO2 00000000 EXERELO2
@ -164,8 +162,8 @@ SYMBOL TABLE:
00000000 l d N2EX8602 00000000 N2EX8602
00000000 l d N2E28602 00000000 N2E28602
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 LZMA_DEC10 00000000 LZMA_DEC10
00000000 l d LZMA_DEC20 00000000 LZMA_DEC20
00000000 l d LZMA_DEC31 00000000 LZMA_DEC31
00000000 l d EXEMAIN5 00000000 EXEMAIN5
@ -198,8 +196,8 @@ SYMBOL TABLE:
00000000 *UND* 00000000 lzma_u_len
00000000 *UND* 00000000 lzma_c_len_hi
00000000 *UND* 00000000 lzma_c_len
00000000 *UND* 00000000 lzma_properties_hi
00000000 *UND* 00000000 lzma_properties
00000000 *UND* 00000000 lzma_properties_hi
00000000 *UND* 00000000 clear_dirty_stack_low
00000000 *UND* 00000000 lzma_u_len_segment
00000000 *UND* 00000000 reloc_size
@ -367,15 +365,13 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [LZMA_DEC00]:
OFFSET TYPE VALUE
00000005 R_386_16 lzma_stack_adjust
0000000d R_386_16 lzma_u_len_hi
00000011 R_386_16 lzma_u_len
0000001b R_386_16 lzma_c_len_hi
0000001f R_386_16 lzma_c_len
0000002b R_386_16 lzma_properties_hi
00000031 R_386_16 lzma_properties
00000036 R_386_PC16 LZMA_DEC10
00000039 R_386_PC16 LZMA_DEC30
00000004 R_386_16 lzma_stack_adjust
0000000c R_386_16 lzma_u_len_hi
00000010 R_386_16 lzma_u_len
0000001a R_386_16 lzma_c_len_hi
0000001e R_386_16 lzma_c_len
0000002c R_386_16 lzma_properties
00000031 R_386_16 lzma_properties_hi
RELOCATION RECORDS FOR [ignore_reloc_overflow]:
OFFSET TYPE VALUE
@ -390,7 +386,7 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [LZMA_DEC30]:
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
RELOCATION RECORDS FOR [LZMA_DEC31]: