merge
This commit is contained in:
@@ -553,23 +553,28 @@ static int do_option(int optc, const char *arg)
|
|||||||
|
|
||||||
// method
|
// method
|
||||||
case 702:
|
case 702:
|
||||||
|
opt->method_nrv2b_seen = true;
|
||||||
if (!set_method(M_NRV2B_LE32, -1))
|
if (!set_method(M_NRV2B_LE32, -1))
|
||||||
e_method(M_NRV2B_LE32, opt->level);
|
e_method(M_NRV2B_LE32, opt->level);
|
||||||
break;
|
break;
|
||||||
case 704:
|
case 704:
|
||||||
|
opt->method_nrv2d_seen = true;
|
||||||
if (!set_method(M_NRV2D_LE32, -1))
|
if (!set_method(M_NRV2D_LE32, -1))
|
||||||
e_method(M_NRV2D_LE32, opt->level);
|
e_method(M_NRV2D_LE32, opt->level);
|
||||||
break;
|
break;
|
||||||
case 705:
|
case 705:
|
||||||
|
opt->method_nrv2e_seen = true;
|
||||||
if (!set_method(M_NRV2E_LE32, -1))
|
if (!set_method(M_NRV2E_LE32, -1))
|
||||||
e_method(M_NRV2E_LE32, opt->level);
|
e_method(M_NRV2E_LE32, opt->level);
|
||||||
break;
|
break;
|
||||||
case 721:
|
case 721:
|
||||||
|
opt->method_lzma_seen = true;
|
||||||
opt->all_methods_use_lzma = true;
|
opt->all_methods_use_lzma = true;
|
||||||
if (!set_method(M_LZMA, -1))
|
if (!set_method(M_LZMA, -1))
|
||||||
e_method(M_LZMA, opt->level);
|
e_method(M_LZMA, opt->level);
|
||||||
break;
|
break;
|
||||||
case 722:
|
case 722:
|
||||||
|
opt->method_lzma_seen = false;
|
||||||
opt->all_methods_use_lzma = false;
|
opt->all_methods_use_lzma = false;
|
||||||
if (M_IS_LZMA(opt->method))
|
if (M_IS_LZMA(opt->method))
|
||||||
opt->method = -1;
|
opt->method = -1;
|
||||||
|
|||||||
@@ -47,6 +47,10 @@ struct options_t {
|
|||||||
|
|
||||||
// compression options
|
// compression options
|
||||||
int method;
|
int method;
|
||||||
|
bool method_lzma_seen;
|
||||||
|
bool method_nrv2b_seen;
|
||||||
|
bool method_nrv2d_seen;
|
||||||
|
bool method_nrv2e_seen;
|
||||||
int level; // compression level 1..10
|
int level; // compression level 1..10
|
||||||
int filter; // preferred filter from Packer::getFilters()
|
int filter; // preferred filter from Packer::getFilters()
|
||||||
bool ultra_brute;
|
bool ultra_brute;
|
||||||
|
|||||||
+16
-2
@@ -53,11 +53,16 @@ PackExe::PackExe(InputFile *f) :
|
|||||||
bele = &N_BELE_RTP::le_policy;
|
bele = &N_BELE_RTP::le_policy;
|
||||||
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;
|
||||||
|
|
||||||
|
// disable lzma for "--brute" unless explicitly given "--lzma"
|
||||||
|
if (opt->all_methods_use_lzma && !opt->method_lzma_seen)
|
||||||
|
opt->all_methods_use_lzma = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const int *PackExe::getCompressionMethods(int method, int level) const
|
const int *PackExe::getCompressionMethods(int method, int level) const
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
static const int m_all[] = { M_NRV2B_8, M_NRV2D_8, M_NRV2E_8, M_END };
|
static const int m_all[] = { M_NRV2B_8, M_NRV2D_8, M_NRV2E_8, M_END };
|
||||||
static const int m_nrv2b[] = { M_NRV2B_8, M_END };
|
static const int m_nrv2b[] = { M_NRV2B_8, M_END };
|
||||||
static const int m_nrv2d[] = { M_NRV2D_8, M_END };
|
static const int m_nrv2d[] = { M_NRV2D_8, M_END };
|
||||||
@@ -73,6 +78,10 @@ const int *PackExe::getCompressionMethods(int method, int level) const
|
|||||||
if (level == 1 || small)
|
if (level == 1 || small)
|
||||||
return m_nrv2b;
|
return m_nrv2b;
|
||||||
return m_nrv2e;
|
return m_nrv2e;
|
||||||
|
#else
|
||||||
|
bool small = ih_imagesize <= 256*1024;
|
||||||
|
return Packer::getDefaultCompressionMethods_8(method, level, small);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -96,7 +105,9 @@ int PackExe::fillExeHeader(struct exe_header_t *eh) const
|
|||||||
oh.ident = 'M' + 'Z' * 256;
|
oh.ident = 'M' + 'Z' * 256;
|
||||||
oh.headsize16 = 2;
|
oh.headsize16 = 2;
|
||||||
|
|
||||||
unsigned minsp = M_IS_LZMA(ph.method) ? getDecompressorWrkmemSize() + 0x1100 : 0x200;
|
unsigned minsp = 0x200;
|
||||||
|
if (M_IS_LZMA(ph.method))
|
||||||
|
minsp = getDecompressorWrkmemSize() + 0x1500; // FIXME ???
|
||||||
assert(minsp < 0xff00);
|
assert(minsp < 0xff00);
|
||||||
|
|
||||||
oh.sp = ih.sp > minsp ? (unsigned) ih.sp : minsp;
|
oh.sp = ih.sp > minsp ? (unsigned) ih.sp : minsp;
|
||||||
@@ -170,7 +181,7 @@ void PackExe::buildLoader(const Filter *)
|
|||||||
"NRV2EEX9",
|
"NRV2EEX9",
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
else if (ph.method == M_LZMA)
|
else if M_IS_LZMA(ph.method)
|
||||||
addLoader("LZMA_DEC00,LZMA_DEC10,LZMA_DEC99,LZMA_DEC30",
|
addLoader("LZMA_DEC00,LZMA_DEC10,LZMA_DEC99,LZMA_DEC30",
|
||||||
ph.u_len > 0xffff ? "LZMA_DEC31" : "",
|
ph.u_len > 0xffff ? "LZMA_DEC31" : "",
|
||||||
NULL
|
NULL
|
||||||
@@ -439,7 +450,10 @@ void PackExe::pack(OutputFile *fo)
|
|||||||
// compress (max_match = 8192)
|
// compress (max_match = 8192)
|
||||||
upx_compress_config_t cconf; cconf.reset();
|
upx_compress_config_t cconf; cconf.reset();
|
||||||
cconf.conf_ucl.max_match = MAXMATCH;
|
cconf.conf_ucl.max_match = MAXMATCH;
|
||||||
|
cconf.conf_lzma.max_num_probs = 1846 + (768 << 4); // ushort: ~28KB stack
|
||||||
compressWithFilters(&ft, 32, &cconf);
|
compressWithFilters(&ft, 32, &cconf);
|
||||||
|
|
||||||
|
if (M_IS_NRV2B(ph.method) || M_IS_NRV2D(ph.method) || M_IS_NRV2E(ph.method))
|
||||||
if (ph.max_run_found + ph.max_match_found > 0x8000)
|
if (ph.max_run_found + ph.max_match_found > 0x8000)
|
||||||
throwCantPack("decompressor limit exceeded, send a bugreport");
|
throwCantPack("decompressor limit exceeded, send a bugreport");
|
||||||
|
|
||||||
|
|||||||
@@ -211,6 +211,7 @@ endef
|
|||||||
|
|
||||||
# some common arch settings
|
# some common arch settings
|
||||||
tc.arch-i086.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@
|
tc.arch-i086.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@
|
||||||
|
tc.arch-i086.wdis = $(WATCOM)/binl/wdis
|
||||||
tc.arch-i386.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@
|
tc.arch-i386.gcc = i386-linux-gcc-3.4.6 -m32 -march=i386 -nostdinc -MMD -MT $@
|
||||||
tc.arch-i386.djasm = djasm
|
tc.arch-i386.djasm = djasm
|
||||||
|
|
||||||
|
|||||||
+1481
-1633
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# highly experimental support for i086 using Open Watcom 1.6
|
# highly experimental support for i086 using Digital Mars C/C++
|
||||||
#
|
#
|
||||||
|
|
||||||
MAKEFLAGS += -rR
|
MAKEFLAGS += -rR
|
||||||
@@ -32,69 +32,87 @@ include $(top_srcdir)/src/stub/Makefile
|
|||||||
# // method-lzma
|
# // method-lzma
|
||||||
# ************************************************************************/
|
# ************************************************************************/
|
||||||
|
|
||||||
lzma_d_c% : tc_list = method-lzma default
|
lzma_d_c% : tc_list = method-lzma arch-i086 default
|
||||||
lzma_d_c% : tc_bfdname =
|
lzma_d_c% : tc_bfdname =
|
||||||
|
|
||||||
# Open Watcom C/C++ 1.6
|
# gcc
|
||||||
c := tc.method-lzma.wcc
|
c := tc.arch-i086.gcc
|
||||||
$c = $(WATCOM)/binl/wcc -zq -bt=dos
|
$c += -MF /dev/null
|
||||||
$c += -mc -ecc
|
$c += -Wall -W
|
||||||
$c += -zm -zc
|
|
||||||
$c += -os -s -0 -d0
|
|
||||||
$c += -w5 -we -fr=/dev/null
|
|
||||||
$c += -D__INT_MAX__=32767
|
|
||||||
$c += -I$(UPX_LZMADIR)
|
$c += -I$(UPX_LZMADIR)
|
||||||
$c += -I$(top_srcdir)/src
|
$c += -I$(top_srcdir)/src
|
||||||
|
|
||||||
tc.method-lzma.dmpobj = $(WATCOM)/binl/dmpobj
|
# Digital Mars C/C++ 8.49
|
||||||
tc.method-lzma.wdis = $(WATCOM)/binl/wdis
|
# http://www.digitalmars.com/download/freecompiler.html
|
||||||
tc.method-lzma.wdump = $(WATCOM)/binl/wdump
|
ifneq ($(wildcard $(DM849DIR)/bin/.),)
|
||||||
|
c := tc.method-lzma.dmc
|
||||||
|
$c = @$(WINEENV) CFLAGS='$(DMC)' wine cmd.exe /c tmp/dmc.bat
|
||||||
|
$c += -ms -R
|
||||||
|
$c += -NS
|
||||||
|
$c += -w- -w7 -r
|
||||||
|
DMC := -o -0
|
||||||
|
DMC += -D__INT_MAX__=32767
|
||||||
|
DMC += -I$(shell winepath -s z:$(realpath $(UPX_LZMADIR)))
|
||||||
|
DMC += -I$(shell winepath -s z:$(realpath $(top_srcdir)/src))
|
||||||
|
endif
|
||||||
|
|
||||||
|
TMP_DEPS = tmp/.tmp-stamp tmp/bcc.bat tmp/cl.bat tmp/dmc.bat
|
||||||
|
|
||||||
lzma_d_c%.S : lzma_d_c%.i cleanasm.py $(MAKEFILE_LIST)
|
lzma_d_c%.S : lzma_d_c%.i cleanasm.py $(MAKEFILE_LIST)
|
||||||
python cleanasm.py --label-prefix=$(LABEL_PREFIX) $< $@
|
python cleanasm.py --label-prefix=$(LABEL_PREFIX) $< $@
|
||||||
|
|
||||||
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),)
|
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),)
|
||||||
|
ifneq ($(wildcard $(DM849DIR)/bin/.),)
|
||||||
ifneq ($(wildcard $(WATCOM)/binl/.),)
|
ifneq ($(wildcard $(WATCOM)/binl/.),)
|
||||||
ifneq ($(wildcard $(VCLINK.exe)),)
|
ifneq ($(wildcard /usr/bin/wine),)
|
||||||
|
|
||||||
lzma_d_c%.i : lzma_d_c.c tmp/.tmp-stamp $(MAKEFILE_LIST)
|
lzma_d_c%.i : tmp/lzma_d_c%.i
|
||||||
|
cp $< $@
|
||||||
|
|
||||||
|
tmp/lzma_d_c%.i : lzma_d_c.c wdis2gas.py $(MAKEFILE_LIST) $(TMP_DEPS)
|
||||||
rm -f tmp/$T.a tmp/$T.o tmp/$T.obj
|
rm -f tmp/$T.a tmp/$T.o tmp/$T.obj
|
||||||
# compile
|
# compile
|
||||||
$(call tc,wcc) $(PP_FLAGS) -fo=tmp/$T.obj $<
|
$(call tc,dmc) $(PP_FLAGS) -c -otmp/$T_dm.obj $<
|
||||||
## $(call tc,bcc) $(PP_FLAGS) -c -otmp/$T.obj $<
|
$(call tc,wdis) tmp/$T_dm.obj | $(RTRIM) > tmp/$T_dm.obj.disasm
|
||||||
## $(call tc,dmc) $(PP_FLAGS) -c -otmp/$T.obj $<
|
## $(call tc,wcl) $(PP_FLAGS) -c -fo=tmp/$T_wc.obj $<
|
||||||
## $(call tc,cl) $(PP_FLAGS) -c -Fotmp/$T.obj $<
|
## $(call tc,wdis) tmp/$T_wc.obj | $(RTRIM) > tmp/$T.obj.disasm
|
||||||
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
## $(call tc,bcc) $(PP_FLAGS) -c -otmp/$T_bc.obj $<
|
||||||
# convert OMF to COFF because objdump does not support OMF
|
## $(call tc,wdis) tmp/$T_bc.obj | $(RTRIM) > tmp/$T_bc.obj.disasm
|
||||||
# TODO: should write a Python script wdis2gas.py and use that instead
|
## $(call tc,cl) $(PP_FLAGS) -c -Fotmp/$T_vc.obj $<
|
||||||
cp -p tmp/$T.obj tmp/$T.o
|
## $(call tc,wdis) tmp/$T_vc.obj | $(RTRIM) > tmp/$T_vc.obj.disasm
|
||||||
cd tmp && $(WINEENV) wine $(VCLINK.exe) -lib -nologo -out:$T.a $T.o
|
# convert
|
||||||
cd tmp && $(call tc,m-ar) x $T.a
|
python wdis2gas.py tmp/$T_dm.obj.disasm tmp/$T.S
|
||||||
# dump
|
$(call tc,gcc) -c -o tmp/$T.o tmp/$T.S
|
||||||
$(call tc,objdump) -b coff-i386 -m i8086 -M intel -Dr --no-show -w tmp/$T.o | $(RTRIM) > $@
|
$(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_cf.i lzma_d_cs.i
|
.PRECIOUS: lzma_d_cf.i lzma_d_cs.i
|
||||||
|
.PRECIOUS: tmp/lzma_d_cf.i tmp/lzma_d_cs.i
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
lzma_d_cf.% : PP_FLAGS = -DFAST
|
lzma_d_cf.% : PP_FLAGS = -DFAST
|
||||||
lzma_d_cs.% : PP_FLAGS = -DSMALL
|
lzma_d_cs.% : PP_FLAGS = -DSMALL
|
||||||
lzma_d_cf.% : LABEL_PREFIX = .Lf
|
lzma_d_cf.% : LABEL_PREFIX = .Lf
|
||||||
lzma_d_cs.% : LABEL_PREFIX = .Ls
|
lzma_d_cs.% : LABEL_PREFIX = .Ls
|
||||||
|
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
# /***********************************************************************
|
# /***********************************************************************
|
||||||
# // cc_test
|
# // cc_test
|
||||||
# ************************************************************************/
|
# ************************************************************************/
|
||||||
|
|
||||||
|
CC_TEST_DEPS = $(MAKEFILE_LIST) $(TMP_DEPS)
|
||||||
WINEENV = env
|
WINEENV = env
|
||||||
WINEENV = env -i DISPLAY='$(DISPLAY)' HOME='$(HOME)' PATH='$(PATH)' USER='$(USER)'
|
WINEENV = env -i DISPLAY='$(DISPLAY)' HOME='$(HOME)' PATH='$(PATH)' USER='$(USER)'
|
||||||
|
|
||||||
# work around limitations of wine's cmd.exe
|
# work around limitations of wine's cmd.exe
|
||||||
define mkbat
|
define mkbat
|
||||||
echo -E '@set PATH=$3;%PATH%' > $1
|
echo -E '@set PATH=$3;%PATH%' > $1
|
||||||
|
echo -E '@set INCLUDE=$4' >> $1
|
||||||
|
echo -E '@set LIB=$5' >> $1
|
||||||
echo -E '@set a=%1 %2 %3 %4 %5 %6 %7 %8 %9' >> $1
|
echo -E '@set a=%1 %2 %3 %4 %5 %6 %7 %8 %9' >> $1
|
||||||
echo -e '@shift\n@shift\n@shift\n@shift\n@shift' >> $1
|
echo -e '@shift\n@shift\n@shift\n@shift\n@shift' >> $1
|
||||||
echo -e '@shift\n@shift\n@shift\n@shift' >> $1
|
echo -e '@shift\n@shift\n@shift\n@shift' >> $1
|
||||||
@@ -105,11 +123,32 @@ define mkbat
|
|||||||
unix2dos -q $1
|
unix2dos -q $1
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
tmp/bcc.bat: tmp/.tmp-stamp $(MAKEFILE_LIST)
|
||||||
|
@$(call mkbat,$@,bcc.exe,$(BC502WINDIR)\bin,,)
|
||||||
|
tmp/cl.bat: tmp/.tmp-stamp $(MAKEFILE_LIST)
|
||||||
|
@$(call mkbat,$@,cl.exe,$(VC152WINDIR)\bin,$(VC152WINDIR)\include,$(VC152WINDIR)\lib)
|
||||||
|
tmp/dmc.bat: tmp/.tmp-stamp $(MAKEFILE_LIST)
|
||||||
|
@$(call mkbat,$@,dmc.exe,$(shell winepath -w $(DM849DIR)/bin),,)
|
||||||
|
|
||||||
|
# Open Watcom C/C++ 1.6
|
||||||
|
# http://openwatcom.com/
|
||||||
|
ifneq ($(wildcard $(WATCOM)/binl/.),)
|
||||||
|
c := tc.method-lzma.wcl
|
||||||
|
$c = PATH='$(WATCOM)/binl:$(PATH)' $(WATCOM)/binl/wcl -zq -bt=dos
|
||||||
|
$c += -ms -ecc
|
||||||
|
$c += -zm -zc
|
||||||
|
$c += -os -s -0 -d0
|
||||||
|
$c += -w5 -we -fr=/dev/null
|
||||||
|
$c += -D__INT_MAX__=32767
|
||||||
|
$c += -I$(UPX_LZMADIR)
|
||||||
|
$c += -I$(top_srcdir)/src
|
||||||
|
endif
|
||||||
|
|
||||||
# Borland C/C++ 5.02
|
# Borland C/C++ 5.02
|
||||||
ifneq ($(wildcard $(BC502DIR)/bin/.),)
|
ifneq ($(wildcard $(BC502DIR)/bin/.),)
|
||||||
c := tc.method-lzma.bcc
|
c := tc.method-lzma.bcc
|
||||||
$c = @$(WINEENV) CL='$(CL)' wine cmd.exe /c tmp/bcc.bat
|
$c = @$(WINEENV) wine cmd.exe /c tmp/bcc.bat
|
||||||
$c += -mc
|
$c += -ms
|
||||||
$c += -O1 -1
|
$c += -O1 -1
|
||||||
$c += -w
|
$c += -w
|
||||||
$c += -D__INT_MAX__=32767
|
$c += -D__INT_MAX__=32767
|
||||||
@@ -118,26 +157,13 @@ $c += -I$(subst \,/,$(shell winepath -s z:$(realpath $(UPX_LZMADIR)/C/7zip/Compr
|
|||||||
$c += -I$(top_srcdir)/src
|
$c += -I$(top_srcdir)/src
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Digital Mars C/C++ 8.47
|
|
||||||
ifneq ($(wildcard $(DM847DIR)/bin/.),)
|
|
||||||
c := tc.method-lzma.dmc
|
|
||||||
$c = @$(WINEENV) CFLAGS='$(DMC)' wine cmd.exe /c tmp/dmc.bat
|
|
||||||
$c += -mc
|
|
||||||
$c += -NS
|
|
||||||
$c += -w-
|
|
||||||
DMC := -o -0
|
|
||||||
DMC += -D__INT_MAX__=32767
|
|
||||||
DMC += -I$(shell winepath -s z:$(realpath $(UPX_LZMADIR)))
|
|
||||||
DMC += -I$(shell winepath -s z:$(realpath $(top_srcdir)/src))
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Visual C/C++ 1.52 (8.00c)
|
# Visual C/C++ 1.52 (8.00c)
|
||||||
ifneq ($(wildcard $(VC152DIR)/bin/.),)
|
ifneq ($(wildcard $(VC152DIR)/bin/.),)
|
||||||
c := tc.method-lzma.cl
|
c := tc.method-lzma.cl
|
||||||
$c = @$(WINEENV) CL='$(CL)' wine cmd.exe /c tmp/cl.bat
|
$c = @$(WINEENV) CL='$(CL)' wine cmd.exe /c tmp/cl.bat
|
||||||
$c += -AC
|
$c += -AS -Gd
|
||||||
$c += -Gy
|
$c += -Gy
|
||||||
$c += -O1 -Gf -Gs -G0
|
$c += -O2 -Gf -Gs -G0
|
||||||
$c += -W4
|
$c += -W4
|
||||||
CL := -nologo
|
CL := -nologo
|
||||||
CL += -D__INT_MAX__=32767
|
CL += -D__INT_MAX__=32767
|
||||||
@@ -147,40 +173,74 @@ endif
|
|||||||
|
|
||||||
|
|
||||||
ifneq ($(wildcard $(WATCOM)/binl/.),)
|
ifneq ($(wildcard $(WATCOM)/binl/.),)
|
||||||
cc_test_wc : tc_list = method-lzma default
|
cc_test_wc : tc_list = method-lzma arch-i086 default
|
||||||
cc_test_wc: cc_test.c
|
cc_test_wc: cc_test.c $(CC_TEST_DEPS)
|
||||||
$(call tc,wcc) $(PP_FLAGS) -fo=tmp/$T.obj $<
|
$(call tc,wcl) $(PP_FLAGS) -c -fo=tmp/$T.obj $<
|
||||||
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
||||||
## cat tmp/$T.obj.disasm
|
## cat tmp/$T.obj.disasm
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(wildcard $(BC502DIR)/bin/.),)
|
ifneq ($(wildcard $(BC502DIR)/bin/.),)
|
||||||
tmp/bcc.bat: tmp/.tmp-stamp $(MAKEFILE_LIST)
|
cc_test_bc : tc_list = method-lzma arch-i086 default
|
||||||
@$(call mkbat,$@,bcc.exe,$(BC502WINDIR)\\bin)
|
cc_test_bc: cc_test.c $(CC_TEST_DEPS)
|
||||||
cc_test_bc : tc_list = method-lzma default
|
|
||||||
cc_test_bc: cc_test.c tmp/bcc.bat
|
|
||||||
$(call tc,bcc) $(PP_FLAGS) -c -otmp/$T.obj $<
|
$(call tc,bcc) $(PP_FLAGS) -c -otmp/$T.obj $<
|
||||||
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
||||||
## cat tmp/$T.obj.disasm
|
## cat tmp/$T.obj.disasm
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(wildcard $(DM847DIR)/bin/.),)
|
ifneq ($(wildcard $(DM849DIR)/bin/.),)
|
||||||
tmp/dmc.bat: tmp/.tmp-stamp $(MAKEFILE_LIST)
|
cc_test_dm : tc_list = method-lzma arch-i086 default
|
||||||
@$(call mkbat,$@,dmc.exe,$(DM847WINDIR)\\bin)
|
cc_test_dm: cc_test.c $(CC_TEST_DEPS)
|
||||||
cc_test_dm : tc_list = method-lzma default
|
|
||||||
cc_test_dm: cc_test.c tmp/dmc.bat
|
|
||||||
$(call tc,dmc) $(PP_FLAGS) -c -otmp/$T.obj $<
|
$(call tc,dmc) $(PP_FLAGS) -c -otmp/$T.obj $<
|
||||||
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
||||||
## cat tmp/$T.obj.disasm
|
## cat tmp/$T.obj.disasm
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(wildcard $(VC152DIR)/bin/.),)
|
ifneq ($(wildcard $(VC152DIR)/bin/.),)
|
||||||
tmp/cl.bat: tmp/.tmp-stamp $(MAKEFILE_LIST)
|
cc_test_vc : tc_list = method-lzma arch-i086 default
|
||||||
@$(call mkbat,$@,cl.exe,$(VC152WINDIR)\\bin)
|
cc_test_vc: cc_test.c $(CC_TEST_DEPS)
|
||||||
cc_test_vc : tc_list = method-lzma default
|
|
||||||
cc_test_vc: cc_test.c tmp/cl.bat
|
|
||||||
$(call tc,cl) $(PP_FLAGS) -c -Fotmp/$T.obj $<
|
$(call tc,cl) $(PP_FLAGS) -c -Fotmp/$T.obj $<
|
||||||
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
||||||
## cat tmp/$T.obj.disasm
|
## cat tmp/$T.obj.disasm
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
# /***********************************************************************
|
||||||
|
# // l_test
|
||||||
|
# ************************************************************************/
|
||||||
|
|
||||||
|
L_TEST_DEPS = lzma_d_c.c $(MAKEFILE_LIST) $(TMP_DEPS)
|
||||||
|
DOSBOX = /usr/bin/time -v dosbox -exit
|
||||||
|
DOSBOX = dosbox
|
||||||
|
|
||||||
|
tmp/l_t_gcc_i386.% : tc_list = arch-i086 default
|
||||||
|
tmp/l_t_gcc_i386.out: l_test.c $(L_TEST_DEPS)
|
||||||
|
$(call tc,gcc) -O0 -g -o $@ $<
|
||||||
|
./$@
|
||||||
|
|
||||||
|
tmp/l_t_bc.% : tc_list = method-lzma arch-i086 default
|
||||||
|
tmp/l_t_bc.exe: l_test.c $(L_TEST_DEPS)
|
||||||
|
$(call tc,bcc) -o$(subst /,\\,$@) $<
|
||||||
|
@rm -f l_test.o l_test.obj
|
||||||
|
$(DOSBOX) $@
|
||||||
|
|
||||||
|
tmp/l_t_dm.% : tc_list = method-lzma arch-i086 default
|
||||||
|
tmp/l_t_dm.exe: l_test.c $(L_TEST_DEPS)
|
||||||
|
$(call tc,dmc) -ml -o$(subst /,\\,$@) $<
|
||||||
|
@rm -f l_test.o l_test.obj
|
||||||
|
$(DOSBOX) $@
|
||||||
|
|
||||||
|
tmp/l_t_wc.% : tc_list = method-lzma arch-i086 default
|
||||||
|
tmp/l_t_wc.exe: l_test.c $(L_TEST_DEPS)
|
||||||
|
$(call tc,wcl) -fe=$@ $<
|
||||||
|
@rm -f l_test.o l_test.obj
|
||||||
|
$(DOSBOX) $@
|
||||||
|
|
||||||
|
tmp/l_t_vc.% : tc_list = method-lzma arch-i086 default
|
||||||
|
tmp/l_t_vc.exe: l_test.c $(L_TEST_DEPS)
|
||||||
|
$(call tc,cl) -Fe$(subst /,\\,$@) $<
|
||||||
|
@rm -f l_test.o l_test.obj
|
||||||
|
$(DOSBOX) $@
|
||||||
|
|
||||||
|
.PHONY: tmp/l_t_gcc_i386.out tmp/l_t_bc.exe tmp/l_t_dm.exe tmp/l_t_wc.exe tmp/l_t_vc.exe
|
||||||
|
|
||||||
|
|||||||
@@ -58,9 +58,11 @@ typedef unsigned short hsize_t;
|
|||||||
|
|
||||||
// pia - pointer add
|
// pia - pointer add
|
||||||
hptr __cdecl pia(hptr a, hsize_t d) { return a + d; }
|
hptr __cdecl pia(hptr a, hsize_t d) { return a + d; }
|
||||||
|
hptr __cdecl pia1(hptr a) { return a + 1; }
|
||||||
|
|
||||||
// pis - pointer subtract
|
// pis - pointer subtract
|
||||||
hptr __cdecl pis(hptr a, hsize_t d) { return a - d; }
|
hptr __cdecl pis(hptr a, hsize_t d) { return a - d; }
|
||||||
|
hptr __cdecl pis1(hptr a) { return a - 1; }
|
||||||
|
|
||||||
// pts - pointer diff
|
// pts - pointer diff
|
||||||
hptrdiff_t __cdecl pts(hptr a, hptr b) { return a - b; }
|
hptrdiff_t __cdecl pts(hptr a, hptr b) { return a - b; }
|
||||||
@@ -75,9 +77,11 @@ int __cdecl ptc_ge(hptr a, hptr b) { return a >= b; }
|
|||||||
|
|
||||||
// u4m - unsigned multiplication
|
// u4m - unsigned multiplication
|
||||||
uint32_t __cdecl u4m(uint32_t a, uint32_t b) { return a * b; }
|
uint32_t __cdecl u4m(uint32_t a, uint32_t b) { return a * b; }
|
||||||
|
uint32_t __pascal u4m_p(uint32_t a, uint32_t b) { return b * a; }
|
||||||
|
|
||||||
// i4m - signed multiplication
|
// i4m - signed multiplication
|
||||||
int32_t __cdecl i4m(int32_t a, int32_t b) { return a * b; }
|
int32_t __cdecl i4m(int32_t a, int32_t b) { return a * b; }
|
||||||
|
int32_t __pascal i4m_p(int32_t a, int32_t b) { return b * a; }
|
||||||
|
|
||||||
// just for testing
|
// just for testing
|
||||||
uint16_t __cdecl u2m(uint16_t a, uint16_t b) { return a * b; }
|
uint16_t __cdecl u2m(uint16_t a, uint16_t b) { return a * b; }
|
||||||
@@ -85,10 +89,25 @@ int16_t __cdecl i2m(int16_t a, int16_t b) { return a * b; }
|
|||||||
uint32_t __cdecl u2m4(uint16_t a, uint16_t b) { return a * b; }
|
uint32_t __cdecl u2m4(uint16_t a, uint16_t b) { return a * b; }
|
||||||
int32_t __cdecl i2m4(int16_t a, int16_t b) { return a * b; }
|
int32_t __cdecl i2m4(int16_t a, int16_t b) { return a * b; }
|
||||||
|
|
||||||
|
uint16_t __cdecl u2shl8 (uint16_t a) { return a << 8; }
|
||||||
|
uint32_t __cdecl u4shl8 (uint32_t a) { return a << 8; }
|
||||||
uint16_t __cdecl u2shl12(uint16_t a) { return a << 12; }
|
uint16_t __cdecl u2shl12(uint16_t a) { return a << 12; }
|
||||||
uint32_t __cdecl u4shl14(uint32_t a) { return a << 12; }
|
uint32_t __cdecl u4shl12(uint32_t a) { return a << 12; }
|
||||||
|
uint32_t __cdecl u4shl16(uint32_t a) { return a << 16; }
|
||||||
|
uint32_t __cdecl u4shl24(uint32_t a) { return a << 24; }
|
||||||
uint16_t __cdecl u2shlv(uint16_t a, unsigned v) { return a << v; }
|
uint16_t __cdecl u2shlv(uint16_t a, unsigned v) { return a << v; }
|
||||||
uint32_t __cdecl u4shlv(uint32_t a, unsigned v) { return a << v; }
|
uint32_t __cdecl u4shlv(uint32_t a, unsigned v) { return a << v; }
|
||||||
|
|
||||||
|
void __pascal p4nshlv_v(unsigned char v, uint32_t __near *a) { *a <<= v; }
|
||||||
|
void __pascal p4fshlv_v(unsigned char v, uint32_t __far *a) { *a <<= v; }
|
||||||
|
uint32_t __pascal p4nshlv(unsigned char v, uint32_t __near *a) { return *a <<= v; }
|
||||||
|
uint32_t __pascal p4fshlv(unsigned char v, uint32_t __far *a) { return *a <<= v; }
|
||||||
|
|
||||||
|
uint32_t __cdecl shlv_2(uint16_t h, uint16_t l, unsigned v)
|
||||||
|
{ uint16_t x = l >> (16 - v); l <<= v; h <<= v; h |= x; return h * 65536ul + l; }
|
||||||
|
|
||||||
|
hptrdiff_t __cdecl hptr2int(hptr a) { return (hptrdiff_t) a; }
|
||||||
|
hptr __cdecl int2hptr(hptrdiff_t a) { return (hptr) a; }
|
||||||
|
|
||||||
|
|
||||||
/* vim:set ts=4 et: */
|
/* vim:set ts=4 et: */
|
||||||
|
|||||||
@@ -37,14 +37,12 @@ class opts:
|
|||||||
# optimizer flags
|
# optimizer flags
|
||||||
auto_inline = 1
|
auto_inline = 1
|
||||||
call_rewrite = 1
|
call_rewrite = 1
|
||||||
|
loop_rewrite = 1
|
||||||
|
|
||||||
|
|
||||||
inline_map = {
|
inline_map = {
|
||||||
## "__PIA": "WCC_PIA",
|
"__aNNalshl": "M_aNNalshl",
|
||||||
"__PTS": "WCC_PTS",
|
"__aNahdiff": "M_aNahdiff",
|
||||||
## "__U4M_V01": "WCC_U4M_V01",
|
|
||||||
"__PIA_V02": "WCC_PIA_V02",
|
|
||||||
"__PIA_V01": "WCC_PIA_V01",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -75,14 +73,20 @@ def main(argv):
|
|||||||
#
|
#
|
||||||
labels = {}
|
labels = {}
|
||||||
def parse_label(inst, args):
|
def parse_label(inst, args):
|
||||||
m = re.search("^([0-9a-z]+)\s+<", args)
|
k = v = None
|
||||||
if m:
|
m = re.search(r"^(.*?)\b(2|R_386_PC16)\s+(__\w+)$", args)
|
||||||
|
if m and k is None:
|
||||||
|
# external 2-byte label
|
||||||
|
k, v = m.group(3).strip(), [1, 2, None, 0]
|
||||||
|
m = re.search("^0x([0-9a-z]+)$", args)
|
||||||
|
if m and k is None:
|
||||||
# local label
|
# local label
|
||||||
k, v = m.group(1).strip(), [0, 0, None, 0]
|
k, v = m.group(1).strip(), [0, 0, None, 0]
|
||||||
m = re.search(r"^(.*?)\b2\s+(__\w+)$", args)
|
m = re.search("^([0-9a-z]+)\s+<", args)
|
||||||
if m:
|
if m and k is None:
|
||||||
# external 2-byte label
|
# local label
|
||||||
k, v = m.group(2).strip(), [1, 2, None, 0]
|
k, v = m.group(1).strip(), [0, 0, None, 0]
|
||||||
|
assert k and v, (inst, args)
|
||||||
v[2] = k # new name
|
v[2] = k # new name
|
||||||
if labels.has_key(k):
|
if labels.has_key(k):
|
||||||
assert labels[k][:2] == v[:2]
|
assert labels[k][:2] == v[:2]
|
||||||
@@ -101,33 +105,38 @@ def main(argv):
|
|||||||
dpos = []
|
dpos = []
|
||||||
while i < len(m):
|
while i < len(m):
|
||||||
if pos < 0 or pos >= len(olines):
|
if pos < 0 or pos >= len(olines):
|
||||||
return False
|
return []
|
||||||
dpos.append(pos)
|
dpos.append(pos)
|
||||||
o = olines[pos][1:3]
|
o = olines[pos][1:3]
|
||||||
assert len(m[i]) == 2, (i, m)
|
assert len(m[i]) == 2, (i, m)
|
||||||
if o[0].lower() != m[i][0].lower():
|
if o[0].lower() != m[i][0].lower():
|
||||||
return False
|
return []
|
||||||
if o[1].lower() != m[i][1].lower():
|
if o[1].lower() != m[i][1].lower():
|
||||||
return []
|
return []
|
||||||
pos += 1
|
pos += 1
|
||||||
i += 1
|
i += 1
|
||||||
return dpos
|
return dpos
|
||||||
def orewrite(i, k, v, dpos):
|
def orewrite_inst(i, inst, args, dpos):
|
||||||
|
for pos in dpos:
|
||||||
|
olines[pos][1] = "*DEL*"
|
||||||
|
olines[i][1] = inst
|
||||||
|
olines[i][2] = args
|
||||||
|
olines[i][3] = None
|
||||||
|
def orewrite_call(i, k, v, dpos):
|
||||||
for pos in dpos:
|
for pos in dpos:
|
||||||
olines[pos][1] = "*DEL*"
|
olines[pos][1] = "*DEL*"
|
||||||
v[2] = k
|
v[2] = k
|
||||||
olines[i][2] = None
|
olines[i][2] = None
|
||||||
olines[i][3] = add_label(k, v)
|
olines[i][3] = add_label(k, v)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# pass 1
|
# pass 1
|
||||||
func = None
|
func = None
|
||||||
for i in range(len(lines)):
|
for i in range(len(lines)):
|
||||||
l = lines[i]
|
l = lines[i]
|
||||||
m = re.search(r"^0000000000000000\s*<(\w+)>:", l)
|
m = re.search(r"^0{8,16}\s*<(\.text\.)?(\w+)>:", l)
|
||||||
if m:
|
if m:
|
||||||
func = re.sub(r"^_+|_+$", "", m.group(1))
|
func = re.sub(r"^_+|_+$", "", m.group(2))
|
||||||
if not func in ["LzmaDecode"]:
|
if not func in ["LzmaDecode"]:
|
||||||
continue
|
continue
|
||||||
m = re.search(r"^(\s*[0-9a-z]+):\s+(\w+)(.*)", l)
|
m = re.search(r"^(\s*[0-9a-z]+):\s+(\w+)(.*)", l)
|
||||||
@@ -139,12 +148,12 @@ def main(argv):
|
|||||||
if m.group(3): args = m.group(3).strip()
|
if m.group(3): args = m.group(3).strip()
|
||||||
#
|
#
|
||||||
if inst in ["movl",] and re.search(r"\b[de]s\b", args):
|
if inst in ["movl",] and re.search(r"\b[de]s\b", args):
|
||||||
# correct objdump bug
|
# fix bug in objdump
|
||||||
inst = "movw"
|
inst = "movw"
|
||||||
m = re.search(r"^(.+?)\b0x0\s+(\w+):\s+[12]\s+(__\w+)$", args)
|
m = re.search(r"^(.+?)\b0x0\s+(\w+):\s+(1|2|R_386_16|R_386_PC16)\s+(__\w+)$", args)
|
||||||
if m:
|
if m:
|
||||||
# 1 or 2 byte reloc
|
# 1 or 2 byte reloc
|
||||||
args = m.group(1) + m.group(3)
|
args = m.group(1) + m.group(4)
|
||||||
olines.append([label, inst, args, None])
|
olines.append([label, inst, args, None])
|
||||||
#
|
#
|
||||||
# pass 2
|
# pass 2
|
||||||
@@ -157,81 +166,63 @@ def main(argv):
|
|||||||
if opts.call_rewrite and inst in ["call"]:
|
if opts.call_rewrite and inst in ["call"]:
|
||||||
k, v = parse_label(inst, args)
|
k, v = parse_label(inst, args)
|
||||||
if v[:2] == [1, 2]: # external 2-byte
|
if v[:2] == [1, 2]: # external 2-byte
|
||||||
if k == "__PIA":
|
if k == "__LMUL":
|
||||||
inst1 = [
|
s = [
|
||||||
["mov", "bx,WORD PTR [bp-94]"],
|
|
||||||
["or", "bx,ax"],
|
|
||||||
["mov", "WORD PTR [bp-8],bx"],
|
|
||||||
["mov", "WORD PTR [bp-4],dx"],
|
|
||||||
["mov", "ax,WORD PTR [bp-12]"],
|
|
||||||
["movw", "dx,ds"],
|
|
||||||
["mov", "bx,0x1"],
|
|
||||||
["xor", "cx,cx"],
|
["xor", "cx,cx"],
|
||||||
]
|
]
|
||||||
inst2 = [
|
dpos = omatch(i - 1, s[-1:])
|
||||||
["mov", "WORD PTR [bp-12],ax"],
|
|
||||||
["movw", "ds,dx"],
|
|
||||||
]
|
|
||||||
dpos1 = omatch(i - 8, inst1[-8:])
|
|
||||||
dpos2 = omatch(i + 1, inst2)
|
|
||||||
if dpos1 and dpos2:
|
|
||||||
orewrite(i, "__PIA_V04", v, dpos1 + dpos2)
|
|
||||||
continue
|
|
||||||
dpos1 = omatch(i - 4, inst1[-4:])
|
|
||||||
dpos2 = omatch(i + 1, inst2)
|
|
||||||
if dpos1 and dpos2:
|
|
||||||
orewrite(i, "__PIA_V03", v, dpos1 + dpos2)
|
|
||||||
continue
|
|
||||||
dpos = omatch(i - 3, inst1[-3:])
|
|
||||||
if dpos:
|
if dpos:
|
||||||
orewrite(i, "__PIA_V02", v, dpos)
|
orewrite_inst(i, "M_LMUL_dxax_00bx", "", dpos)
|
||||||
continue
|
continue
|
||||||
dpos = omatch(i - 2, inst1[-2:])
|
if k == "__aNahdiff":
|
||||||
if dpos:
|
s = [
|
||||||
orewrite(i, "__PIA_V01", v, dpos)
|
["push", "word ptr [bp+8]"],
|
||||||
continue
|
["push", "word ptr [bp+6]"],
|
||||||
if k == "__PTC":
|
["push", "word ptr [bp-66]"],
|
||||||
inst1 = [
|
["push", "word ptr [bp-68]"],
|
||||||
["mov", "ax,WORD PTR [bp-12]"],
|
|
||||||
["movw", "dx,ds"],
|
|
||||||
["mov", "bx,WORD PTR [bp-26]"],
|
|
||||||
["mov", "cx,WORD PTR [bp-24]"],
|
|
||||||
]
|
]
|
||||||
dpos = omatch(i - 4, inst1[-4:])
|
dpos = omatch(i - 4, s[-4:])
|
||||||
if dpos:
|
if dpos:
|
||||||
orewrite(i, "__PTC_V01", v, dpos)
|
orewrite_inst(i, "*DEL*", "", dpos)
|
||||||
continue
|
continue
|
||||||
if k == "__U4M":
|
if opts.loop_rewrite and inst in ["loop"]:
|
||||||
inst1 = [
|
s = [
|
||||||
["mov", "bx,WORD PTR es:[bx]"],
|
["mov", "cx,0xb"],
|
||||||
["mov", "ax,WORD PTR [bp-102]"],
|
["shr", "dx,1"],
|
||||||
["mov", "dx,WORD PTR [bp-100]"],
|
["rcr", "ax,1"],
|
||||||
["xor", "cx,cx"],
|
|
||||||
]
|
]
|
||||||
inst2 = [
|
dpos = omatch(i - 3, s[-3:])
|
||||||
["mov", "WORD PTR [bp-10],ax"],
|
|
||||||
["mov", "WORD PTR [bp-6],dx"],
|
|
||||||
]
|
|
||||||
dpos1 = omatch(i - 4, inst1[-4:])
|
|
||||||
dpos2 = omatch(i + 1, inst2)
|
|
||||||
if dpos1 and dpos2:
|
|
||||||
orewrite(i, "__U4M_V02", v, dpos1 + dpos2)
|
|
||||||
continue
|
|
||||||
dpos = omatch(i - 1, inst1[-1:])
|
|
||||||
if dpos:
|
if dpos:
|
||||||
orewrite(i, "__U4M_V01", v, dpos)
|
orewrite_inst(i, "M_shrd_11", "", dpos)
|
||||||
|
continue
|
||||||
|
s = [
|
||||||
|
["mov", "cl,0x8"],
|
||||||
|
["shl", "ax,1"],
|
||||||
|
["rcl", "dx,1"],
|
||||||
|
]
|
||||||
|
dpos = omatch(i - 3, s[-3:])
|
||||||
|
if dpos:
|
||||||
|
orewrite_inst(i, "M_shld_8", "", dpos)
|
||||||
|
continue
|
||||||
|
s = [
|
||||||
|
["mov", "cx,0x8"],
|
||||||
|
["shl", "ax,1"],
|
||||||
|
["rcl", "dx,1"],
|
||||||
|
]
|
||||||
|
dpos = omatch(i - 3, s[-3:])
|
||||||
|
if dpos:
|
||||||
|
orewrite_inst(i, "M_shld_8", "", dpos)
|
||||||
continue
|
continue
|
||||||
#
|
#
|
||||||
if inst in [
|
if inst in [
|
||||||
"call", "ja", "jae", "jb", "jbe", "jcxz",
|
"call", "ja", "jae", "jb", "jbe", "jcxz", "je",
|
||||||
"je", "jge", "jl", "jmp", "jne", "loop",
|
"jg", "jge", "jl", "jle", "jmp", "jne", "loop",
|
||||||
]:
|
]:
|
||||||
k, v = parse_label(inst, args)
|
k, v = parse_label(inst, args)
|
||||||
olines[i][2] = None
|
olines[i][2] = None
|
||||||
olines[i][3] = add_label(k, v)
|
olines[i][3] = add_label(k, v)
|
||||||
|
|
||||||
#
|
#
|
||||||
# rewrite local labels
|
# pass 3
|
||||||
digits, i = 1, len(labels)
|
digits, i = 1, len(labels)
|
||||||
while i >= 10:
|
while i >= 10:
|
||||||
digits += 1
|
digits += 1
|
||||||
@@ -258,7 +249,7 @@ def main(argv):
|
|||||||
olines[i][2] = "/* inlined */"
|
olines[i][2] = "/* inlined */"
|
||||||
olines[i][2] = ""
|
olines[i][2] = ""
|
||||||
olines[i][3] = None
|
olines[i][3] = None
|
||||||
|
#
|
||||||
# write ofile
|
# write ofile
|
||||||
ofp = open(ofile, "wb")
|
ofp = open(ofile, "wb")
|
||||||
for label, inst, args, args_label in olines:
|
for label, inst, args, args_label in olines:
|
||||||
|
|||||||
@@ -0,0 +1,127 @@
|
|||||||
|
/* l_test.c --
|
||||||
|
|
||||||
|
This file is part of the UPX executable compressor.
|
||||||
|
|
||||||
|
Copyright (C) 2007-2007 Markus Franz Xaver Johannes Oberhumer
|
||||||
|
All Rights Reserved.
|
||||||
|
|
||||||
|
UPX and the UCL library are free software; you can redistribute them
|
||||||
|
and/or modify them under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of
|
||||||
|
the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; see the file COPYING.
|
||||||
|
If not, write to the Free Software Foundation, Inc.,
|
||||||
|
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
Markus F.X.J. Oberhumer
|
||||||
|
<mfx@users.sourceforge.net>
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "stub/src/c/lzma_d_c.c"
|
||||||
|
|
||||||
|
#if (ACC_ARCH_I086)
|
||||||
|
#define bytep unsigned char __huge *
|
||||||
|
typedef unsigned long uint32_t;
|
||||||
|
#else
|
||||||
|
#define bytep unsigned char *
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if (ACC_OS_DOS16)
|
||||||
|
# if (ACC_CC_BORLANDC || ACC_CC_TURBOC)
|
||||||
|
int __cdecl printf(const char *, ...);
|
||||||
|
void * __cdecl malloc(unsigned);
|
||||||
|
void __far * __cdecl farmalloc(unsigned long);
|
||||||
|
# define acc_halloc(x) ((void __huge *) farmalloc(x))
|
||||||
|
# elif (ACC_CC_DMC || ACC_CC_MSC)
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <malloc.h>
|
||||||
|
# define acc_halloc(x) _halloc(x,1)
|
||||||
|
# elif (ACC_CC_WATCOMC)
|
||||||
|
int __watcall printf(const char *, ...);
|
||||||
|
void * __watcall malloc(unsigned);
|
||||||
|
void __huge * __watcall halloc(long, unsigned);
|
||||||
|
# define acc_halloc(x) halloc(x,1)
|
||||||
|
# else
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define printf __builtin_printf
|
||||||
|
# define malloc(x) __builtin_malloc(x)
|
||||||
|
# define acc_halloc(x) malloc(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
//
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
>>> import pylzma; d="\1" + "\0"*131070 + "\2"; print len(d)
|
||||||
|
>>> c=pylzma.compress(d, eos=0)[5:]; print len(c), map(ord, c)
|
||||||
|
*/
|
||||||
|
static const unsigned char c_data[92] = {
|
||||||
|
0, 0, 128, 65, 72, 1, 140, 46, 188, 80, 161, 51, 135, 75, 212, 2, 20, 181, 241, 145, 230, 34, 107, 72, 201, 86, 118, 176, 70, 120, 214, 184, 247, 212, 250, 132, 59, 160, 44, 112, 185, 177, 245, 126, 103, 190, 14, 145, 73, 36, 148, 246, 166, 58, 41, 192, 68, 167, 144, 98, 122, 42, 61, 195, 135, 248, 98, 136, 254, 191, 96, 21, 192, 75, 86, 63, 228, 231, 15, 70, 52, 239, 169, 194, 249, 109, 126, 11, 123, 48, 0, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
int r;
|
||||||
|
uint32_t src_len = sizeof(c_data);
|
||||||
|
uint32_t dst_len = 131072ul;
|
||||||
|
uint32_t src_out = 0;
|
||||||
|
uint32_t dst_out = 0;
|
||||||
|
const bytep src;
|
||||||
|
bytep dst;
|
||||||
|
CLzmaDecoderState *s;
|
||||||
|
|
||||||
|
printf("Decompress %lu %lu\n", (long)src_len, (long)dst_len);
|
||||||
|
s = (CLzmaDecoderState *) malloc(32768u);
|
||||||
|
src = c_data;
|
||||||
|
dst = (bytep) acc_halloc(dst_len);
|
||||||
|
if (!s || !dst) {
|
||||||
|
printf("ERROR: Out of memory!\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
for (i = 0; i != dst_len; ++i)
|
||||||
|
dst[i] = 255;
|
||||||
|
|
||||||
|
s->Properties.lc = 3; s->Properties.lp = 0; s->Properties.pb = 2;
|
||||||
|
r = LzmaDecode(s, src, src_len, &src_out, dst, dst_len, &dst_out);
|
||||||
|
|
||||||
|
if (r != 0 || src_out != src_len || dst_out != dst_len)
|
||||||
|
{
|
||||||
|
printf("ERROR: Decompression error %d %lu %lu\n", r, (long)src_out, (long)dst_out);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
if (dst[i] != 1)
|
||||||
|
goto data_error;
|
||||||
|
while (++i != dst_len - 1)
|
||||||
|
if (dst[i] != 0)
|
||||||
|
goto data_error;
|
||||||
|
if (dst[i] != 2)
|
||||||
|
goto data_error;
|
||||||
|
|
||||||
|
printf("Decompression test passed. All done.\n");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
data_error:
|
||||||
|
printf("ERROR: Decompression data error at offset %lu.\n", (long)i);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* vim:set ts=4 et: */
|
||||||
+155
-115
@@ -30,153 +30,196 @@
|
|||||||
; ------------- DECOMPRESSION -------------
|
; ------------- DECOMPRESSION -------------
|
||||||
|
|
||||||
; Input:
|
; Input:
|
||||||
; si - source
|
; ds:si - source
|
||||||
; di - dest
|
; es:di - dest
|
||||||
; cld
|
; cld
|
||||||
|
|
||||||
; Output:
|
; Output:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
// support macros
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
// huge pointer diff: dx:ax = dx:ax - cx:bx
|
||||||
|
// !!! this version does nothing !!!
|
||||||
|
.macro M_aNahdiff
|
||||||
|
add sp, 8
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
// umul32: dx:ax = dx:ax * 00:bx
|
||||||
|
.macro M_LMUL_dxax_00bx
|
||||||
|
// mult high-word
|
||||||
|
mov cx, ax // cx: save ax
|
||||||
|
mov ax, dx
|
||||||
|
mul bx
|
||||||
|
xchg ax, cx // save high-word result, get orig ax
|
||||||
|
// mult low-word
|
||||||
|
mul bx // dx:ax := ax * bx
|
||||||
|
// add high-word
|
||||||
|
add dx, cx // add high-word result
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
// umul32: dx:ax = ax:cx * 00:bx
|
||||||
|
.macro M_LMUL_axcx_00bx
|
||||||
|
// mult high-word
|
||||||
|
mul bx
|
||||||
|
xchg ax, cx // save high-word result, get low
|
||||||
|
// mult low-word
|
||||||
|
mul bx
|
||||||
|
// add high-word
|
||||||
|
add dx, cx // add high-word result
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
// shld: dx:ax <<= 8
|
||||||
|
.macro M_shld_8
|
||||||
|
mov dh, dl
|
||||||
|
mov dl, ah
|
||||||
|
mov ah, al
|
||||||
|
xor al, al
|
||||||
|
//xor cx, cx // FIXME - do we need this ?
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
// shld: dx:ax >>= 11
|
||||||
|
.macro M_shrd_11
|
||||||
|
#if 1
|
||||||
|
mov al, ah
|
||||||
|
mov ah, dl
|
||||||
|
mov dl, dh
|
||||||
|
xor dh, dh
|
||||||
|
shr dx
|
||||||
|
rcr ax
|
||||||
|
shr dx
|
||||||
|
rcr ax
|
||||||
|
shr dx
|
||||||
|
rcr ax
|
||||||
|
#else
|
||||||
|
mov bx, dx
|
||||||
|
mov cl, 11
|
||||||
|
shr dx, cl
|
||||||
|
shr ax, cl
|
||||||
|
mov cl, 5
|
||||||
|
shl bx, cl
|
||||||
|
or ax, bx
|
||||||
|
#endif
|
||||||
|
//xor cx, cx // FIXME - do we need this ?
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// shld: dx:ax <<= cl; trashes register "r1" (bx, di, si or bp)
|
||||||
|
// REQUIRED: 0 <= cl < 32
|
||||||
|
// FIXME - this does not work yet
|
||||||
|
.macro M_shld r1
|
||||||
|
local L1
|
||||||
|
mov r1, ax // save ax
|
||||||
|
shl dx, cl
|
||||||
|
shl ax, cl
|
||||||
|
neg cl
|
||||||
|
and cl, 15 // the 8086 uses all eight bits of the shift count
|
||||||
|
shr r1, cl
|
||||||
|
or dx, r1
|
||||||
|
.endm
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
// support code (see cleanasm.py)
|
// support code (see cleanasm.py)
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
section LZMA_DEC99
|
section LZMA_DEC99
|
||||||
|
|
||||||
__PIA_V04:
|
|
||||||
mov bx,WORD PTR [bp-94]
|
|
||||||
or bx,ax
|
|
||||||
mov WORD PTR [bp-8],bx
|
|
||||||
mov WORD PTR [bp-4],dx
|
|
||||||
__PIA_V03:
|
|
||||||
mov ax,WORD PTR [bp-12]
|
|
||||||
// FIXME: need optimized version here
|
|
||||||
movw dx,ds
|
|
||||||
mov bx,0x1
|
|
||||||
xor cx,cx
|
|
||||||
M_WCC_PIA
|
|
||||||
mov WORD PTR [bp-12],ax
|
|
||||||
movw ds,dx
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
.macro lzma_WCC_PIA_V02
|
|
||||||
// FIXME: need optimized version here
|
|
||||||
movw dx,ds
|
|
||||||
mov bx,0x1
|
|
||||||
xor cx,cx
|
|
||||||
M_WCC_PIA
|
|
||||||
.endm
|
|
||||||
#define WCC_PIA_V02 lzma_WCC_PIA_V02
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
__PIA:
|
|
||||||
M_WCC_PIA
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
__PTC_V01:
|
|
||||||
mov ax,WORD PTR [bp-12]
|
|
||||||
movw dx,ds
|
|
||||||
mov bx,WORD PTR [bp-26]
|
|
||||||
mov cx,WORD PTR [bp-24]
|
|
||||||
__PTC:
|
|
||||||
M_WCC_PTC
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
// FIXME: do we actually need the PTS result ??
|
|
||||||
#define WCC_PTS M_WCC_PTS
|
|
||||||
#else
|
|
||||||
#define WCC_PTS xor ax,ax; xor dx,dx
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
__U4M_V02:
|
|
||||||
mov bx,WORD PTR es:[bx]
|
|
||||||
mov ax,WORD PTR [bp-102]
|
|
||||||
mov dx,WORD PTR [bp-100]
|
|
||||||
// FIXME: need optimized version here (cx = 0)
|
|
||||||
xor cx,cx
|
|
||||||
M_WCC_U4M
|
|
||||||
mov WORD PTR [bp-10],ax
|
|
||||||
mov WORD PTR [bp-6],dx
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
__U4M_V01:
|
|
||||||
// FIXME: need optimized version here (cx = 0)
|
|
||||||
xor cx,cx
|
|
||||||
M_WCC_U4M
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
//
|
//
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
// init
|
// init
|
||||||
section LZMA_DEC00
|
section LZMA_DEC00
|
||||||
// .byte 0xcc
|
//.byte 0xcc
|
||||||
mov bp, sp
|
|
||||||
lea bx, [bp + lzma_stack_adjust]
|
|
||||||
xor ax, ax
|
|
||||||
.clearstack:
|
|
||||||
push ax
|
|
||||||
cmp sp, bx
|
|
||||||
jnz .clearstack
|
|
||||||
|
|
||||||
inc si
|
|
||||||
inc si
|
|
||||||
|
|
||||||
push ss // outSizeProcessed
|
|
||||||
push bx
|
|
||||||
mov ax, offset lzma_u_len_hi
|
|
||||||
push ax
|
|
||||||
mov ax, offset lzma_u_len
|
|
||||||
push ax // outSize
|
|
||||||
push es
|
|
||||||
push di // out
|
|
||||||
|
|
||||||
add bx, 4
|
|
||||||
push ss // inSizeProcessed
|
|
||||||
push bx
|
|
||||||
mov ax, offset lzma_c_len_hi
|
|
||||||
push ax
|
|
||||||
mov ax, offset lzma_c_len
|
|
||||||
push ax // inSize
|
|
||||||
push ds
|
push ds
|
||||||
push si // in
|
mov bp, sp
|
||||||
|
#if 1
|
||||||
|
// DEBUG - check for enough stack
|
||||||
|
lea bx, [bp + lzma_stack_adjust - 256]
|
||||||
|
cmp bp, bx
|
||||||
|
1: jcs 1b
|
||||||
|
#endif
|
||||||
|
lea bx, [bp + lzma_stack_adjust]
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// clear stack
|
||||||
|
xor ax, ax
|
||||||
|
1: push ax
|
||||||
|
cmp sp, bx
|
||||||
|
jnz 1b
|
||||||
|
#else
|
||||||
|
mov sp, bx
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inc si
|
||||||
|
inc si
|
||||||
|
|
||||||
|
push bx // &outSizeProcessed __near [bp + 24]
|
||||||
|
mov ax, offset lzma_u_len_hi // outSize
|
||||||
|
push ax // [bp + 22]
|
||||||
|
mov ax, offset lzma_u_len
|
||||||
|
push ax // [bp + 20]
|
||||||
|
push es // out [bp + 18]
|
||||||
|
push di // [bp + 16]
|
||||||
|
|
||||||
add bx, 4
|
add bx, 4
|
||||||
push ss
|
push bx // &inSizeProcessed __near [bp + 14]
|
||||||
push bx
|
mov ax, offset lzma_c_len_hi // inSize
|
||||||
mov ax, offset lzma_properties_hi
|
push ax // [bp + 12]
|
||||||
mov ss:[bx + 2], ax
|
mov ax, offset lzma_c_len
|
||||||
mov ax, offset lzma_properties
|
push ax // [bp + 10]
|
||||||
mov ss:[bx], ax
|
push ds // in [bp + 8]
|
||||||
call LZMA_DEC10
|
push si // [bp + 6]
|
||||||
// .byte 0xcc
|
|
||||||
|
|
||||||
mov sp, bp
|
// enter small model
|
||||||
|
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
|
jmp LZMA_DEC30
|
||||||
|
|
||||||
|
|
||||||
section LZMA_DEC10
|
section LZMA_DEC10
|
||||||
.arch i8086, nojumps
|
.arch i8086, nojumps
|
||||||
#include "lzma_d_cs.S"
|
#include "lzma_d_cs.S"
|
||||||
section LZMA_DEC20
|
section LZMA_DEC20
|
||||||
.arch i8086, nojumps
|
.arch i8086, nojumps
|
||||||
#include "lzma_d_cf.S"
|
#include "lzma_d_cf.S"
|
||||||
|
|
||||||
.arch i8086, jumps
|
.arch i8086, jumps
|
||||||
|
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
section LZMA_DEC30
|
section LZMA_DEC30
|
||||||
|
#if 0
|
||||||
|
// clear dirty stack
|
||||||
|
lea bx, [bp + lzma_stack_adjust - 256]
|
||||||
|
mov sp, bp
|
||||||
|
xor ax, ax
|
||||||
|
1: push ax
|
||||||
|
cmp sp, bx
|
||||||
|
jnz 1b
|
||||||
|
#endif
|
||||||
|
mov sp, bp
|
||||||
|
pop ds
|
||||||
mov di, offset lzma_u_len
|
mov di, offset lzma_u_len
|
||||||
|
|
||||||
section LZMA_DEC31
|
section LZMA_DEC31
|
||||||
@@ -186,8 +229,5 @@ section LZMA_DEC31
|
|||||||
mov es, ax
|
mov es, ax
|
||||||
|
|
||||||
|
|
||||||
#undef WCC_PIA_V02
|
|
||||||
#undef WCC_PTS
|
|
||||||
|
|
||||||
// vi:ts=8:et
|
|
||||||
|
|
||||||
|
// vi:ts=4:et
|
||||||
|
|||||||
+1639
-1428
File diff suppressed because it is too large
Load Diff
+1688
-1688
File diff suppressed because it is too large
Load Diff
+1639
-1428
File diff suppressed because it is too large
Load Diff
+1688
-1688
File diff suppressed because it is too large
Load Diff
@@ -120,6 +120,7 @@
|
|||||||
.byte 0x7f, \target - . - 1
|
.byte 0x7f, \target - . - 1
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
#define jaes jncs
|
||||||
#define jbes jnas
|
#define jbes jnas
|
||||||
#define jbs jcs
|
#define jbs jcs
|
||||||
#define jes jzs
|
#define jes jzs
|
||||||
@@ -129,7 +130,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
; =============
|
; =============
|
||||||
; ============= WATCOM C/C++ HUGE POINTER SUPPORT
|
; ============= HUGE POINTER SUPPORT
|
||||||
; =============
|
; =============
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -138,6 +139,7 @@
|
|||||||
#define __AHINCR (1 << __AHSHIFT) /* 4096 */
|
#define __AHINCR (1 << __AHSHIFT) /* 4096 */
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
// huge pointer add: dx:ax = dx:ax + cx:bx
|
// huge pointer add: dx:ax = dx:ax + cx:bx
|
||||||
.macro M_WCC_PIA
|
.macro M_WCC_PIA
|
||||||
add ax, bx
|
add ax, bx
|
||||||
@@ -147,8 +149,10 @@
|
|||||||
shl bx, cl
|
shl bx, cl
|
||||||
add dx, bx
|
add dx, bx
|
||||||
.endm
|
.endm
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
// huge pointer sub: dx:ax = dx:ax - cx:bx
|
// huge pointer sub: dx:ax = dx:ax - cx:bx
|
||||||
.macro M_WCC_PIS
|
.macro M_WCC_PIS
|
||||||
sub ax, bx
|
sub ax, bx
|
||||||
@@ -158,8 +162,10 @@
|
|||||||
shl bx, cl
|
shl bx, cl
|
||||||
sub dx, bx
|
sub dx, bx
|
||||||
.endm
|
.endm
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
// huge pointer diff: dx:ax = dx:ax - cx:bx
|
// huge pointer diff: dx:ax = dx:ax - cx:bx
|
||||||
.macro M_WCC_PTS
|
.macro M_WCC_PTS
|
||||||
// normalize
|
// normalize
|
||||||
@@ -168,6 +174,7 @@
|
|||||||
sub ax, bx
|
sub ax, bx
|
||||||
sbb dx, cx
|
sbb dx, cx
|
||||||
.endm
|
.endm
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@@ -180,19 +187,17 @@
|
|||||||
cmp ax, bx
|
cmp ax, bx
|
||||||
L1:
|
L1:
|
||||||
.endm
|
.endm
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
// umul32: dx:ax = dx:ax * cx:bx
|
// umul32: dx:ax = dx:ax * cx:bx
|
||||||
.macro M_WCC_U4M
|
.macro M_WCC_U4M
|
||||||
// FIXME
|
// FIXME
|
||||||
// compute high-word
|
|
||||||
// add low-word
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#else
|
|
||||||
# include "tainted.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
; =============
|
; =============
|
||||||
; ============= 16-BIT CALLTRICK & JUMPTRICK
|
; ============= 16-BIT CALLTRICK & JUMPTRICK
|
||||||
|
|||||||
@@ -105,6 +105,5 @@ decomp_done_n2b:
|
|||||||
|
|
||||||
cjt16 decomp_ret_n2b
|
cjt16 decomp_ret_n2b
|
||||||
|
|
||||||
/*
|
|
||||||
; vi:ts=8:et
|
/* vim:set ts=4 et: */
|
||||||
*/
|
|
||||||
|
|||||||
@@ -152,5 +152,5 @@ f2_n2b:
|
|||||||
ret
|
ret
|
||||||
decomp_done_n2b:
|
decomp_done_n2b:
|
||||||
|
|
||||||
/* vi:ts=8:et */
|
|
||||||
|
|
||||||
|
/* vim:set ts=4 et: */
|
||||||
|
|||||||
@@ -162,5 +162,5 @@ f2_n2d:
|
|||||||
ret
|
ret
|
||||||
decomp_done_n2d:
|
decomp_done_n2d:
|
||||||
|
|
||||||
/* vi:ts=8:et */
|
|
||||||
|
|
||||||
|
/* vim:set ts=4 et: */
|
||||||
|
|||||||
@@ -168,4 +168,5 @@ f2_n2e:
|
|||||||
ret
|
ret
|
||||||
decomp_done_n2e:
|
decomp_done_n2e:
|
||||||
|
|
||||||
/* vi:ts=8:et */
|
|
||||||
|
/* vim:set ts=4 et: */
|
||||||
|
|||||||
@@ -0,0 +1,146 @@
|
|||||||
|
#! /usr/bin/env python
|
||||||
|
## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# wdis2gas.py --
|
||||||
|
#
|
||||||
|
# This file is part of the UPX executable compressor.
|
||||||
|
#
|
||||||
|
# Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# UPX and the UCL library are free software; you can redistribute them
|
||||||
|
# and/or modify them under the terms of the GNU General Public License as
|
||||||
|
# published by the Free Software Foundation; either version 2 of
|
||||||
|
# the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; see the file COPYING.
|
||||||
|
# If not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# Markus F.X.J. Oberhumer Laszlo Molnar
|
||||||
|
# <mfx@users.sourceforge.net> <ml1050@users.sourceforge.net>
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
import getopt, os, re, string, sys
|
||||||
|
|
||||||
|
|
||||||
|
class opts:
|
||||||
|
arch = "i086"
|
||||||
|
label_prefix = ".L"
|
||||||
|
verbose = 0
|
||||||
|
|
||||||
|
|
||||||
|
# /***********************************************************************
|
||||||
|
# // main
|
||||||
|
# ************************************************************************/
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
shortopts, longopts = "qv", [
|
||||||
|
"arch", "label-prefix=", "quiet", "verbose"
|
||||||
|
]
|
||||||
|
xopts, args = getopt.gnu_getopt(argv[1:], shortopts, longopts)
|
||||||
|
for opt, optarg in xopts:
|
||||||
|
if 0: pass
|
||||||
|
elif opt in ["-q", "--quiet"]: opts.verbose = opts.verbose - 1
|
||||||
|
elif opt in ["-v", "--verbose"]: opts.verbose = opts.verbose + 1
|
||||||
|
elif opt in ["--arch"]: opts.arch = optarg
|
||||||
|
elif opt in ["--label-prefix"]: opts.label_prefix = optarg
|
||||||
|
else: assert 0, ("getopt problem:", opt, optarg, xopts, args)
|
||||||
|
|
||||||
|
#
|
||||||
|
assert len(args) == 2
|
||||||
|
ifile = args[0]
|
||||||
|
ofile = args[1]
|
||||||
|
# read ifile
|
||||||
|
lines = open(ifile, "rb").readlines()
|
||||||
|
lines = map(string.rstrip, lines)
|
||||||
|
#
|
||||||
|
section = None
|
||||||
|
func = None
|
||||||
|
olines = []
|
||||||
|
for i in range(len(lines)):
|
||||||
|
l = lines[i]
|
||||||
|
if not l: continue
|
||||||
|
m = re.search(r"^No disassembly errors", l)
|
||||||
|
if m: continue
|
||||||
|
m = re.search(r"^Module:", l)
|
||||||
|
if m: continue
|
||||||
|
m = re.search(r"^GROUP:", l)
|
||||||
|
if m: continue
|
||||||
|
m = re.search(r"^(BSS|Routine) Size:", l)
|
||||||
|
if m: continue
|
||||||
|
m = re.search(r"Segment:\s+(.+)\s+([0-9a-fA-F]+)\s+bytes$", l)
|
||||||
|
if m:
|
||||||
|
s = re.split(r"\s+", m.group(1))
|
||||||
|
assert len(s) == 3, (i, l, s, m.groups())
|
||||||
|
section = s
|
||||||
|
func = None
|
||||||
|
continue
|
||||||
|
m = re.search(r"Comdat:\s+(.+)\s+SEGMENT NONE '(\w+)'\s+([0-9a-fA-F]+)\s+bytes$", l)
|
||||||
|
if m:
|
||||||
|
section = [m.group(2)]
|
||||||
|
assert section[0].endswith("_TEXT"), (i, l, section)
|
||||||
|
func = re.sub(r"^[_@]+|[_@]+$", "", m.group(1))
|
||||||
|
olines.append(".section .text." + func)
|
||||||
|
continue
|
||||||
|
assert section, (i, l)
|
||||||
|
m = re.search(r"^0000\s+(\w+):$", l)
|
||||||
|
if m:
|
||||||
|
assert section[0].endswith("_TEXT"), (i, l, section)
|
||||||
|
func = re.sub(r"^[_@]+|[_@]+$", "", m.group(1))
|
||||||
|
olines.append(".section .text." + func)
|
||||||
|
continue
|
||||||
|
assert func, (i, l, section)
|
||||||
|
m = re.search(r"^[0-9a-fA-F]{4}\s+L\$(\d+):$", l)
|
||||||
|
if m:
|
||||||
|
olines.append(opts.label_prefix + m.group(1) + ":")
|
||||||
|
continue
|
||||||
|
m = re.search(r"^[0-9a-fA-F]{4} (([0-9a-fA-F]{2} )+)\s+(.+)$", l)
|
||||||
|
assert m, (i, l)
|
||||||
|
if m.group(3).startswith("call"):
|
||||||
|
s = re.split(r"\s+", m.group(3))
|
||||||
|
assert len(s) == 2, (i, l, s, m.groups())
|
||||||
|
f = re.sub(r"^[@]+|[@]+$", "", s[1])
|
||||||
|
olines.append(" call " + f)
|
||||||
|
elif 1:
|
||||||
|
s = m.group(3).strip()
|
||||||
|
s = re.sub("L\$(\d+)", opts.label_prefix + "\g<1>", s)
|
||||||
|
olines.append(" " + s)
|
||||||
|
else:
|
||||||
|
s = re.split(r"\s+", m.group(1).strip())
|
||||||
|
assert 1 <= len(s) <= 5, (i, l, s, m.groups())
|
||||||
|
s = ["0x" + x for x in s]
|
||||||
|
olines.append(" .byte " + ",".join(s))
|
||||||
|
|
||||||
|
|
||||||
|
# write ofile
|
||||||
|
ofp = open(ofile, "wb")
|
||||||
|
ofp.write(".code16\n")
|
||||||
|
ofp.write(".intel_syntax noprefix\n")
|
||||||
|
if opts.arch in ["i086", "8086", "i8086"]:
|
||||||
|
ofp.write(".arch i8086, jumps\n")
|
||||||
|
elif opts.arch in ["i286"]:
|
||||||
|
ofp.write(".arch i286, jumps\n")
|
||||||
|
else:
|
||||||
|
assert 0, ("invalid arch", opts.arch)
|
||||||
|
if 0:
|
||||||
|
for sym in ["__AHSHIFT", "__AHINCR", "__LMUL", "__aNahdiff"]:
|
||||||
|
ofp.write(".extern %s\n" % (sym))
|
||||||
|
ofp.write(".type %s,@function\n" % (sym))
|
||||||
|
ofp.write(".size %s,2\n" % (sym))
|
||||||
|
for l in olines:
|
||||||
|
ofp.write(l.rstrip() + "\n")
|
||||||
|
ofp.close()
|
||||||
|
##print olines
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main(sys.argv))
|
||||||
|
|
||||||
@@ -83,11 +83,6 @@ ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(CLzmaDecoderState) == 32768u)
|
|||||||
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(SizeT) >= 4)
|
ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(SizeT) >= 4)
|
||||||
|
|
||||||
#if (ACC_ARCH_I086)
|
#if (ACC_ARCH_I086)
|
||||||
# if (ACC_MM_HUGE)
|
|
||||||
typedef unsigned short __far MyCProb;
|
|
||||||
# undef CProb
|
|
||||||
# define CProb MyCProb
|
|
||||||
# endif
|
|
||||||
# define char char __huge
|
# define char char __huge
|
||||||
#elif (ACC_CC_WATCOMC)
|
#elif (ACC_CC_WATCOMC)
|
||||||
#else
|
#else
|
||||||
@@ -98,6 +93,8 @@ ACC_COMPILE_TIME_ASSERT_HEADER(sizeof(SizeT) >= 4)
|
|||||||
#else
|
#else
|
||||||
#include "C/7zip/Compress/LZMA_C/LzmaDecode.c"
|
#include "C/7zip/Compress/LZMA_C/LzmaDecode.c"
|
||||||
#endif
|
#endif
|
||||||
|
#undef char
|
||||||
|
#undef CLzmaDecoderState
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -44,27 +44,27 @@ Idx Name Size VMA LMA File off Algn Flags
|
|||||||
39 NRV2EEX3 00000015 00000000 00000000 0000027b 2**0 CONTENTS, RELOC, READONLY
|
39 NRV2EEX3 00000015 00000000 00000000 0000027b 2**0 CONTENTS, RELOC, READONLY
|
||||||
40 N2E64K02 0000000b 00000000 00000000 00000290 2**0 CONTENTS, READONLY
|
40 N2E64K02 0000000b 00000000 00000000 00000290 2**0 CONTENTS, READONLY
|
||||||
41 NRV2EEX9 00000004 00000000 00000000 0000029b 2**0 CONTENTS, READONLY
|
41 NRV2EEX9 00000004 00000000 00000000 0000029b 2**0 CONTENTS, READONLY
|
||||||
42 LZMA_DEC99 000000ae 00000000 00000000 0000029f 2**0 CONTENTS, READONLY
|
42 LZMA_DEC99 00000000 00000000 00000000 0000029f 2**0 CONTENTS, READONLY
|
||||||
43 LZMA_DEC00 00000044 00000000 00000000 0000034d 2**0 CONTENTS, RELOC, READONLY
|
43 LZMA_DEC00 00000043 00000000 00000000 0000029f 2**0 CONTENTS, RELOC, READONLY
|
||||||
44 LZMA_DEC10 00000ea2 00000000 00000000 00000391 2**0 CONTENTS, RELOC, READONLY
|
44 LZMA_DEC10 00001203 00000000 00000000 000002e2 2**0 CONTENTS, READONLY
|
||||||
45 LZMA_DEC20 00000ea2 00000000 00000000 00001233 2**0 CONTENTS, RELOC, READONLY
|
45 LZMA_DEC20 00001203 00000000 00000000 000014e5 2**0 CONTENTS, READONLY
|
||||||
46 LZMA_DEC30 00000003 00000000 00000000 000020d5 2**0 CONTENTS, RELOC, READONLY
|
46 LZMA_DEC30 00000006 00000000 00000000 000026e8 2**0 CONTENTS, RELOC, READONLY
|
||||||
47 LZMA_DEC31 00000007 00000000 00000000 000020d8 2**0 CONTENTS, RELOC, READONLY
|
47 LZMA_DEC31 00000007 00000000 00000000 000026ee 2**0 CONTENTS, RELOC, READONLY
|
||||||
48 EXEMAIN5 00000001 00000000 00000000 000020df 2**0 CONTENTS, READONLY
|
48 EXEMAIN5 00000001 00000000 00000000 000026f5 2**0 CONTENTS, READONLY
|
||||||
49 EXEADJUS 00000007 00000000 00000000 000020e0 2**0 CONTENTS, READONLY
|
49 EXEADJUS 00000007 00000000 00000000 000026f6 2**0 CONTENTS, READONLY
|
||||||
50 EXENOADJ 00000002 00000000 00000000 000020e7 2**0 CONTENTS, READONLY
|
50 EXENOADJ 00000002 00000000 00000000 000026fd 2**0 CONTENTS, READONLY
|
||||||
51 EXERELO1 0000001e 00000000 00000000 000020e9 2**0 CONTENTS, RELOC, READONLY
|
51 EXERELO1 0000001e 00000000 00000000 000026ff 2**0 CONTENTS, RELOC, READONLY
|
||||||
52 EXEREL9A 00000012 00000000 00000000 00002107 2**0 CONTENTS, RELOC, READONLY
|
52 EXEREL9A 00000012 00000000 00000000 0000271d 2**0 CONTENTS, RELOC, READONLY
|
||||||
53 EXERELO2 00000004 00000000 00000000 00002119 2**0 CONTENTS, READONLY
|
53 EXERELO2 00000004 00000000 00000000 0000272f 2**0 CONTENTS, READONLY
|
||||||
54 EXEREBIG 00000002 00000000 00000000 0000211d 2**0 CONTENTS, RELOC, READONLY
|
54 EXEREBIG 00000002 00000000 00000000 00002733 2**0 CONTENTS, RELOC, READONLY
|
||||||
55 EXERELO3 00000002 00000000 00000000 0000211f 2**0 CONTENTS, RELOC, READONLY
|
55 EXERELO3 00000002 00000000 00000000 00002735 2**0 CONTENTS, RELOC, READONLY
|
||||||
56 EXEMAIN8 00000003 00000000 00000000 00002121 2**0 CONTENTS, READONLY
|
56 EXEMAIN8 00000003 00000000 00000000 00002737 2**0 CONTENTS, READONLY
|
||||||
57 DEVICEEND 00000013 00000000 00000000 00002124 2**0 CONTENTS, READONLY
|
57 DEVICEEND 00000013 00000000 00000000 0000273a 2**0 CONTENTS, READONLY
|
||||||
58 EXESTACK 00000006 00000000 00000000 00002137 2**0 CONTENTS, RELOC, READONLY
|
58 EXESTACK 00000006 00000000 00000000 0000274d 2**0 CONTENTS, RELOC, READONLY
|
||||||
59 EXESTASP 00000003 00000000 00000000 0000213d 2**0 CONTENTS, RELOC, READONLY
|
59 EXESTASP 00000003 00000000 00000000 00002753 2**0 CONTENTS, RELOC, READONLY
|
||||||
60 EXEJUMPF 00000005 00000000 00000000 00002140 2**0 CONTENTS, RELOC, READONLY
|
60 EXEJUMPF 00000005 00000000 00000000 00002756 2**0 CONTENTS, RELOC, READONLY
|
||||||
61 EXERCSPO 00000004 00000000 00000000 00002145 2**0 CONTENTS, RELOC, READONLY
|
61 EXERCSPO 00000004 00000000 00000000 0000275b 2**0 CONTENTS, RELOC, READONLY
|
||||||
62 EXERETIP 00000006 00000000 00000000 00002149 2**0 CONTENTS, RELOC, READONLY
|
62 EXERETIP 00000006 00000000 00000000 0000275f 2**0 CONTENTS, RELOC, READONLY
|
||||||
SYMBOL TABLE:
|
SYMBOL TABLE:
|
||||||
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
|
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
|
||||||
00000000 l d EXEENTRY 00000000 EXEENTRY
|
00000000 l d EXEENTRY 00000000 EXEENTRY
|
||||||
@@ -80,7 +80,6 @@ SYMBOL TABLE:
|
|||||||
00000000 l d NRV2EEX2 00000000 NRV2EEX2
|
00000000 l d NRV2EEX2 00000000 NRV2EEX2
|
||||||
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_DEC99 00000000 LZMA_DEC99
|
|
||||||
00000000 l d LZMA_DEC10 00000000 LZMA_DEC10
|
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
|
||||||
@@ -113,6 +112,7 @@ 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 LZMA_DEC00 00000000 LZMA_DEC00
|
00000000 l d LZMA_DEC00 00000000 LZMA_DEC00
|
||||||
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
|
||||||
@@ -254,127 +254,20 @@ OFFSET TYPE VALUE
|
|||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_DEC00]:
|
RELOCATION RECORDS FOR [LZMA_DEC00]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
00000004 R_386_16 lzma_stack_adjust
|
00000005 R_386_16 lzma_stack_adjust
|
||||||
00000012 R_386_16 lzma_u_len_hi
|
0000000d R_386_16 lzma_stack_adjust
|
||||||
00000016 R_386_16 lzma_u_len
|
00000015 R_386_16 lzma_u_len_hi
|
||||||
00000021 R_386_16 lzma_c_len_hi
|
00000019 R_386_16 lzma_u_len
|
||||||
00000025 R_386_16 lzma_c_len
|
00000023 R_386_16 lzma_c_len_hi
|
||||||
00000030 R_386_16 lzma_properties_hi
|
00000027 R_386_16 lzma_c_len
|
||||||
00000037 R_386_16 lzma_properties
|
00000033 R_386_16 lzma_properties_hi
|
||||||
0000003d R_386_PC16 LZMA_DEC10
|
00000039 R_386_16 lzma_properties
|
||||||
00000042 R_386_PC16 LZMA_DEC30
|
0000003e R_386_PC16 LZMA_DEC10
|
||||||
|
00000041 R_386_PC16 LZMA_DEC30
|
||||||
RELOCATION RECORDS FOR [LZMA_DEC10]:
|
|
||||||
OFFSET TYPE VALUE
|
|
||||||
000000e5 R_386_PC16 LZMA_DEC99
|
|
||||||
0000011b R_386_PC16 LZMA_DEC99
|
|
||||||
00000127 R_386_PC16 LZMA_DEC99
|
|
||||||
00000170 R_386_PC16 LZMA_DEC99
|
|
||||||
00000199 R_386_PC16 LZMA_DEC99
|
|
||||||
000001b0 R_386_PC16 LZMA_DEC99
|
|
||||||
00000213 R_386_PC16 LZMA_DEC99
|
|
||||||
00000247 R_386_PC16 LZMA_DEC99
|
|
||||||
00000283 R_386_PC16 LZMA_DEC99
|
|
||||||
000002af R_386_PC16 LZMA_DEC99
|
|
||||||
000002c6 R_386_PC16 LZMA_DEC99
|
|
||||||
0000034c R_386_PC16 LZMA_DEC99
|
|
||||||
00000378 R_386_PC16 LZMA_DEC99
|
|
||||||
0000038f R_386_PC16 LZMA_DEC99
|
|
||||||
000003ff R_386_PC16 LZMA_DEC99
|
|
||||||
00000467 R_386_PC16 LZMA_DEC99
|
|
||||||
00000493 R_386_PC16 LZMA_DEC99
|
|
||||||
000004aa R_386_PC16 LZMA_DEC99
|
|
||||||
0000054e R_386_PC16 LZMA_DEC99
|
|
||||||
0000057a R_386_PC16 LZMA_DEC99
|
|
||||||
00000591 R_386_PC16 LZMA_DEC99
|
|
||||||
000005ff R_386_PC16 LZMA_DEC99
|
|
||||||
00000657 R_386_PC16 LZMA_DEC99
|
|
||||||
000006b0 R_386_PC16 LZMA_DEC99
|
|
||||||
000006d1 R_386_PC16 LZMA_DEC99
|
|
||||||
0000073a R_386_PC16 LZMA_DEC99
|
|
||||||
0000078e R_386_PC16 LZMA_DEC99
|
|
||||||
000007f8 R_386_PC16 LZMA_DEC99
|
|
||||||
00000824 R_386_PC16 LZMA_DEC99
|
|
||||||
0000083b R_386_PC16 LZMA_DEC99
|
|
||||||
000008ea R_386_PC16 LZMA_DEC99
|
|
||||||
00000916 R_386_PC16 LZMA_DEC99
|
|
||||||
00000930 R_386_PC16 LZMA_DEC99
|
|
||||||
000009ad R_386_PC16 LZMA_DEC99
|
|
||||||
000009d9 R_386_PC16 LZMA_DEC99
|
|
||||||
000009f3 R_386_PC16 LZMA_DEC99
|
|
||||||
00000a93 R_386_PC16 LZMA_DEC99
|
|
||||||
00000abf R_386_PC16 LZMA_DEC99
|
|
||||||
00000ad6 R_386_PC16 LZMA_DEC99
|
|
||||||
00000b8f R_386_PC16 LZMA_DEC99
|
|
||||||
00000bbb R_386_PC16 LZMA_DEC99
|
|
||||||
00000bd2 R_386_PC16 LZMA_DEC99
|
|
||||||
00000c90 R_386_PC16 LZMA_DEC99
|
|
||||||
00000cbc R_386_PC16 LZMA_DEC99
|
|
||||||
00000d27 R_386_PC16 LZMA_DEC99
|
|
||||||
00000d53 R_386_PC16 LZMA_DEC99
|
|
||||||
00000d6a R_386_PC16 LZMA_DEC99
|
|
||||||
00000e17 R_386_PC16 LZMA_DEC99
|
|
||||||
00000e3b R_386_PC16 LZMA_DEC99
|
|
||||||
00000e6b R_386_PC16 LZMA_DEC99
|
|
||||||
00000e73 R_386_PC16 LZMA_DEC99
|
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_DEC20]:
|
|
||||||
OFFSET TYPE VALUE
|
|
||||||
000000e5 R_386_PC16 LZMA_DEC99
|
|
||||||
0000011b R_386_PC16 LZMA_DEC99
|
|
||||||
00000127 R_386_PC16 LZMA_DEC99
|
|
||||||
00000170 R_386_PC16 LZMA_DEC99
|
|
||||||
00000199 R_386_PC16 LZMA_DEC99
|
|
||||||
000001b0 R_386_PC16 LZMA_DEC99
|
|
||||||
00000213 R_386_PC16 LZMA_DEC99
|
|
||||||
00000247 R_386_PC16 LZMA_DEC99
|
|
||||||
00000283 R_386_PC16 LZMA_DEC99
|
|
||||||
000002af R_386_PC16 LZMA_DEC99
|
|
||||||
000002c6 R_386_PC16 LZMA_DEC99
|
|
||||||
0000034c R_386_PC16 LZMA_DEC99
|
|
||||||
00000378 R_386_PC16 LZMA_DEC99
|
|
||||||
0000038f R_386_PC16 LZMA_DEC99
|
|
||||||
000003ff R_386_PC16 LZMA_DEC99
|
|
||||||
00000467 R_386_PC16 LZMA_DEC99
|
|
||||||
00000493 R_386_PC16 LZMA_DEC99
|
|
||||||
000004aa R_386_PC16 LZMA_DEC99
|
|
||||||
0000054e R_386_PC16 LZMA_DEC99
|
|
||||||
0000057a R_386_PC16 LZMA_DEC99
|
|
||||||
00000591 R_386_PC16 LZMA_DEC99
|
|
||||||
000005ff R_386_PC16 LZMA_DEC99
|
|
||||||
00000657 R_386_PC16 LZMA_DEC99
|
|
||||||
000006b0 R_386_PC16 LZMA_DEC99
|
|
||||||
000006d1 R_386_PC16 LZMA_DEC99
|
|
||||||
0000073a R_386_PC16 LZMA_DEC99
|
|
||||||
0000078e R_386_PC16 LZMA_DEC99
|
|
||||||
000007f8 R_386_PC16 LZMA_DEC99
|
|
||||||
00000824 R_386_PC16 LZMA_DEC99
|
|
||||||
0000083b R_386_PC16 LZMA_DEC99
|
|
||||||
000008ea R_386_PC16 LZMA_DEC99
|
|
||||||
00000916 R_386_PC16 LZMA_DEC99
|
|
||||||
00000930 R_386_PC16 LZMA_DEC99
|
|
||||||
000009ad R_386_PC16 LZMA_DEC99
|
|
||||||
000009d9 R_386_PC16 LZMA_DEC99
|
|
||||||
000009f3 R_386_PC16 LZMA_DEC99
|
|
||||||
00000a93 R_386_PC16 LZMA_DEC99
|
|
||||||
00000abf R_386_PC16 LZMA_DEC99
|
|
||||||
00000ad6 R_386_PC16 LZMA_DEC99
|
|
||||||
00000b8f R_386_PC16 LZMA_DEC99
|
|
||||||
00000bbb R_386_PC16 LZMA_DEC99
|
|
||||||
00000bd2 R_386_PC16 LZMA_DEC99
|
|
||||||
00000c90 R_386_PC16 LZMA_DEC99
|
|
||||||
00000cbc R_386_PC16 LZMA_DEC99
|
|
||||||
00000d27 R_386_PC16 LZMA_DEC99
|
|
||||||
00000d53 R_386_PC16 LZMA_DEC99
|
|
||||||
00000d6a R_386_PC16 LZMA_DEC99
|
|
||||||
00000e17 R_386_PC16 LZMA_DEC99
|
|
||||||
00000e3b R_386_PC16 LZMA_DEC99
|
|
||||||
00000e6b R_386_PC16 LZMA_DEC99
|
|
||||||
00000e73 R_386_PC16 LZMA_DEC99
|
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_DEC30]:
|
RELOCATION RECORDS FOR [LZMA_DEC30]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
00000001 R_386_16 lzma_u_len
|
00000004 R_386_16 lzma_u_len
|
||||||
|
|
||||||
RELOCATION RECORDS FOR [LZMA_DEC31]:
|
RELOCATION RECORDS FOR [LZMA_DEC31]:
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
|
|||||||
Reference in New Issue
Block a user