mirror of
https://github.com/upx/upx
synced 2025-10-05 19:20:23 +08:00
Save some more bytes in dos/exe lzma stub.
This commit is contained in:
parent
49455c99ad
commit
4d3b627839
|
@ -279,7 +279,6 @@ void Packer::defineDecompressorSymbols()
|
||||||
if (ph.format == UPX_F_DOS_EXE)
|
if (ph.format == UPX_F_DOS_EXE)
|
||||||
{
|
{
|
||||||
linker->defineSymbol("lzma_properties_hi", properties >> 16); // pb
|
linker->defineSymbol("lzma_properties_hi", properties >> 16); // pb
|
||||||
// len - 2 because of properties
|
|
||||||
linker->defineSymbol("lzma_c_len_hi", (ph.c_len - 2) >> 16);
|
linker->defineSymbol("lzma_c_len_hi", (ph.c_len - 2) >> 16);
|
||||||
linker->defineSymbol("lzma_u_len_hi", ph.u_len >> 16);
|
linker->defineSymbol("lzma_u_len_hi", ph.u_len >> 16);
|
||||||
linker->defineSymbol("lzma_u_len_segment", (ph.u_len & 0xf0000) >> 4);
|
linker->defineSymbol("lzma_u_len_segment", (ph.u_len & 0xf0000) >> 4);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -38,6 +38,7 @@ class opts:
|
||||||
auto_inline = 1
|
auto_inline = 1
|
||||||
call_rewrite = 1
|
call_rewrite = 1
|
||||||
loop_rewrite = 1
|
loop_rewrite = 1
|
||||||
|
mov_rewrite = 1
|
||||||
|
|
||||||
|
|
||||||
inline_map = {
|
inline_map = {
|
||||||
|
@ -119,7 +120,7 @@ def main(argv):
|
||||||
def match(a, b):
|
def match(a, b):
|
||||||
if b is None:
|
if b is None:
|
||||||
return False
|
return False
|
||||||
if "^" in a or "*" in a:
|
if "^" in a or "*" in a or "$" in a:
|
||||||
# regexp
|
# regexp
|
||||||
return re.search(a, b.lower())
|
return re.search(a, b.lower())
|
||||||
else:
|
else:
|
||||||
|
@ -355,6 +356,61 @@ def main(argv):
|
||||||
m = "M_shrd_11_disi_bp %s %s" % (bp_dx, bp_ax)
|
m = "M_shrd_11_disi_bp %s %s" % (bp_dx, bp_ax)
|
||||||
orewrite_inst(i, m, "", dpos1 + dpos2[-2:])
|
orewrite_inst(i, m, "", dpos1 + dpos2[-2:])
|
||||||
continue
|
continue
|
||||||
|
if opts.mov_rewrite and inst in ["mov"]:
|
||||||
|
s = [
|
||||||
|
["mov", r"^al,byte ptr \[(di|si)\]$"],
|
||||||
|
["xor", r"^ah,ah$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],ax$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],(0|1)$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],(0|1)$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],(0|1)$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],(0|1)$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],(0|1)$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],(0|1)$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],(0|1)$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],(0|1)$"],
|
||||||
|
["mov", r"^word ptr \[bp([+-](\d+))\],(0|1)$"],
|
||||||
|
["mov", r"^bx,word ptr \[bp([+-](\d+))\]$"],
|
||||||
|
["mov", r"^word ptr \[bx\],(0)$"],
|
||||||
|
["mov", r"^word ptr \[bx([+-](\d+))\],(0)$"],
|
||||||
|
["mov", r"^bx,word ptr \[bp([+-](\d+))\]$"],
|
||||||
|
["mov", r"^word ptr \[bx\],(0)$"],
|
||||||
|
["mov", r"^word ptr \[bx([+-](\d+))\],(0)$"],
|
||||||
|
["mov", r"^dl,byte ptr \[(di|si)([+-](\d+))\]$"],
|
||||||
|
["xor", r"^dh,dh$"],
|
||||||
|
["mov", r"^cx,ax$"],
|
||||||
|
]
|
||||||
|
dpos = omatch(i, -len(s), s)
|
||||||
|
if dpos:
|
||||||
|
ipos, n_del = 16, 0
|
||||||
|
pos0 = dpos[0][0]
|
||||||
|
r = []
|
||||||
|
for pos, m0, m1 in dpos:
|
||||||
|
assert pos == pos0 + len(r)
|
||||||
|
r.append([olines[pos][1], olines[pos][2]])
|
||||||
|
z0 = r[0]; z1 = r[2]; del r[:3]
|
||||||
|
r.insert(0, ["xor", "ax,ax"])
|
||||||
|
r.insert(ipos, z0); r.insert(ipos + 1, z1)
|
||||||
|
i = 0
|
||||||
|
while i < len(r):
|
||||||
|
inst, args = r[i]
|
||||||
|
if inst == "mov" and args.endswith(",0"):
|
||||||
|
r[i] = [inst, args[:-1] + "ax"]
|
||||||
|
elif inst == "mov" and args.endswith(",1"):
|
||||||
|
assert i < ipos
|
||||||
|
r.insert(ipos, [inst, args[:-1] + "ax"])
|
||||||
|
del r[i]; i -= 1; n_del += 1
|
||||||
|
i += 1
|
||||||
|
assert len(r) == len(dpos)
|
||||||
|
pos = pos0
|
||||||
|
for inst, args in r:
|
||||||
|
print pos-pos0, inst, args
|
||||||
|
olines[pos][1] = inst
|
||||||
|
olines[pos][2] = args
|
||||||
|
pos += 1
|
||||||
|
if n_del:
|
||||||
|
olines.insert(pos0 + ipos - n_del, [None, "inc", "ax", None])
|
||||||
|
continue
|
||||||
#
|
#
|
||||||
if inst_has_label(inst):
|
if inst_has_label(inst):
|
||||||
k, v = parse_label(inst, args)
|
k, v = parse_label(inst, args)
|
||||||
|
|
|
@ -22,24 +22,25 @@
|
||||||
cwd
|
cwd
|
||||||
mov word ptr [bp-86],ax
|
mov word ptr [bp-86],ax
|
||||||
mov word ptr [bp-84],dx
|
mov word ptr [bp-84],dx
|
||||||
mov al,byte ptr [si]
|
xor ax,ax
|
||||||
xor ah,ah
|
mov word ptr [bp-16],ax
|
||||||
mov word ptr [bp-78],ax
|
mov word ptr [bp-100],ax
|
||||||
mov word ptr [bp-16],0
|
mov word ptr [bp-50],ax
|
||||||
mov word ptr [bp-102],1
|
mov word ptr [bp-54],ax
|
||||||
mov word ptr [bp-100],0
|
mov word ptr [bp-74],ax
|
||||||
mov word ptr [bp-52],1
|
|
||||||
mov word ptr [bp-50],0
|
|
||||||
mov word ptr [bp-56],1
|
|
||||||
mov word ptr [bp-54],0
|
|
||||||
mov word ptr [bp-68],1
|
|
||||||
mov word ptr [bp-74],0
|
|
||||||
mov bx,word ptr [bp+18]
|
mov bx,word ptr [bp+18]
|
||||||
mov word ptr [bx],0
|
mov word ptr [bx],ax
|
||||||
mov word ptr [bx+2],0
|
mov word ptr [bx+2],ax
|
||||||
mov bx,word ptr [bp+28]
|
mov bx,word ptr [bp+28]
|
||||||
mov word ptr [bx],0
|
mov word ptr [bx],ax
|
||||||
mov word ptr [bx+2],0
|
mov word ptr [bx+2],ax
|
||||||
|
inc ax
|
||||||
|
mov word ptr [bp-102],ax
|
||||||
|
mov word ptr [bp-52],ax
|
||||||
|
mov word ptr [bp-56],ax
|
||||||
|
mov word ptr [bp-68],ax
|
||||||
|
mov al,byte ptr [si]
|
||||||
|
mov word ptr [bp-78],ax
|
||||||
mov dl,byte ptr [si+1]
|
mov dl,byte ptr [si+1]
|
||||||
xor dh,dh
|
xor dh,dh
|
||||||
mov cx,ax
|
mov cx,ax
|
||||||
|
|
|
@ -22,24 +22,25 @@
|
||||||
cwd
|
cwd
|
||||||
mov word ptr [bp-86],ax
|
mov word ptr [bp-86],ax
|
||||||
mov word ptr [bp-84],dx
|
mov word ptr [bp-84],dx
|
||||||
mov al,byte ptr [si]
|
xor ax,ax
|
||||||
xor ah,ah
|
mov word ptr [bp-16],ax
|
||||||
mov word ptr [bp-78],ax
|
mov word ptr [bp-100],ax
|
||||||
mov word ptr [bp-16],0
|
mov word ptr [bp-50],ax
|
||||||
mov word ptr [bp-102],1
|
mov word ptr [bp-54],ax
|
||||||
mov word ptr [bp-100],0
|
mov word ptr [bp-74],ax
|
||||||
mov word ptr [bp-52],1
|
|
||||||
mov word ptr [bp-50],0
|
|
||||||
mov word ptr [bp-56],1
|
|
||||||
mov word ptr [bp-54],0
|
|
||||||
mov word ptr [bp-68],1
|
|
||||||
mov word ptr [bp-74],0
|
|
||||||
mov bx,word ptr [bp+18]
|
mov bx,word ptr [bp+18]
|
||||||
mov word ptr [bx],0
|
mov word ptr [bx],ax
|
||||||
mov word ptr [bx+2],0
|
mov word ptr [bx+2],ax
|
||||||
mov bx,word ptr [bp+28]
|
mov bx,word ptr [bp+28]
|
||||||
mov word ptr [bx],0
|
mov word ptr [bx],ax
|
||||||
mov word ptr [bx+2],0
|
mov word ptr [bx+2],ax
|
||||||
|
inc ax
|
||||||
|
mov word ptr [bp-102],ax
|
||||||
|
mov word ptr [bp-52],ax
|
||||||
|
mov word ptr [bp-56],ax
|
||||||
|
mov word ptr [bp-68],ax
|
||||||
|
mov al,byte ptr [si]
|
||||||
|
mov word ptr [bp-78],ax
|
||||||
mov dl,byte ptr [si+1]
|
mov dl,byte ptr [si+1]
|
||||||
xor dh,dh
|
xor dh,dh
|
||||||
mov cx,ax
|
mov cx,ax
|
||||||
|
|
|
@ -73,27 +73,27 @@ Idx Name Size VMA LMA File off Algn Flags
|
||||||
68 NRV2EEX9 00000004 00000000 00000000 00000336 2**0 CONTENTS, READONLY
|
68 NRV2EEX9 00000004 00000000 00000000 00000336 2**0 CONTENTS, READONLY
|
||||||
69 LZMA_DEC00 00000032 00000000 00000000 0000033a 2**0 CONTENTS, RELOC, READONLY
|
69 LZMA_DEC00 00000032 00000000 00000000 0000033a 2**0 CONTENTS, RELOC, READONLY
|
||||||
70 ignore_reloc_overflow 00000008 00000000 00000000 0000036c 2**0 CONTENTS, RELOC, READONLY
|
70 ignore_reloc_overflow 00000008 00000000 00000000 0000036c 2**0 CONTENTS, RELOC, READONLY
|
||||||
71 LZMA_DEC10 00001207 00000000 00000000 00000374 2**0 CONTENTS, READONLY
|
71 LZMA_DEC10 000011ee 00000000 00000000 00000374 2**0 CONTENTS, READONLY
|
||||||
72 LZMA_DEC20 0000129f 00000000 00000000 0000157b 2**0 CONTENTS, READONLY
|
72 LZMA_DEC20 00001286 00000000 00000000 00001562 2**0 CONTENTS, READONLY
|
||||||
73 LZMA_DEC30 00000001 00000000 00000000 0000281a 2**0 CONTENTS, READONLY
|
73 LZMA_DEC30 00000001 00000000 00000000 000027e8 2**0 CONTENTS, READONLY
|
||||||
74 LZMA_DEC31 0000000c 00000000 00000000 0000281b 2**0 CONTENTS, RELOC, READONLY
|
74 LZMA_DEC31 0000000c 00000000 00000000 000027e9 2**0 CONTENTS, RELOC, READONLY
|
||||||
75 LZMA_DEC32 00000005 00000000 00000000 00002827 2**0 CONTENTS, RELOC, READONLY
|
75 LZMA_DEC32 00000005 00000000 00000000 000027f5 2**0 CONTENTS, RELOC, READONLY
|
||||||
76 LZMA_DEC33 00000007 00000000 00000000 0000282c 2**0 CONTENTS, RELOC, READONLY
|
76 LZMA_DEC33 00000007 00000000 00000000 000027fa 2**0 CONTENTS, RELOC, READONLY
|
||||||
77 EXEMAIN5 00000001 00000000 00000000 00002833 2**0 CONTENTS, READONLY
|
77 EXEMAIN5 00000001 00000000 00000000 00002801 2**0 CONTENTS, READONLY
|
||||||
78 EXEADJUS 00000007 00000000 00000000 00002834 2**0 CONTENTS, READONLY
|
78 EXEADJUS 00000007 00000000 00000000 00002802 2**0 CONTENTS, READONLY
|
||||||
79 EXENOADJ 00000002 00000000 00000000 0000283b 2**0 CONTENTS, READONLY
|
79 EXENOADJ 00000002 00000000 00000000 00002809 2**0 CONTENTS, READONLY
|
||||||
80 EXERELO1 0000001e 00000000 00000000 0000283d 2**0 CONTENTS, RELOC, READONLY
|
80 EXERELO1 0000001e 00000000 00000000 0000280b 2**0 CONTENTS, RELOC, READONLY
|
||||||
81 EXEREL9A 00000012 00000000 00000000 0000285b 2**0 CONTENTS, RELOC, READONLY
|
81 EXEREL9A 00000012 00000000 00000000 00002829 2**0 CONTENTS, RELOC, READONLY
|
||||||
82 EXERELO2 00000004 00000000 00000000 0000286d 2**0 CONTENTS, READONLY
|
82 EXERELO2 00000004 00000000 00000000 0000283b 2**0 CONTENTS, READONLY
|
||||||
83 EXEREBIG 00000002 00000000 00000000 00002871 2**0 CONTENTS, RELOC, READONLY
|
83 EXEREBIG 00000002 00000000 00000000 0000283f 2**0 CONTENTS, RELOC, READONLY
|
||||||
84 EXERELO3 00000002 00000000 00000000 00002873 2**0 CONTENTS, RELOC, READONLY
|
84 EXERELO3 00000002 00000000 00000000 00002841 2**0 CONTENTS, RELOC, READONLY
|
||||||
85 EXEMAIN8 00000003 00000000 00000000 00002875 2**0 CONTENTS, READONLY
|
85 EXEMAIN8 00000003 00000000 00000000 00002843 2**0 CONTENTS, READONLY
|
||||||
86 DEVICEEND 00000013 00000000 00000000 00002878 2**0 CONTENTS, READONLY
|
86 DEVICEEND 00000013 00000000 00000000 00002846 2**0 CONTENTS, READONLY
|
||||||
87 EXESTACK 00000006 00000000 00000000 0000288b 2**0 CONTENTS, RELOC, READONLY
|
87 EXESTACK 00000006 00000000 00000000 00002859 2**0 CONTENTS, RELOC, READONLY
|
||||||
88 EXESTASP 00000003 00000000 00000000 00002891 2**0 CONTENTS, RELOC, READONLY
|
88 EXESTASP 00000003 00000000 00000000 0000285f 2**0 CONTENTS, RELOC, READONLY
|
||||||
89 EXEJUMPF 00000005 00000000 00000000 00002894 2**0 CONTENTS, RELOC, READONLY
|
89 EXEJUMPF 00000005 00000000 00000000 00002862 2**0 CONTENTS, RELOC, READONLY
|
||||||
90 EXERCSPO 00000004 00000000 00000000 00002899 2**0 CONTENTS, RELOC, READONLY
|
90 EXERCSPO 00000004 00000000 00000000 00002867 2**0 CONTENTS, RELOC, READONLY
|
||||||
91 EXERETIP 00000006 00000000 00000000 0000289d 2**0 CONTENTS, RELOC, READONLY
|
91 EXERETIP 00000006 00000000 00000000 0000286b 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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user