More renaming.

This commit is contained in:
Markus F.X.J. Oberhumer 2006-08-16 09:24:31 +02:00
parent 4ed74af868
commit 618d5ddaff
22 changed files with 51 additions and 1952 deletions

View File

@ -1,253 +0,0 @@
; cl1_d32.ash -- cl1_decompress_le32 in 32-bit assembly
; schema from ucl/nrv2b_d32.ash
;
; Copyright (C) 2004-2006 John Reiser
; Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
; All Rights Reserved.
;
; This file is free software; you can redistribute it and/or
; modify it 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 file 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 the UCL library; 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 John Reiser
; <markus@oberhumer.com> <jreiser@BitWagon.com>
;
; ------------- DECOMPRESSION -------------
; Input:
; esi - source
; edi - dest
; ebp - -1
; cld
; Output:
; eax - 0
; ecx - 0
%ifndef jmps
%define jmps jmp short
%endif
%ifndef jmpn
%define jmpn jmp near
%endif
;; One of these two is instantiated many times by buildLoader
%ifdef __CL1SMA1B__
call edx
%else; __CL1FAS1B__
add ebx, ebx
db 0x75,2 ;jnz cl1_no_reload
call edx
;cl1_no_reload:
%endif; __CL1GET1B__
; __CL1ENTER__
nop ; 'int3' for debugging
call start_cl1 ; pic push address of next instr
; __CL1SMA10__
getbit_cl1: ; appears only in small version
add ebx, ebx
jz reload_cl1
ret
; __CL1RLOAD__
reload_cl1: ; for both small and fast version
mov ebx, [esi]
sub esi, byte -4
adc ebx, ebx
ret
; __CL1WID01__
widelit_cl1:
sub ecx,ecx ; back to 0
; getbit
; __CL1WID02__
adc ecx,ecx
; getbit
; __CL1WID03__
jc lit89_cl1
; getbit
; __CL1WID04__
adc ecx,ecx
; getbit
; __CL1WID05__
jc lit10_12_cl1
; getbit
; __CL1WID06__
adc ecx,ecx ; 0..7; -1+ (width/2) of length
litwidth_cl1: ; ss22 algorithm, counted width<=8 pairs; returns eax= 2..0x15555
; getbit
; __CL1WID07__
adc eax,eax
dec eax
; getbit
; __CL1WID08__
adc eax,eax
sub ecx, byte 1
jnc litwidth_cl1
lea ecx,[17 -2 + eax] ; 17: predecessors; ss22 returns 2..
cmp eax,0xffff-(17 -2)
jb litgo_cl1 ; not maximal range of search
lea eax,[esi + ecx] ; esi after copy
push eax ; "parameter" to maxlit_cl1
jmpn maxlit_cl1 ; can have another literal afterwards
lit13_16_cl1:
; getbit
; __CL1WID09__
adc ecx,ecx
; getbit
; __CL1WID10__
adc ecx,ecx
add ecx, byte 13
jmps litmov_cl1
lit10_12_cl1:
test ecx,ecx
jz lit13_16_cl1
inc ecx ; 2,3,4
lit89_cl1:
add ecx, byte 8
litgo_cl1:
jmps litmov_cl1
; __CL1START__
start_cl1:
sub ecx,ecx ; 0
pop edx ; edx= getbit_cl1 or reload_cl1
sub ebx, ebx ; cause reload on first bit
; __CL1TOP00__
top_cl1: ; In: 0==ecx
lea eax,[1+ ecx] ; 1: the msb of offset or large width
; getbit
; __CL1TOP01__
jnc match_cl1
; getbit
; __CL1TOP02__
jc lit1_cl1
; getbit
; __CL1TOP03__
jc lit2_cl1
; getbit
; __CL1TOP04__
jc lit3_cl1
add ecx, byte 2
; getbit
; __CL1TOP05__
jc lit45_cl1
inc ecx
; getbit
; __CL1TOP06__
jc lit67_cl1
jmpn widelit_cl1
lit67_cl1:
lit45_cl1:
; getbit
; __CL1TOP07__
adc ecx,ecx
litmov_cl1:
db 0xD1,((3<<6)|(5<<3)|1) ;shr ecx,1
jnc litmovb_cl1
movsb
litmovb_cl1:
db 0xD1,((3<<6)|(5<<3)|1) ;shr ecx,1
jnc litmovw_cl1
movsw
litmovw_cl1:
rep
movsd
lea eax,[1+ ecx] ; 1: the msb
jmps litdone_cl1
lit3_cl1:
movsb
lit2_cl1:
movsb
lit1_cl1:
movsb
litdone_cl1:
match_cl1: ; In: 0==ecx; 1==eax
offset_cl1: ; ss11 algorithm
; getbit
; __CL1OFF01__
adc eax,eax
; getbit
; __CL1OFF02__
jnc offset_cl1
sub eax, byte 3 ; 2.. ==> -1[prev], (0,,<<8)|byte
jc prev_off_cl1
shl eax,8
lodsb
xor eax, byte ~0
jz done_cl1 ; EOF
mov ebp,eax ; -offset
prev_off_cl1: ; 1st 2 bits encode (5<=len),2,3,4
; getbit
; __CL1OFF03__
adc ecx,ecx
; getbit
; __CL1OFF04__
adc ecx,ecx
jnz wrinkle_cl1
; __CL1LEN00__
inc ecx ; 1: the msb
mlen_cl1:
; getbit
; __CL1LEN01__
adc ecx,ecx
; getbit
; __CL1LEN02__
jnc mlen_cl1
add ecx, byte 2 ; 2.. ==> 4..
; __CL1COPY0__
wrinkle_cl1:
cmp ebp,-0xd00
adc ecx, byte 1
copy_cl1:
push esi
lea esi,[edi + ebp]
cmp ebp, byte -4
ja ripple_cl1
maxlit_cl1: ; literal copy cannot overlap; omit test for ripple
db 0xD1,((3<<6)|(5<<3)|1) ;shr ecx,1
jnc maxlitb_cl1
movsb
maxlitb_cl1:
db 0xD1,((3<<6)|(5<<3)|1) ;shr ecx,1
jnc maxlitw_cl1
movsw
maxlitw_cl1:
rep
movsd
popbot_cl1:
pop esi
bottom_cl1:
jmpn top_cl1
ripple_cl1:
cmp ebp, byte -1
jne ripmov_cl1
lodsb
rep
stosb
jmps popbot_cl1
ripmov_cl1:
rep
movsb
jmps popbot_cl1
done_cl1:
; __CL1END__
; vi:ts=8:et

View File

@ -1,166 +0,0 @@
; lzma_d.ash -- 32-bit assembly
;
; This file is part of the UPX executable compressor.
;
; Copyright (C) 2006-2006 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
; <markus@oberhumer.com>
; http://www.oberhumer.com/opensource/upx/
;
; ------------- DECOMPRESSION -------------
; Input:
; esi - source
; edi - dest
; cld
; Output:
; eax - 0
; ecx - 0
%ifndef jmps
%define jmps jmp short
%endif
%ifndef jmpn
%define jmpn jmp near
%endif
CPU 386
;
; init
; __LZMA_DEC00__
;
; ebx = alloca('UPXa');
mov ebp, esp ; save stack
lea ebx, [esp + 'UPXa']
xor eax, eax
.clearstack1:
push eax
cmp esp, ebx
jnz .clearstack1
inc esi ; skip 2 bytes for properties
inc esi
push ebx ; &outSizeProcessed
push 'UPXb' ; outSize
push edi ; out
add ebx, 4
push ebx ; &inSizeProcessed
push 'UPXc' ; inSize
push esi ; in
add ebx, 4
push ebx ; &CLzmaDecoderState
push eax ; dummy for call
; hardwired LzmaDecodeProperties()
mov dword [ebx], 'UPXd' ; lc, lp, pb, dummy
; __LZMA_ELF00__
;
LZMA_BASE_SIZE equ 1846
LZMA_LIT_SIZE equ 768
%ifndef O_OUTS ; ELF defines them, others do not care
%define O_OUTS 0
%define O_INS 0
%endif
mov ebp, esp ; save stack
mov edx,[O_INS + ebp] ; inSize
lodsb ; first byte, replaces LzmaDecodeProperties()
dec edx
mov cl,al ; cl= ((lit_context_bits + lit_pos_bits)<<3) | pos_bits
and al,7 ; al= pos_bits
shr cl,3 ; cl= lit_context_bits + lit_pos_bits
mov ebx, -LZMA_LIT_SIZE
shl ebx,cl
; /* inSizeProcessed, outSizeProcessed, *_bits, CLzmaDecoderState */
lea ebx,[-(2*4 +4) + 2*(-LZMA_BASE_SIZE + ebx) + esp]
and ebx, byte (~0<<5) ; 32-byte align
.elf_clearstack1:
push byte 0
cmp esp,ebx
jne .elf_clearstack1
push ebx ; &outSizeProcessed
add ebx, 4
mov ecx,[O_OUTS + ebp] ; &outSize
push dword [ecx] ; outSize
push edi ; out
push ebx ; &inSizeProcessed
add ebx, 4
mov [2+ ebx],al ; store pos_bits
lodsb ; second byte, replaces LzmaDecodeProperties()
dec edx
mov cl,al ; cl= (lit_pos_bits<<4) | lit_context_bits
and al,0xf
mov [ ebx],al ; store lit_context_bits
shr cl,4
mov [1+ ebx],cl ; store lit_pos_bits
push edx ; inSize -2
push esi ; in
push ebx ; &CLzmaDecoderState
push eax ; return address slot (dummy CALL)
; __LZMA_DEC10__
%include "arch/i386/lzma_d_cs.ash"
; __LZMA_DEC20__
%include "arch/i386/lzma_d_cf.ash"
;
; cleanup
; __LZMA_DEC30__
;
add esi, [ebx - 4] ; inSizeProcessed
add edi, [ebx - 8] ; outSizeProcessed
xor eax, eax
lea ecx, [esp - 256]
mov esp, ebp ; restore stack
.clearstack2:
push eax
cmp esp, ecx
jnz .clearstack2
mov esp, ebp ; restore stack
xor ecx, ecx
; vi:ts=8:et

View File

@ -1,169 +0,0 @@
db 85, 87, 86, 83,131,236,124,139,148, 36,144, 0, 0, 0,199, 68 ; 0x0000
db 36,116, 0, 0, 0, 0,198, 68, 36,115, 0,139,172, 36,156, 0 ; 0x0010
db 0, 0,141, 66, 4,137, 68, 36,120,184, 1, 0, 0, 0, 15,182 ; 0x0020
db 74, 2,137,195,211,227,137,217, 73,137, 76, 36,108, 15,182, 74 ; 0x0030
db 1,211,224, 72,137, 68, 36,104,139,132, 36,168, 0, 0, 0, 15 ; 0x0040
db 182, 50,199, 69, 0, 0, 0, 0, 0,199, 68, 36, 96, 0, 0, 0 ; 0x0050
db 0,199, 0, 0, 0, 0, 0,184, 0, 3, 0, 0,137,116, 36,100 ; 0x0060
db 199, 68, 36, 92, 1, 0, 0, 0,199, 68, 36, 88, 1, 0, 0, 0 ; 0x0070
db 199, 68, 36, 84, 1, 0, 0, 0,199, 68, 36, 80, 1, 0, 0, 0 ; 0x0080
db 15,182, 74, 1, 1,241,211,224,141,136, 54, 7, 0, 0, 57, 76 ; 0x0090
db 36,116,115, 14,139, 68, 36,120,102,199, 0, 0, 4,131,192, 2 ; 0x00a0
db 226,246,139,156, 36,148, 0, 0, 0, 49,255,199, 68, 36, 72,255 ; 0x00b0
db 255,255,255,137,218, 3,148, 36,152, 0, 0, 0,137, 84, 36, 76 ; 0x00c0
db 49,210, 59, 92, 36, 76, 15,132,124, 9, 0, 0, 15,182, 3,193 ; 0x00d0
db 231, 8, 66, 67, 9,199,131,250, 4,126,231,139,140, 36,164, 0 ; 0x00e0
db 0, 0, 57, 76, 36,116, 15,131,100, 9, 0, 0,139,116, 36,116 ; 0x00f0
db 35,116, 36,108,139, 68, 36, 96,139, 84, 36,120,193,224, 4,137 ; 0x0100
db 116, 36, 68, 1,240,129,124, 36, 72,255,255,255, 0,141, 44, 66 ; 0x0110
db 119, 24, 59, 92, 36, 76, 15,132, 44, 9, 0, 0,193,100, 36, 72 ; 0x0120
db 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72,102,139 ; 0x0130
db 85, 0,193,232, 11, 15,183,202, 15,175,193, 57,199, 15,131,221 ; 0x0140
db 1, 0, 0,137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,138, 76 ; 0x0150
db 36,100,193,248, 5,190, 1, 0, 0, 0,141, 4, 2, 15,182, 84 ; 0x0160
db 36,115,102,137, 69, 0,139, 68, 36,116, 35, 68, 36,104,139,108 ; 0x0170
db 36,120,211,224,185, 8, 0, 0, 0, 43, 76, 36,100,211,250, 1 ; 0x0180
db 208,105,192, 0, 6, 0, 0,131,124, 36, 96, 6,141,132, 5,108 ; 0x0190
db 14, 0, 0,137, 68, 36, 20, 15,142,202, 0, 0, 0,139, 68, 36 ; 0x01a0
db 116, 43, 68, 36, 92,139,148, 36,160, 0, 0, 0, 15,182, 4, 2 ; 0x01b0
db 137, 68, 36, 64,209,100, 36, 64,139, 76, 36, 64,141, 20, 54,139 ; 0x01c0
db 108, 36, 20,129,225, 0, 1, 0, 0,129,124, 36, 72,255,255,255 ; 0x01d0
db 0,141, 68, 77, 0,137, 76, 36, 60,141, 44, 16,119, 24, 59, 92 ; 0x01e0
db 36, 76, 15,132, 96, 8, 0, 0,193,100, 36, 72, 8, 15,182, 3 ; 0x01f0
db 193,231, 8, 67, 9,199,139, 68, 36, 72,102,139,141, 0, 2, 0 ; 0x0200
db 0,193,232, 11, 15,183,241, 15,175,198, 57,199,115, 35,137, 68 ; 0x0210
db 36, 72,184, 0, 8, 0, 0, 41,240,137,214,193,248, 5,131,124 ; 0x0220
db 36, 60, 0,141, 4, 1,102,137,133, 0, 2, 0, 0,116, 34,235 ; 0x0230
db 46, 41, 68, 36, 72, 41,199,137,200,141,114, 1,102,193,232, 5 ; 0x0240
db 102, 41,193,131,124, 36, 60, 0,102,137,141, 0, 2, 0, 0,116 ; 0x0250
db 14,129,254,255, 0, 0, 0, 15,142, 87,255,255,255,235,121,129 ; 0x0260
db 254,255, 0, 0, 0,127,113,141, 20, 54,139,108, 36, 20, 1,213 ; 0x0270
db 129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132 ; 0x0280
db 196, 7, 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67 ; 0x0290
db 9,199,139, 68, 36, 72,102,139, 77, 0,193,232, 11, 15,183,241 ; 0x02a0
db 15,175,198, 57,199,115, 25,137, 68, 36, 72,184, 0, 8, 0, 0 ; 0x02b0
db 41,240,137,214,193,248, 5,141, 4, 1,102,137, 69, 0,235,159 ; 0x02c0
db 41, 68, 36, 72, 41,199,137,200,141,114, 1,102,193,232, 5,102 ; 0x02d0
db 41,193,102,137, 77, 0,235,135,139, 84, 36,116,137,240,139,140 ; 0x02e0
db 36,160, 0, 0, 0,136, 68, 36,115,136, 4, 10, 66,131,124, 36 ; 0x02f0
db 96, 3,137, 84, 36,116,127, 13,199, 68, 36, 96, 0, 0, 0, 0 ; 0x0300
db 233, 27, 7, 0, 0,131,124, 36, 96, 9,127, 10,131,108, 36, 96 ; 0x0310
db 3,233, 10, 7, 0, 0,131,108, 36, 96, 6,233, 0, 7, 0, 0 ; 0x0320
db 139, 76, 36, 72, 41,199,139,116, 36, 96, 41,193,137,208,102,193 ; 0x0330
db 232, 5,102, 41,194,129,249,255,255,255, 0,102,137, 85, 0,139 ; 0x0340
db 108, 36,120,141,116,117, 0,137,116, 36, 56,119, 22, 59, 92, 36 ; 0x0350
db 76, 15,132,241, 6, 0, 0, 15,182, 3,193,231, 8,193,225, 8 ; 0x0360
db 67, 9,199,139,108, 36, 56,137,200,193,232, 11,102,139,149,128 ; 0x0370
db 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, 82,137,198,184 ; 0x0380
db 0, 8, 0, 0, 41,232,139,108, 36, 88,193,248, 5,139, 76, 36 ; 0x0390
db 84,141, 4, 2,139, 84, 36, 56,137, 76, 36, 80,139, 76, 36,120 ; 0x03a0
db 102,137,130,128, 1, 0, 0,139, 68, 36, 92,137,108, 36, 84,137 ; 0x03b0
db 68, 36, 88, 49,192,131,124, 36, 96, 6, 15,159,192,129,193,100 ; 0x03c0
db 6, 0, 0,141, 4, 64,137, 68, 36, 96,233,116, 2, 0, 0,137 ; 0x03d0
db 206, 41,199, 41,198,137,208,102,193,232, 5,139, 76, 36, 56,102 ; 0x03e0
db 41,194,129,254,255,255,255, 0,102,137,145,128, 1, 0, 0,119 ; 0x03f0
db 22, 59, 92, 36, 76, 15,132, 77, 6, 0, 0, 15,182, 3,193,231 ; 0x0400
db 8,193,230, 8, 67, 9,199,139,108, 36, 56,137,242,193,234, 11 ; 0x0410
db 102,139,141,152, 1, 0, 0, 15,183,193, 15,175,208, 57,215, 15 ; 0x0420
db 131,227, 0, 0, 0,189, 0, 8, 0, 0,137,214, 41,197,199, 68 ; 0x0430
db 36, 52, 0, 8, 0, 0,137,232,193,248, 5,141, 4, 1,139, 76 ; 0x0440
db 36, 56,102,137,129,152, 1, 0, 0,139, 68, 36, 96,139, 76, 36 ; 0x0450
db 68,193,224, 5, 3, 68, 36,120,129,250,255,255,255, 0,141, 44 ; 0x0460
db 72,119, 22, 59, 92, 36, 76, 15,132,219, 5, 0, 0, 15,182, 3 ; 0x0470
db 193,231, 8,193,230, 8, 67, 9,199,102,139,149,224, 1, 0, 0 ; 0x0480
db 137,240,193,232, 11, 15,183,202, 15,175,193, 57,199,115, 96, 41 ; 0x0490
db 76, 36, 52,193,124, 36, 52, 5,139,116, 36, 52,137, 68, 36, 72 ; 0x04a0
db 131,124, 36,116, 0,141, 4, 50,102,137,133,224, 1, 0, 0, 15 ; 0x04b0
db 132,147, 5, 0, 0, 49,192,131,124, 36, 96, 6,139,172, 36,160 ; 0x04c0
db 0, 0, 0,139, 84, 36,116, 15,159,192,141, 68, 0, 9,137, 68 ; 0x04d0
db 36, 96,139, 68, 36,116, 43, 68, 36, 92,138, 68, 5, 0,136, 68 ; 0x04e0
db 36,115,136, 4, 42, 66,137, 84, 36,116,233, 49, 5, 0, 0, 41 ; 0x04f0
db 198, 41,199,137,208,102,193,232, 5,102, 41,194,102,137,149,224 ; 0x0500
db 1, 0, 0,233, 31, 1, 0, 0,137,200, 41,214,102,193,232, 5 ; 0x0510
db 139,108, 36, 56,102, 41,193, 41,215,129,254,255,255,255, 0,102 ; 0x0520
db 137,141,152, 1, 0, 0,119, 22, 59, 92, 36, 76, 15,132, 22, 5 ; 0x0530
db 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199,139, 76 ; 0x0540
db 36, 56,137,240,193,232, 11,102,139,145,176, 1, 0, 0, 15,183 ; 0x0550
db 202, 15,175,193, 57,199,115, 35,137,198,184, 0, 8, 0, 0, 41 ; 0x0560
db 200,139,108, 36, 56,193,248, 5,141, 4, 2,102,137,133,176, 1 ; 0x0570
db 0, 0,139, 68, 36, 88,233,160, 0, 0, 0,137,241, 41,199, 41 ; 0x0580
db 193,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 56,129,249 ; 0x0590
db 255,255,255, 0,102,137,144,176, 1, 0, 0,119, 22, 59, 92, 36 ; 0x05a0
db 76, 15,132,161, 4, 0, 0, 15,182, 3,193,231, 8,193,225, 8 ; 0x05b0
db 67, 9,199,139,116, 36, 56,137,200,193,232, 11,102,139,150,200 ; 0x05c0
db 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, 32,137,198,184 ; 0x05d0
db 0, 8, 0, 0, 41,232,139,108, 36, 56,193,248, 5,141, 4, 2 ; 0x05e0
db 102,137,133,200, 1, 0, 0,139, 68, 36, 84,235, 38,137,206, 41 ; 0x05f0
db 199, 41,198,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 56 ; 0x0600
db 102,137,144,200, 1, 0, 0,139, 84, 36, 84,139, 68, 36, 80,137 ; 0x0610
db 84, 36, 80,139, 76, 36, 88,137, 76, 36, 84,139,108, 36, 92,137 ; 0x0620
db 68, 36, 92,137,108, 36, 88, 49,192,131,124, 36, 96, 6,139, 76 ; 0x0630
db 36,120, 15,159,192,129,193,104, 10, 0, 0,141, 68, 64, 8,137 ; 0x0640
db 68, 36, 96,129,254,255,255,255, 0,119, 22, 59, 92, 36, 76, 15 ; 0x0650
db 132,243, 3, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9 ; 0x0660
db 199,102,139, 17,137,240,193,232, 11, 15,183,234, 15,175,197, 57 ; 0x0670
db 199,115, 47,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100 ; 0x0680
db 36, 68, 4,193,248, 5,199, 68, 36, 44, 0, 0, 0, 0,141, 4 ; 0x0690
db 2,102,137, 1,139, 68, 36, 68,141, 76, 1, 4,137, 76, 36, 16 ; 0x06a0
db 235,114, 41,198, 41,199,137,208,102,193,232, 5,102, 41,194,129 ; 0x06b0
db 254,255,255,255, 0,102,137, 17,119, 22, 59, 92, 36, 76, 15,132 ; 0x06c0
db 132, 3, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199 ; 0x06d0
db 102,139, 81, 2,137,240,193,232, 11, 15,183,234, 15,175,197, 57 ; 0x06e0
db 199,115, 59,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100 ; 0x06f0
db 36, 68, 4,193,248, 5,199, 68, 36, 44, 8, 0, 0, 0,141, 4 ; 0x0700
db 2,139, 84, 36, 68,102,137, 65, 2,141,140, 17, 4, 1, 0, 0 ; 0x0710
db 137, 76, 36, 16,199, 68, 36, 48, 3, 0, 0, 0,235, 47, 41,198 ; 0x0720
db 41,199,137,208,137,116, 36, 72,102,193,232, 5,199, 68, 36, 44 ; 0x0730
db 16, 0, 0, 0,102, 41,194,199, 68, 36, 48, 8, 0, 0, 0,102 ; 0x0740
db 137, 81, 2,129,193, 4, 2, 0, 0,137, 76, 36, 16,139, 76, 36 ; 0x0750
db 48,186, 1, 0, 0, 0,137, 76, 36, 40,141, 44, 18,139,116, 36 ; 0x0760
db 16, 1,238,129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36 ; 0x0770
db 76, 15,132,209, 2, 0, 0,193,100, 36, 72, 8, 15,182, 3,193 ; 0x0780
db 231, 8, 67, 9,199,139, 68, 36, 72,102,139, 22,193,232, 11, 15 ; 0x0790
db 183,202, 15,175,193, 57,199,115, 24,137, 68, 36, 72,184, 0, 8 ; 0x07a0
db 0, 0, 41,200,193,248, 5,141, 4, 2,137,234,102,137, 6,235 ; 0x07b0
db 21, 41, 68, 36, 72, 41,199,137,208,102,193,232, 5,102, 41,194 ; 0x07c0
db 102,137, 22,141, 85, 1,139,116, 36, 40, 78,137,116, 36, 40,117 ; 0x07d0
db 137,138, 76, 36, 48,184, 1, 0, 0, 0,211,224, 41,194, 3, 84 ; 0x07e0
db 36, 44,131,124, 36, 96, 3,137, 84, 36, 12, 15,143,231, 1, 0 ; 0x07f0
db 0,131, 68, 36, 96, 7,131,250, 3,137,208,126, 5,184, 3, 0 ; 0x0800
db 0, 0,139,116, 36,120,193,224, 7,199, 68, 36, 36, 6, 0, 0 ; 0x0810
db 0,141,132, 6, 96, 3, 0, 0,137, 68, 36, 8,184, 1, 0, 0 ; 0x0820
db 0,141, 44, 0,139,116, 36, 8, 1,238,129,124, 36, 72,255,255 ; 0x0830
db 255, 0,119, 24, 59, 92, 36, 76, 15,132, 10, 2, 0, 0,193,100 ; 0x0840
db 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72 ; 0x0850
db 102,139, 22,193,232, 11, 15,183,202, 15,175,193, 57,199,115, 24 ; 0x0860
db 137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,193,248, 5,141, 4 ; 0x0870
db 2,102,137, 6,137,232,235, 21, 41, 68, 36, 72, 41,199,137,208 ; 0x0880
db 102,193,232, 5,102, 41,194,141, 69, 1,102,137, 22,139,108, 36 ; 0x0890
db 36, 77,137,108, 36, 36,117,137,141, 80,192,131,250, 3,137, 20 ; 0x08a0
db 36, 15,142, 39, 1, 0, 0,137,208,137,214,209,248,131,230, 1 ; 0x08b0
db 141, 72,255,131,206, 2,131,250, 13,137, 76, 36, 32,127, 28,139 ; 0x08c0
db 108, 36,120,211,230, 1,210,137, 52, 36,141, 68,117, 0, 41,208 ; 0x08d0
db 5, 94, 5, 0, 0,137, 68, 36, 4,235, 86,141, 80,251,129,124 ; 0x08e0
db 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132, 86, 1 ; 0x08f0
db 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199 ; 0x0900
db 209,108, 36, 72, 1,246, 59,124, 36, 72,114, 7, 43,124, 36, 72 ; 0x0910
db 131,206, 1, 74,117,200,139, 68, 36,120,193,230, 4,137, 52, 36 ; 0x0920
db 5, 68, 6, 0, 0,199, 68, 36, 32, 4, 0, 0, 0,137, 68, 36 ; 0x0930
db 4,199, 68, 36, 28, 1, 0, 0, 0,184, 1, 0, 0, 0,139,108 ; 0x0940
db 36, 4, 1,192,137, 68, 36, 24, 1,197,129,124, 36, 72,255,255 ; 0x0950
db 255, 0,119, 24, 59, 92, 36, 76, 15,132,234, 0, 0, 0,193,100 ; 0x0960
db 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72 ; 0x0970
db 102,139, 85, 0,193,232, 11, 15,183,242, 15,175,198, 57,199,115 ; 0x0980
db 27,137, 68, 36, 72,184, 0, 8, 0, 0, 41,240,193,248, 5,141 ; 0x0990
db 4, 2,102,137, 69, 0,139, 68, 36, 24,235, 31, 41, 68, 36, 72 ; 0x09a0
db 41,199,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 24,102 ; 0x09b0
db 137, 85, 0,139, 84, 36, 28, 64, 9, 20, 36,139, 76, 36, 32,209 ; 0x09c0
db 100, 36, 28, 73,137, 76, 36, 32, 15,133,112,255,255,255,139, 52 ; 0x09d0
db 36, 70,137,116, 36, 92,116, 89,139, 76, 36, 12,139,108, 36,116 ; 0x09e0
db 131,193, 2, 57,108, 36, 92,119, 95,139,132, 36,160, 0, 0, 0 ; 0x09f0
db 137,234, 43, 68, 36, 92, 3,148, 36,160, 0, 0, 0,141, 52, 40 ; 0x0a00
db 138, 6, 70,136, 68, 36,115,136, 2, 66,255, 68, 36,116, 73,116 ; 0x0a10
db 15,139,172, 36,164, 0, 0, 0, 57,108, 36,116,114,226,235, 17 ; 0x0a20
db 139,132, 36,164, 0, 0, 0, 57, 68, 36,116, 15,130,187,246,255 ; 0x0a30
db 255,129,124, 36, 72,255,255,255, 0,119, 21, 59, 92, 36, 76,184 ; 0x0a40
db 1, 0, 0, 0,116, 41,235, 7,184, 1, 0, 0, 0,235, 32, 67 ; 0x0a50
db 43,156, 36,148, 0, 0, 0, 49,192,139,148, 36,156, 0, 0, 0 ; 0x0a60
db 139, 76, 36,116,137, 26,139,156, 36,168, 0, 0, 0,137, 11,131 ; 0x0a70
db 196,124, 91, 94, 95, 93 ; 0x0a80

View File

@ -1,169 +0,0 @@
db 85, 87, 86, 83,131,236,124,139,148, 36,144, 0, 0, 0,199, 68 ; 0x0000
db 36,116, 0, 0, 0, 0,198, 68, 36,115, 0,139,172, 36,156, 0 ; 0x0010
db 0, 0,141, 66, 4,137, 68, 36,120,184, 1, 0, 0, 0, 15,182 ; 0x0020
db 74, 2,137,195,211,227,137,217, 73,137, 76, 36,108, 15,182, 74 ; 0x0030
db 1,211,224, 72,137, 68, 36,104,139,132, 36,168, 0, 0, 0, 15 ; 0x0040
db 182, 50,199, 69, 0, 0, 0, 0, 0,199, 68, 36, 96, 0, 0, 0 ; 0x0050
db 0,199, 0, 0, 0, 0, 0,184, 0, 3, 0, 0,137,116, 36,100 ; 0x0060
db 199, 68, 36, 92, 1, 0, 0, 0,199, 68, 36, 88, 1, 0, 0, 0 ; 0x0070
db 199, 68, 36, 84, 1, 0, 0, 0,199, 68, 36, 80, 1, 0, 0, 0 ; 0x0080
db 15,182, 74, 1, 1,241,211,224,141,136, 54, 7, 0, 0, 57, 76 ; 0x0090
db 36,116,115, 14,139, 68, 36,120,102,199, 0, 0, 4,131,192, 2 ; 0x00a0
db 226,246,139,156, 36,148, 0, 0, 0, 49,255,199, 68, 36, 72,255 ; 0x00b0
db 255,255,255,137,218, 3,148, 36,152, 0, 0, 0,137, 84, 36, 76 ; 0x00c0
db 49,210, 59, 92, 36, 76, 15,132,124, 9, 0, 0, 15,182, 3,193 ; 0x00d0
db 231, 8, 66, 67, 9,199,131,250, 4,126,231,139,140, 36,164, 0 ; 0x00e0
db 0, 0, 57, 76, 36,116, 15,131,100, 9, 0, 0,139,116, 36,116 ; 0x00f0
db 35,116, 36,108,139, 68, 36, 96,139, 84, 36,120,193,224, 4,137 ; 0x0100
db 116, 36, 68, 1,240,129,124, 36, 72,255,255,255, 0,141, 44, 66 ; 0x0110
db 119, 24, 59, 92, 36, 76, 15,132, 44, 9, 0, 0,193,100, 36, 72 ; 0x0120
db 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72,102,139 ; 0x0130
db 85, 0,193,232, 11, 15,183,202, 15,175,193, 57,199, 15,131,221 ; 0x0140
db 1, 0, 0,137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,138, 76 ; 0x0150
db 36,100,193,248, 5,190, 1, 0, 0, 0,141, 4, 2, 15,182, 84 ; 0x0160
db 36,115,102,137, 69, 0,139, 68, 36,116, 35, 68, 36,104,139,108 ; 0x0170
db 36,120,211,224,185, 8, 0, 0, 0, 43, 76, 36,100,211,250, 1 ; 0x0180
db 208,105,192, 0, 6, 0, 0,131,124, 36, 96, 6,141,132, 5,108 ; 0x0190
db 14, 0, 0,137, 68, 36, 20, 15,142,202, 0, 0, 0,139, 68, 36 ; 0x01a0
db 116, 43, 68, 36, 92,139,148, 36,160, 0, 0, 0, 15,182, 4, 2 ; 0x01b0
db 137, 68, 36, 64,209,100, 36, 64,139, 76, 36, 64,141, 20, 54,139 ; 0x01c0
db 108, 36, 20,129,225, 0, 1, 0, 0,129,124, 36, 72,255,255,255 ; 0x01d0
db 0,141, 68, 77, 0,137, 76, 36, 60,141, 44, 16,119, 24, 59, 92 ; 0x01e0
db 36, 76, 15,132, 96, 8, 0, 0,193,100, 36, 72, 8, 15,182, 3 ; 0x01f0
db 193,231, 8, 67, 9,199,139, 68, 36, 72,102,139,141, 0, 2, 0 ; 0x0200
db 0,193,232, 11, 15,183,241, 15,175,198, 57,199,115, 35,137, 68 ; 0x0210
db 36, 72,184, 0, 8, 0, 0, 41,240,137,214,193,248, 5,131,124 ; 0x0220
db 36, 60, 0,141, 4, 1,102,137,133, 0, 2, 0, 0,116, 34,235 ; 0x0230
db 46, 41, 68, 36, 72, 41,199,137,200,141,114, 1,102,193,232, 5 ; 0x0240
db 102, 41,193,131,124, 36, 60, 0,102,137,141, 0, 2, 0, 0,116 ; 0x0250
db 14,129,254,255, 0, 0, 0, 15,142, 87,255,255,255,235,121,129 ; 0x0260
db 254,255, 0, 0, 0,127,113,141, 20, 54,139,108, 36, 20, 1,213 ; 0x0270
db 129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132 ; 0x0280
db 196, 7, 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67 ; 0x0290
db 9,199,139, 68, 36, 72,102,139, 77, 0,193,232, 11, 15,183,241 ; 0x02a0
db 15,175,198, 57,199,115, 25,137, 68, 36, 72,184, 0, 8, 0, 0 ; 0x02b0
db 41,240,137,214,193,248, 5,141, 4, 1,102,137, 69, 0,235,159 ; 0x02c0
db 41, 68, 36, 72, 41,199,137,200,141,114, 1,102,193,232, 5,102 ; 0x02d0
db 41,193,102,137, 77, 0,235,135,139, 84, 36,116,137,240,139,140 ; 0x02e0
db 36,160, 0, 0, 0,136, 68, 36,115,136, 4, 10, 66,131,124, 36 ; 0x02f0
db 96, 3,137, 84, 36,116,127, 13,199, 68, 36, 96, 0, 0, 0, 0 ; 0x0300
db 233, 27, 7, 0, 0,131,124, 36, 96, 9,127, 10,131,108, 36, 96 ; 0x0310
db 3,233, 10, 7, 0, 0,131,108, 36, 96, 6,233, 0, 7, 0, 0 ; 0x0320
db 139, 76, 36, 72, 41,199,139,116, 36, 96, 41,193,137,208,102,193 ; 0x0330
db 232, 5,102, 41,194,129,249,255,255,255, 0,102,137, 85, 0,139 ; 0x0340
db 108, 36,120,141,116,117, 0,137,116, 36, 56,119, 22, 59, 92, 36 ; 0x0350
db 76, 15,132,241, 6, 0, 0, 15,182, 3,193,231, 8,193,225, 8 ; 0x0360
db 67, 9,199,139,108, 36, 56,137,200,193,232, 11,102,139,149,128 ; 0x0370
db 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, 82,137,198,184 ; 0x0380
db 0, 8, 0, 0, 41,232,139,108, 36, 88,193,248, 5,139, 76, 36 ; 0x0390
db 84,141, 4, 2,139, 84, 36, 56,137, 76, 36, 80,139, 76, 36,120 ; 0x03a0
db 102,137,130,128, 1, 0, 0,139, 68, 36, 92,137,108, 36, 84,137 ; 0x03b0
db 68, 36, 88, 49,192,131,124, 36, 96, 6, 15,159,192,129,193,100 ; 0x03c0
db 6, 0, 0,141, 4, 64,137, 68, 36, 96,233,116, 2, 0, 0,137 ; 0x03d0
db 206, 41,199, 41,198,137,208,102,193,232, 5,139, 76, 36, 56,102 ; 0x03e0
db 41,194,129,254,255,255,255, 0,102,137,145,128, 1, 0, 0,119 ; 0x03f0
db 22, 59, 92, 36, 76, 15,132, 77, 6, 0, 0, 15,182, 3,193,231 ; 0x0400
db 8,193,230, 8, 67, 9,199,139,108, 36, 56,137,242,193,234, 11 ; 0x0410
db 102,139,141,152, 1, 0, 0, 15,183,193, 15,175,208, 57,215, 15 ; 0x0420
db 131,227, 0, 0, 0,189, 0, 8, 0, 0,137,214, 41,197,199, 68 ; 0x0430
db 36, 52, 0, 8, 0, 0,137,232,193,248, 5,141, 4, 1,139, 76 ; 0x0440
db 36, 56,102,137,129,152, 1, 0, 0,139, 68, 36, 96,139, 76, 36 ; 0x0450
db 68,193,224, 5, 3, 68, 36,120,129,250,255,255,255, 0,141, 44 ; 0x0460
db 72,119, 22, 59, 92, 36, 76, 15,132,219, 5, 0, 0, 15,182, 3 ; 0x0470
db 193,231, 8,193,230, 8, 67, 9,199,102,139,149,224, 1, 0, 0 ; 0x0480
db 137,240,193,232, 11, 15,183,202, 15,175,193, 57,199,115, 96, 41 ; 0x0490
db 76, 36, 52,193,124, 36, 52, 5,139,116, 36, 52,137, 68, 36, 72 ; 0x04a0
db 131,124, 36,116, 0,141, 4, 50,102,137,133,224, 1, 0, 0, 15 ; 0x04b0
db 132,147, 5, 0, 0, 49,192,131,124, 36, 96, 6,139,172, 36,160 ; 0x04c0
db 0, 0, 0,139, 84, 36,116, 15,159,192,141, 68, 0, 9,137, 68 ; 0x04d0
db 36, 96,139, 68, 36,116, 43, 68, 36, 92,138, 68, 5, 0,136, 68 ; 0x04e0
db 36,115,136, 4, 42, 66,137, 84, 36,116,233, 49, 5, 0, 0, 41 ; 0x04f0
db 198, 41,199,137,208,102,193,232, 5,102, 41,194,102,137,149,224 ; 0x0500
db 1, 0, 0,233, 31, 1, 0, 0,137,200, 41,214,102,193,232, 5 ; 0x0510
db 139,108, 36, 56,102, 41,193, 41,215,129,254,255,255,255, 0,102 ; 0x0520
db 137,141,152, 1, 0, 0,119, 22, 59, 92, 36, 76, 15,132, 22, 5 ; 0x0530
db 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199,139, 76 ; 0x0540
db 36, 56,137,240,193,232, 11,102,139,145,176, 1, 0, 0, 15,183 ; 0x0550
db 202, 15,175,193, 57,199,115, 35,137,198,184, 0, 8, 0, 0, 41 ; 0x0560
db 200,139,108, 36, 56,193,248, 5,141, 4, 2,102,137,133,176, 1 ; 0x0570
db 0, 0,139, 68, 36, 88,233,160, 0, 0, 0,137,241, 41,199, 41 ; 0x0580
db 193,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 56,129,249 ; 0x0590
db 255,255,255, 0,102,137,144,176, 1, 0, 0,119, 22, 59, 92, 36 ; 0x05a0
db 76, 15,132,161, 4, 0, 0, 15,182, 3,193,231, 8,193,225, 8 ; 0x05b0
db 67, 9,199,139,116, 36, 56,137,200,193,232, 11,102,139,150,200 ; 0x05c0
db 1, 0, 0, 15,183,234, 15,175,197, 57,199,115, 32,137,198,184 ; 0x05d0
db 0, 8, 0, 0, 41,232,139,108, 36, 56,193,248, 5,141, 4, 2 ; 0x05e0
db 102,137,133,200, 1, 0, 0,139, 68, 36, 84,235, 38,137,206, 41 ; 0x05f0
db 199, 41,198,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 56 ; 0x0600
db 102,137,144,200, 1, 0, 0,139, 84, 36, 84,139, 68, 36, 80,137 ; 0x0610
db 84, 36, 80,139, 76, 36, 88,137, 76, 36, 84,139,108, 36, 92,137 ; 0x0620
db 68, 36, 92,137,108, 36, 88, 49,192,131,124, 36, 96, 6,139, 76 ; 0x0630
db 36,120, 15,159,192,129,193,104, 10, 0, 0,141, 68, 64, 8,137 ; 0x0640
db 68, 36, 96,129,254,255,255,255, 0,119, 22, 59, 92, 36, 76, 15 ; 0x0650
db 132,243, 3, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9 ; 0x0660
db 199,102,139, 17,137,240,193,232, 11, 15,183,234, 15,175,197, 57 ; 0x0670
db 199,115, 47,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100 ; 0x0680
db 36, 68, 4,193,248, 5,199, 68, 36, 44, 0, 0, 0, 0,141, 4 ; 0x0690
db 2,102,137, 1,139, 68, 36, 68,141, 76, 1, 4,137, 76, 36, 16 ; 0x06a0
db 235,114, 41,198, 41,199,137,208,102,193,232, 5,102, 41,194,129 ; 0x06b0
db 254,255,255,255, 0,102,137, 17,119, 22, 59, 92, 36, 76, 15,132 ; 0x06c0
db 132, 3, 0, 0, 15,182, 3,193,231, 8,193,230, 8, 67, 9,199 ; 0x06d0
db 102,139, 81, 2,137,240,193,232, 11, 15,183,234, 15,175,197, 57 ; 0x06e0
db 199,115, 59,137, 68, 36, 72,184, 0, 8, 0, 0, 41,232,193,100 ; 0x06f0
db 36, 68, 4,193,248, 5,199, 68, 36, 44, 8, 0, 0, 0,141, 4 ; 0x0700
db 2,139, 84, 36, 68,102,137, 65, 2,141,140, 17, 4, 1, 0, 0 ; 0x0710
db 137, 76, 36, 16,199, 68, 36, 48, 3, 0, 0, 0,235, 47, 41,198 ; 0x0720
db 41,199,137,208,137,116, 36, 72,102,193,232, 5,199, 68, 36, 44 ; 0x0730
db 16, 0, 0, 0,102, 41,194,199, 68, 36, 48, 8, 0, 0, 0,102 ; 0x0740
db 137, 81, 2,129,193, 4, 2, 0, 0,137, 76, 36, 16,139, 76, 36 ; 0x0750
db 48,186, 1, 0, 0, 0,137, 76, 36, 40,141, 44, 18,139,116, 36 ; 0x0760
db 16, 1,238,129,124, 36, 72,255,255,255, 0,119, 24, 59, 92, 36 ; 0x0770
db 76, 15,132,209, 2, 0, 0,193,100, 36, 72, 8, 15,182, 3,193 ; 0x0780
db 231, 8, 67, 9,199,139, 68, 36, 72,102,139, 22,193,232, 11, 15 ; 0x0790
db 183,202, 15,175,193, 57,199,115, 24,137, 68, 36, 72,184, 0, 8 ; 0x07a0
db 0, 0, 41,200,193,248, 5,141, 4, 2,137,234,102,137, 6,235 ; 0x07b0
db 21, 41, 68, 36, 72, 41,199,137,208,102,193,232, 5,102, 41,194 ; 0x07c0
db 102,137, 22,141, 85, 1,139,116, 36, 40, 78,137,116, 36, 40,117 ; 0x07d0
db 137,138, 76, 36, 48,184, 1, 0, 0, 0,211,224, 41,194, 3, 84 ; 0x07e0
db 36, 44,131,124, 36, 96, 3,137, 84, 36, 12, 15,143,231, 1, 0 ; 0x07f0
db 0,131, 68, 36, 96, 7,131,250, 3,137,208,126, 5,184, 3, 0 ; 0x0800
db 0, 0,139,116, 36,120,193,224, 7,199, 68, 36, 36, 6, 0, 0 ; 0x0810
db 0,141,132, 6, 96, 3, 0, 0,137, 68, 36, 8,184, 1, 0, 0 ; 0x0820
db 0,141, 44, 0,139,116, 36, 8, 1,238,129,124, 36, 72,255,255 ; 0x0830
db 255, 0,119, 24, 59, 92, 36, 76, 15,132, 10, 2, 0, 0,193,100 ; 0x0840
db 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72 ; 0x0850
db 102,139, 22,193,232, 11, 15,183,202, 15,175,193, 57,199,115, 24 ; 0x0860
db 137, 68, 36, 72,184, 0, 8, 0, 0, 41,200,193,248, 5,141, 4 ; 0x0870
db 2,102,137, 6,137,232,235, 21, 41, 68, 36, 72, 41,199,137,208 ; 0x0880
db 102,193,232, 5,102, 41,194,141, 69, 1,102,137, 22,139,108, 36 ; 0x0890
db 36, 77,137,108, 36, 36,117,137,141, 80,192,131,250, 3,137, 20 ; 0x08a0
db 36, 15,142, 39, 1, 0, 0,137,208,137,214,209,248,131,230, 1 ; 0x08b0
db 141, 72,255,131,206, 2,131,250, 13,137, 76, 36, 32,127, 28,139 ; 0x08c0
db 108, 36,120,211,230, 1,210,137, 52, 36,141, 68,117, 0, 41,208 ; 0x08d0
db 5, 94, 5, 0, 0,137, 68, 36, 4,235, 86,141, 80,251,129,124 ; 0x08e0
db 36, 72,255,255,255, 0,119, 24, 59, 92, 36, 76, 15,132, 86, 1 ; 0x08f0
db 0, 0,193,100, 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199 ; 0x0900
db 209,108, 36, 72, 1,246, 59,124, 36, 72,114, 7, 43,124, 36, 72 ; 0x0910
db 131,206, 1, 74,117,200,139, 68, 36,120,193,230, 4,137, 52, 36 ; 0x0920
db 5, 68, 6, 0, 0,199, 68, 36, 32, 4, 0, 0, 0,137, 68, 36 ; 0x0930
db 4,199, 68, 36, 28, 1, 0, 0, 0,184, 1, 0, 0, 0,139,108 ; 0x0940
db 36, 4, 1,192,137, 68, 36, 24, 1,197,129,124, 36, 72,255,255 ; 0x0950
db 255, 0,119, 24, 59, 92, 36, 76, 15,132,234, 0, 0, 0,193,100 ; 0x0960
db 36, 72, 8, 15,182, 3,193,231, 8, 67, 9,199,139, 68, 36, 72 ; 0x0970
db 102,139, 85, 0,193,232, 11, 15,183,242, 15,175,198, 57,199,115 ; 0x0980
db 27,137, 68, 36, 72,184, 0, 8, 0, 0, 41,240,193,248, 5,141 ; 0x0990
db 4, 2,102,137, 69, 0,139, 68, 36, 24,235, 31, 41, 68, 36, 72 ; 0x09a0
db 41,199,137,208,102,193,232, 5,102, 41,194,139, 68, 36, 24,102 ; 0x09b0
db 137, 85, 0,139, 84, 36, 28, 64, 9, 20, 36,139, 76, 36, 32,209 ; 0x09c0
db 100, 36, 28, 73,137, 76, 36, 32, 15,133,112,255,255,255,139, 52 ; 0x09d0
db 36, 70,137,116, 36, 92,116, 89,139, 76, 36, 12,139,108, 36,116 ; 0x09e0
db 131,193, 2, 57,108, 36, 92,119, 95,139,132, 36,160, 0, 0, 0 ; 0x09f0
db 137,234, 43, 68, 36, 92, 3,148, 36,160, 0, 0, 0,141, 52, 40 ; 0x0a00
db 138, 6, 70,136, 68, 36,115,136, 2, 66,255, 68, 36,116, 73,116 ; 0x0a10
db 15,139,172, 36,164, 0, 0, 0, 57,108, 36,116,114,226,235, 17 ; 0x0a20
db 139,132, 36,164, 0, 0, 0, 57, 68, 36,116, 15,130,187,246,255 ; 0x0a30
db 255,129,124, 36, 72,255,255,255, 0,119, 21, 59, 92, 36, 76,184 ; 0x0a40
db 1, 0, 0, 0,116, 41,235, 7,184, 1, 0, 0, 0,235, 32, 67 ; 0x0a50
db 43,156, 36,148, 0, 0, 0, 49,192,139,148, 36,156, 0, 0, 0 ; 0x0a60
db 139, 76, 36,116,137, 26,139,156, 36,168, 0, 0, 0,137, 11,131 ; 0x0a70
db 196,124, 91, 94, 95, 93 ; 0x0a80

View File

@ -1,520 +0,0 @@
; macros.ash --
;
; This file is part of the UPX executable compressor.
;
; Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
; Copyright (C) 1996-2006 Laszlo Molnar
; 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>
;
;; =============
;; ============= 32-BIT CALLTRICK & JUMPTRICK
;; =============
;; call & jump trick : 2 in 1
%macro cjt32 1
%ifdef __CALLTR00__
mov ecx, 'TEXL'
calltrickloop:
mov al, [edi]
inc edi
sub al, 0xE8
ct1:
cmp al, 1
ja calltrickloop
%ifdef __CTCLEVE1__
cmp byte [edi], '?'
jnz calltrickloop
%endif; __CALLTR01__
mov eax, [edi]
mov bl, [edi + 4]
%ifdef __CTDUMMY1__
%ifdef __CTBSHR01__
shr ax, 8
%else; __CTBROR01__
xchg al, ah
%endif; __CTBSWA01__
rol eax, 16
xchg al, ah
%endif; __CALLTR02__
sub eax, edi
sub bl, 0xE8
%ifnidn %1,0
add eax, %1
%endif
mov [edi], eax
add edi, byte 5
mov al, bl
loop ct1
%else; __CALLTR10__
;; 32-bit call XOR jump trick
mov ecx, 'TEXL'
ctloop1:
%ifdef __CALLTRE8__
mov al,0xE8
%else; __CALLTRE9__
mov al,0xE9
%endif; __CALLTR11__
ctloop2:
repnz
scasb
jnz ctend
%ifdef __CTCLEVE2__
cmp byte [edi], '?'
jnz ctloop2
%endif; __CALLTR12__
mov eax, [edi]
%ifdef __CTDUMMY2__
%ifdef __CTBSHR11__
shr ax, 8
%else; __CTBROR11__
xchg al, ah
%endif; __CTBSWA11__
rol eax, 16
xchg al, ah
%endif; __CALLTR13__
sub eax, edi
%ifnidn %1,0
add eax, %1
%endif
stosd
jmps ctloop1
ctend:
%endif; __CTTHEEND__
%endmacro
;; call/jump/jcc trick; also used more than once (and/or optionally), so
;; ecx has byte count (not count of applied instances), and
;; edi points to buffer.
%macro ckt32 2
; 1st param: effective addvalue (typically 0 or edi; any rvalue)
; 2nd param: where is cto8 (dl, bl, or literal)
;__CKLLTR00__
%ifnidn %1,0
mov esi, %1
%endif
jmps ckstart
ckloop3:
mov al, [edi]
add edi, byte 1
;__CKLLTR10__ Jcc only
cmp al, 0x80 ; lo of 6-byte Jcc
jb ckloop2
cmp al, 0x8f ; hi of 6-byte Jcc
ja ckloop2
cmp byte [edi -2], 0x0F ; prefix of 6-byte Jcc
je ckmark
ckloop2:
;__CKLLTR20__
sub al, 0xE8
cmp al, 0xE9 - 0xE8
ja ckcount
ckmark:
cmp byte [edi], %2 ; cto8
jnz ckcount
mov eax, [edi]
shr ax, 8
rol eax, 16
xchg al, ah
; above 3 instr are equivalent to the following 2 instr:
; mov al, 0 ; clear cto8 [setup partial-write stall]
; bswap eax ; not on 386: need 486 and up
sub eax, edi
%ifnidn %1,0
add eax, esi
%endif
mov [edi], eax
add edi, byte 4
ckstart:
sub ecx, byte 4
;__CKLLTR30__ Jcc only
mov al, [edi]
add edi, byte 1
loop ckloop2 ; prefix cannot overlap previous displacement
;__CKLLTR40__
ckcount:
sub ecx, byte 1
jg ckloop3
ckend:
%endmacro
;; =============
;; ============= 32-BIT RELOCATIONS
;; =============
%macro reloc32 3
; __RELOC320__
reloc_main:
xor eax, eax
mov al, [%1]
inc %1
or eax, eax
jz reloc_endx
cmp al, 0xEF
ja reloc_fx
reloc_add:
add %2, eax
%if 1
mov eax, [%2]
xchg al, ah
rol eax, 16
xchg al, ah
add eax, %3
mov [%2], eax
%else
add [%2], %3
%endif
jmps reloc_main
reloc_fx:
and al, 0x0F
shl eax, 16
mov ax, [%1]
add %1, byte 2
%ifdef __REL32BIG__
or eax, eax
jnz reloc_add
mov eax, [%1]
add %1, byte 4
%endif; __RELOC32J__
jmps reloc_add
reloc_endx:
; __REL32END__
%endmacro
;; =============
;; ============= 32-BIT CALL TRICK UNFILTER WITH MostRecentlyUsed BUFFER
;; =============
;;;; names of pseudo-sections for addLoader:
;; LXUNFnnn Linux unfilter
;; LXMRUnnn MostRecentlyUsed recoding of destinations
;; MRUARBnn arbitrary number of entries in wheel
;; MRUBITSn power of 2 entries in wheel (smaller code)
;; MRUBYTEn 256 entries in wheel (smallest code)
%macro ctojr32 0
%push ctojr32
;; I got confused by the syntactic sugar of the fake %ifdefs.
;; I can read the section name more easily when it is at the left margin.
;; Also, some of the logic to select the sections is not that simple,
;; and any mismatch between the logic and the %ifdefs is very confusing.
;; Instead, I use comments after the section name, and blank lines for grouping.
;__LXUNF000__ enter at +0 for decompression; +2 for unfiltering
jmps decompr0
;__LXUNF002__
;; 2+ address of decompress subroutine
;; unfilter(upx_byte *, length, cto8)
lxunfilter:
pop edx ; return address
pop eax ; upx_byte *, same as addvalue
pop ecx ; length
xchg eax, edi ; edi= pointer; eax= saved_edi
pusha ; save C-convention ebx, ebp, esi, edi; also eax, edx
; at most one of the next 2
;__MRUBYTE0__ 256==n_mru
xor ebx, ebx ; zero
;__LXMRU005__ 0!=n_mru
mov ebx, 'NMRU' ; modified N_MRU or N_MRU -1
;__LXMRU006__ 0!=n_mru
push byte 0x0f ; prefix of 6-byte Jcc <d32>
pop eax
mov ah, [esp + 8*4] ; cto8
;__LXMRU007__ 0==n_mru
push byte 0x0f ; prefix of 6-byte Jcc <d32>
pop ebx
mov bh, [esp + 8*4] ; cto8
;__LXUNF008__
mov dl, [esp + 8*4] ; cto8
;__LXUNF010__
jmpn lxunf0
decompr0:
;; These %define are only if 0!=n_mru;
;; else 0x0F==bl && cto8==bh==dh && 0xE8==dl && addvalue==esi .
%define %$n_mru [esi]
%define %$n_mru1 [esi]
%define %$tail [esi + 4*1]
%define %$cto8_e8e9 [esi + 4*2]
%define %$cto8_0f [esi + 4*3]
%define %$addvalue [esi + 4*4]
%define %$tmp ebp
%define %$hand ebx
%define %$hand_l bl
%define %$kh edx
%define %$kh_l dl
;__LXJCC010__
lxunf2: ; have seen 0x80..0x8f of possible recoded 6-byte Jcc <d32>
movzx ebp, word [edi] ; 2 bytes, zero-extended
;__LXMRU045__ 0!=n_mru
sub ebp, %$cto8_0f
;__LXMRU046__ 0==n_mru
sub ebp, ebx
;__LXJCC020__ 0==n_mru, or Jcc excluded ('sub' of equals clears Carry)
jne unfcount
;__LXJCC021__ 0!=n_mru and Jcc participates; must set Carry
sub ebp, byte 1 ; set Carry iff in range
jnb unfcount
;__LXJCC023__ found Jcc; re-swap 0x8Y opcode and 0x0f prefix
mov byte [edi -1], bl ; 0x0f prefix
dec ecx ; preserve Carry
mov byte [edi], al ; Jcc opcode
inc edi ; preserve Carry
;__LXUNF037__
%define %$jc eax
lxunf: ; in: Carry set iff we should apply mru and 0!=n_mru
mov eax, [edi] ; BE32 displacement with cto8 in low 8 bits
;__LXUNF386__ 0!=n_mru && 386
pushf
;__LXUNF387__ ==386
shr ax, 8
rol eax, 16
xchg al, ah
;__LXUNF388__ 0!=n_mru && 386
popf
jnc unf_store ; do not apply mru
;__LXUNF486__ >=486
mov al, byte 0
CPU 486
bswap eax ; preserve Carry (2-byte instruction)
CPU 386
;__LXUNF487__ 0!=n_mru && >=486
jnc unf_store ; do not apply mru
;__LXMRU065__ 0!=n_mru
shr %$jc, 1 ; eax= jc, or mru index
jnc mru4 ; not 1st time for this jc
;__MRUBYTE3__
dec %$hand_l
;__MRUARB30__
dec %$hand
;__MRUBITS3__
and %$hand, %$n_mru1
;__MRUARB40__
jge mru3
add %$hand, %$n_mru
mru3:
;__LXMRU070__
mov [esp + 4*%$hand], %$jc ; 1st time: mru[hand] = jc
jmps unf_store
mru4: ; not 1st time for this jc
lea %$kh, [%$jc + %$hand] ; kh = jc + hand
;__MRUBYTE4__
movzx %$kh, %$kh_l
;__MRUBITS4__
and %$kh, %$n_mru1
;__MRUARB50__
cmp %$kh, %$n_mru
jb mru5
sub %$kh, %$n_mru
mru5:
;__LXMRU080__
mov %$jc, [esp + 4*%$kh] ; jc = mru[kh]
;__MRUBYTE5__
dec %$hand_l
;__MRUARB60__
dec %$hand
;__MRUBITS5__
and %$hand, %$n_mru1
;__MRUARB70__
jge mru6
add %$hand, %$n_mru
mru6:
;__LXMRU090__
mov %$tmp, [esp + 4*%$hand] ; tmp = mru[hand]
test %$tmp,%$tmp
jnz mru8
push %$jc ; ran out of registers
mov eax, %$tail
;__MRUBYTE6__
dec al
;__MRUARB80__
dec eax
;__MRUBITS6__
and eax, %$n_mru1
;__MRUARB90__
jge mru7
add eax, %$n_mru
mru7:
;__LXMRU100__
xor %$tmp,%$tmp
mov %$tail, eax
xchg [4+ esp + 4*eax], %$tmp ; tmp = mru[tail]; mru[tail] = 0
pop %$jc
mru8:
mov [esp + 4*%$kh ], %$tmp ; mru[kh] = tmp
mov [esp + 4*%$hand], %$jc ; mru[hand] = jc
;__LXUNF040__
unf_store:
sub eax, edi
sub ecx, byte 4
; one of the next2
;__LXMRU110__ 0!=n_mru
add eax, %$addvalue
;__LXMRU111__ 0==n_mru
add eax, esi ; addvalue (same as initial pointer)
;__LXUNF041__
mov [edi], eax
add edi, byte 4
jmps unfcount
;__LXUNF042__
lxunf0: ;; continuation of entry prolog for unfilter
;__LEXEC016__ bug in APP: jmp and label must be in same .asx/.asy
jmp lxunf0 ; this instr does not really go here!
;__LXMRU010__ 0!=n_mru
push eax ; cto8_0f
;__LXJMPA00__ only JMP, and not CALL, is filtered
mov al, 0xE9
;__LXCALLB0__ only CALL, or both CALL and JMP are filtered
mov al, 0xE8
;__LXUNF021__ common tail
push eax ; cto8_e8e9
push byte 0 ; tail
push ebx ; n_mru or n_mru1
mov esi, esp ; flat model "[esi]" saves a byte over "[ebp]"
;__LXMRU022__ 0==n_mru
pop esi ; addvalue
mov edx, ebx ; dh= cto8
;__LXJMPA01__ only JMP, and not CALL, is filtered
mov dl, 0xE9
;__LXCALLB1__ only CALL, or both CALL and JMP are filtered
mov dl, 0xE8
;__MRUBITS1__
inc %$hand ; n_mru1 ==> n_mru
;__LXMRU030__
lxunf1: ; allocate and clear mru[]
push byte 0
; one of the next 2, if n_mru
;__MRUBYTE1__
dec %$hand_l
;__MRUARB10__
dec %$hand
;__LXMRU040__ 0!=n_mru
jnz lxunf1 ; leaves 0=='hand'
;__LXUNF030__
lxctloop:
movzx eax, word [edi] ; 2 bytes, zero extended
add edi, byte 1
;__LXJCC000__
cmp al, 0x80 ; lo of Jcc <d32>
jb lxct1
cmp al, 0x8f ; hi of Jcc <d32>
jbe lxunf2
lxct1:
;__LXCJ0MRU__ 0==n_mru
sub eax, edx
;__LXCJ1MRU__ 0!=n_mru
sub eax, %$cto8_e8e9
; both CALL and JMP are filtered
;__LXCALJMP__
sub eax, byte 1+ (0xE9 - 0xE8) ; set Carry iff in range (result: -2, -1)
; only CALL, or only JMP, is filtered
;__LXCALL00__ 0==n_mru
je lxunf
;__LXCALL01__ 0!=n_rmu
sub eax, byte 1 ; set Carry iff in range
;__LXCJ2MRU__ 0==n_mru, or apply mru to all that are filtered here
jb lxunf ; only Carry (Borrow) matters
;__LXCJ4MRU__ 0!=n_mru, but apply mru only to subset of filtered here
jnb unfcount ; was not filtered anyway: do not unfilter
;we will unfilter, and 0!=n_mru, but should we apply mru?
;__LXCJ6MRU__ apply mru to JMP only (0xFF==al)
jpe lxct3 ; jump if even number of 1 bits in al
;__LXCJ7MRU__ apply mru to CALL only (0xFE==al)
jpo lxct3 ; jump if odd number of 1 bits in al
;__LXCJ8MRU__ do not apply mru to one or both
clc
lxct3:
jmps lxunf
;__LXUNF034__
unfcount:
sub ecx, byte 1
jg lxctloop
;__LXMRU055__
mov edi, esp ; clear mru[] portion of stack
;__MRUBYTE2__
mov ecx, 4+ 256 ; unused, tail, cto8_e8e9, cto8_0f
;__MRUBITS2__
mov ecx, %$n_mru1
add ecx, byte 1+ 4 ; n_mru1, tail, cto8_e8e9, cto8_0f
;__MRUARB20__
mov ecx, %$n_mru
add ecx, byte 4 ; n_mru, tail, cto8_e8e9, cto8_0f
;__LXMRU057__
xor eax, eax
rep
stosd
mov esp, edi
;__LXMRU058__ 0==n_mru
push esi
;__LXUNF035__
popa
xchg eax, edi
push ecx
push eax
push edx
ret
%pop
%endmacro
; vi:ts=8:et:nowrap

View File

@ -1,198 +0,0 @@
; n2b_d32.ash -- ucl_nrv2b_decompress_le32 in 32-bit assembly
;
; This file is part of the UCL data compression library.
;
; Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
; All Rights Reserved.
;
; The UCL library is free software; you can redistribute it and/or
; modify it 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.
;
; The UCL library 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 the UCL library; 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
; <markus@oberhumer.com>
; http://www.oberhumer.com/opensource/ucl/
;
; ------------- DECOMPRESSION -------------
; Input:
; esi - source
; edi - dest
; ebp - -1
; cld
; Output:
; eax - 0
; ecx - 0
%ifndef jmps
%define jmps jmp short
%endif
%ifndef jmpn
%define jmpn jmp near
%endif
CPU 386
%macro getbit_n2b 1
%if %1==1
add ebx, ebx
jnz %%gotbit
%endif
mov ebx, [esi]
sub esi, byte -4
adc ebx, ebx
%%gotbit:
%endmacro
%undef getbit
%define getbit getbit_n2b
%ifdef __N2BSMA10__
jmps dcl1_n2b
decompr_literals_n2b:
movsb
%else; __N2BFAS10__
jmps dcl1_n2b
align 8
; __N2BFAS11__
decompr_literalb_n2b:
mov al, [esi]
inc esi
mov [edi], al
inc edi
%endif; __N2BDEC10__
decompr_loop_n2b:
add ebx, ebx
jnz dcl2_n2b
dcl1_n2b:
getbit 32
dcl2_n2b:
%ifdef __N2BSMA20__
jc decompr_literals_n2b
xor eax, eax
inc eax
%else; __N2BFAS20__
%ifndef UPX102
mov al, [edi] ;; force data cache allocate (PentiumPlain or MMX)
%endif
jc decompr_literalb_n2b
mov eax, 1
%endif; __N2BDEC20__
loop1_n2b:
getbit 1
adc eax, eax
%ifdef __N2BSMA30__
getbit 1
jnc loop1_n2b
%else; __N2BFAS30__
add ebx, ebx
jnc loop1_n2b
jnz loopend1_n2b
getbit 32
jnc loop1_n2b
loopend1_n2b:
%endif; __N2BDEC30__
xor ecx, ecx
sub eax, byte 3
jb decompr_ebpeax_n2b
shl eax, 8
mov al, [esi]
inc esi
xor eax, byte -1
jz decompr_end_n2b
mov ebp, eax
decompr_ebpeax_n2b:
getbit 1
adc ecx, ecx
getbit 1
adc ecx, ecx
jnz decompr_got_mlen_n2b
inc ecx
loop2_n2b:
getbit 1
adc ecx, ecx
%ifdef __N2BSMA40__
getbit 1
jnc loop2_n2b
%else; __N2BFAS40__
add ebx, ebx
jnc loop2_n2b
jnz loopend2_n2b
getbit 32
jnc loop2_n2b
loopend2_n2b:
%endif; __N2BDUMM1__
%ifdef __N2BSMA50__
inc ecx
inc ecx
%else; __N2BFAS50__
add ecx, byte 2
%endif; __N2BDEC50__
decompr_got_mlen_n2b:
cmp ebp, -0xd00
adc ecx, byte 1
%ifdef __N2BSMA60__
%ifndef UPX102
push esi
%else
mov edx, esi
%endif
lea esi, [edi+ebp]
rep
movsb
%ifndef UPX102
pop esi
%else
mov esi, edx
%endif
jmpn decompr_loop_n2b
%else; __N2BFAS60__
lea edx, [edi+ebp]
cmp ebp, byte -4
%ifndef UPX102
mov al, [edi+ecx] ;; force data cache allocate (PentiumPlain or MMX)
%endif
jbe decompr_copy4_n2b
loop3_n2b:
mov al, [edx]
inc edx
mov [edi], al
inc edi
dec ecx
jnz loop3_n2b
jmpn decompr_loop_n2b
; __N2BFAS61__
align 4
decompr_copy4_n2b:
mov eax, [edx]
add edx, byte 4
mov [edi], eax
add edi, byte 4
sub ecx, byte 4
ja decompr_copy4_n2b
add edi, ecx
jmpn decompr_loop_n2b
%endif; __N2BDEC60__
decompr_end_n2b:
; __NRV2BEND__
; vi:ts=8:et

View File

@ -1,206 +0,0 @@
; n2d_d32.ash -- ucl_nrv2d_decompress_le32 in 32-bit assembly
;
; This file is part of the UCL data compression library.
;
; Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
; All Rights Reserved.
;
; The UCL library is free software; you can redistribute it and/or
; modify it 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.
;
; The UCL library 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 the UCL library; 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
; <markus@oberhumer.com>
; http://www.oberhumer.com/opensource/ucl/
;
; ------------- DECOMPRESSION -------------
; Input:
; esi - source
; edi - dest
; ebp - -1
; cld
; Output:
; eax - 0
; ecx - 0
%ifndef jmps
%define jmps jmp short
%endif
%ifndef jmpn
%define jmpn jmp near
%endif
CPU 386
%macro getbit_n2d 1
%if %1==1
add ebx, ebx
jnz %%gotbit
%endif
mov ebx, [esi]
sub esi, byte -4
adc ebx, ebx
%%gotbit:
%endmacro
%undef getbit
%define getbit getbit_n2d
%ifdef __N2DSMA10__
jmps dcl1_n2d
decompr_literals_n2d:
movsb
%else; __N2DFAS10__
jmps dcl1_n2d
align 8
; __N2DFAS11__
decompr_literalb_n2d:
mov al, [esi]
inc esi
mov [edi], al
inc edi
%endif; __N2DDEC10__
decompr_loop_n2d:
add ebx, ebx
jnz dcl2_n2d
dcl1_n2d:
getbit 32
dcl2_n2d:
%ifdef __N2DSMA20__
jc decompr_literals_n2d
xor eax, eax
inc eax
%else; __N2DFAS20__
%ifndef UPX102
mov al, [edi] ;; force data cache allocate (PentiumPlain or MMX)
%endif
jc decompr_literalb_n2d
mov eax, 1
%endif; __N2DDEC20__
loop1_n2d:
getbit 1
adc eax, eax
%ifdef __N2DSMA30__
getbit 1
jc loopend1_n2d
%else; __N2DFAS30__
add ebx, ebx
jnc loopcontinue1_n2d
jnz loopend1_n2d
getbit 32
jc loopend1_n2d
loopcontinue1_n2d:
%endif; __N2DDEC30__
dec eax
getbit 1
adc eax, eax
jmps loop1_n2d
loopend1_n2d:
xor ecx, ecx
sub eax, byte 3
jb decompr_prev_dist_n2d
shl eax, 8
mov al, [esi]
inc esi
xor eax, byte -1
jz decompr_end_n2d
sar eax, 1 ; shift low-bit into carry
mov ebp, eax
jmps decompr_ebpeax_n2d
decompr_prev_dist_n2d:
getbit 1
decompr_ebpeax_n2d:
adc ecx, ecx
getbit 1
adc ecx, ecx
jnz decompr_got_mlen_n2d
inc ecx
loop2_n2d:
getbit 1
adc ecx, ecx
%ifdef __N2DSMA40__
getbit 1
jnc loop2_n2d
%else; __N2DFAS40__
add ebx, ebx
jnc loop2_n2d
jnz loopend2_n2d
getbit 32
jnc loop2_n2d
loopend2_n2d:
%endif; __N2DDUMM1__
%ifdef __N2DSMA50__
inc ecx
inc ecx
%else; __N2DFAS50__
add ecx, byte 2
%endif; __N2DDEC50__
decompr_got_mlen_n2d:
cmp ebp, -0x500
adc ecx, byte 1
%ifdef __N2DSMA60__
%ifndef UPX102
push esi
%else
mov edx, esi
%endif
lea esi, [edi+ebp]
rep
movsb
%ifndef UPX102
pop esi
%else
mov esi, edx
%endif
jmpn decompr_loop_n2d
%else; __N2DFAS60__
lea edx, [edi+ebp]
cmp ebp, byte -4
%ifndef UPX102
mov al, [edi+ecx] ;; force data cache allocate (PentiumPlain or MMX)
%endif
jbe decompr_copy4_n2d
loop3_n2d:
mov al, [edx]
inc edx
mov [edi], al
inc edi
dec ecx
jnz loop3_n2d
jmpn decompr_loop_n2d
; __N2DFAS61__
align 4
decompr_copy4_n2d:
mov eax, [edx]
add edx, byte 4
mov [edi], eax
add edi, byte 4
sub ecx, byte 4
ja decompr_copy4_n2d
add edi, ecx
jmpn decompr_loop_n2d
%endif; __N2DDEC60__
decompr_end_n2d:
; __NRV2DEND__
; vi:ts=8:et

View File

@ -1,211 +0,0 @@
; n2e_d32.ash -- ucl_nrv2e_decompress_le32 in 32-bit assembly
;
; This file is part of the UCL data compression library.
;
; Copyright (C) 1996-2006 Markus Franz Xaver Johannes Oberhumer
; All Rights Reserved.
;
; The UCL library is free software; you can redistribute it and/or
; modify it 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.
;
; The UCL library 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 the UCL library; 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
; <markus@oberhumer.com>
; http://www.oberhumer.com/opensource/ucl/
;
; ------------- DECOMPRESSION -------------
; Input:
; esi - source
; edi - dest
; ebp - -1
; cld
; Output:
; eax - 0
; ecx - 0
%ifndef jmps
%define jmps jmp short
%endif
%ifndef jmpn
%define jmpn jmp near
%endif
CPU 386
%macro getbit_n2e 1
%if %1==1
add ebx, ebx
jnz %%gotbit
%endif
mov ebx, [esi]
sub esi, byte -4
adc ebx, ebx
%%gotbit:
%endmacro
%undef getbit
%define getbit getbit_n2e
%ifdef __N2ESMA10__
jmps dcl1_n2e
decompr_literals_n2e:
movsb
%else; __N2EFAS10__
jmps dcl1_n2e
align 8
; __N2EFAS11__
decompr_literalb_n2e:
mov al, [esi]
inc esi
mov [edi], al
inc edi
%endif; __N2EDEC10__
decompr_loop_n2e:
add ebx, ebx
jnz dcl2_n2e
dcl1_n2e:
getbit 32
dcl2_n2e:
%ifdef __N2ESMA20__
jc decompr_literals_n2e
xor eax, eax
inc eax
%else; __N2EFAS20__
%ifndef UPX102
mov al, [edi] ;; force data cache allocate (PentiumPlain or MMX)
%endif
jc decompr_literalb_n2e
mov eax, 1
%endif; __N2EDEC20__
loop1_n2e:
getbit 1
adc eax, eax
%ifdef __N2ESMA30__
getbit 1
jc loopend1_n2e
%else; __N2EFAS30__
add ebx, ebx
jnc loopcontinue1_n2e
jnz loopend1_n2e
getbit 32
jc loopend1_n2e
loopcontinue1_n2e:
%endif; __N2EDEC30__
dec eax
getbit 1
adc eax, eax
jmps loop1_n2e
decompr_mlen1_n2e:
getbit 1
adc ecx, ecx
jmps decompr_got_mlen_n2e
loopend1_n2e:
xor ecx, ecx
sub eax, byte 3
jb decompr_prev_dist_n2e
shl eax, 8
mov al, [esi]
inc esi
xor eax, byte -1
jz decompr_end_n2e
sar eax, 1 ; shift low-bit into carry
mov ebp, eax
jmps decompr_ebpeax_n2e
decompr_prev_dist_n2e:
getbit 1
decompr_ebpeax_n2e:
jc decompr_mlen1_n2e
inc ecx
getbit 1
jc decompr_mlen1_n2e
loop2_n2e:
getbit 1
adc ecx, ecx
%ifdef __N2ESMA40__
getbit 1
jnc loop2_n2e
%else; __N2EFAS40__
add ebx, ebx
jnc loop2_n2e
jnz loopend2_n2e
getbit 32
jnc loop2_n2e
loopend2_n2e:
%endif; __N2EDUMM1__
%ifdef __N2ESMA50__
inc ecx
inc ecx
%else; __N2EFAS50__
add ecx, byte 2
%endif; __N2EDEC50__
decompr_got_mlen_n2e:
cmp ebp, -0x500
adc ecx, byte 2
%ifdef __N2ESMA60__
%ifndef UPX102
push esi
%else
mov edx, esi
%endif
lea esi, [edi+ebp]
rep
movsb
%ifndef UPX102
pop esi
%else
mov esi, edx
%endif
jmpn decompr_loop_n2e
%else; __N2EFAS60__
lea edx, [edi+ebp]
cmp ebp, byte -4
%ifndef UPX102
mov al, [edi+ecx] ;; force data cache allocate (PentiumPlain or MMX)
%endif
jbe decompr_copy4_n2e
loop3_n2e:
mov al, [edx]
inc edx
mov [edi], al
inc edi
dec ecx
jnz loop3_n2e
jmpn decompr_loop_n2e
; __N2EFAS61__
align 4
decompr_copy4_n2e:
mov eax, [edx]
add edx, byte 4
mov [edi], eax
add edi, byte 4
sub ecx, byte 4
ja decompr_copy4_n2e
add edi, ecx
jmpn decompr_loop_n2e
%endif; __N2EDEC60__
decompr_end_n2e:
; __NRV2EEND__
; vi:ts=8:et

View File

@ -27,13 +27,14 @@
;
*/
// ------------- ADDBITS -------------
macro(ADDBITS)
#if (NRV_BB == 8)
add.b d0,d0 // sets Z, C and X // 4
add.b d0,d0 // sets Z, C and X // 4
#elif (NRV_BB == 32)
add.l d0,d0 // sets Z, C and X // 6
add.l d0,d0 // sets Z, C and X // 6
#endif
endm
@ -41,9 +42,9 @@ macro(ADDBITS)
#if 0
macro(ADDXBITS)
#if (NRV_BB == 8)
addx.b d0,d0 // sets C and X // 4
addx.b d0,d0 // sets C and X // 4
#elif (NRV_BB == 32)
addx.l d0,d0 // sets C and X // 8
addx.l d0,d0 // sets C and X // 8
#endif
endm
#endif
@ -55,7 +56,7 @@ macro(ADDXBITS)
macro(FILLBYTES_8)
// note: we shift the X flag through -> must init d0.b with $80
move.b (a0)+,d0 // 8
addx.b d0,d0 // sets C and X // 4
addx.b d0,d0 // sets C and X // 4
endm
@ -70,8 +71,8 @@ macro(FILLBYTES_LE32)
ror.l #8,d0 // 24
move.b (a0)+,d0 // 8
ror.l #8,d0 // 24
add.l d0,d0 // sets C and X // 6
bset #0,d0 // only changes Z // 12
add.l d0,d0 // sets C and X // 6
bset #0,d0 // only changes Z // 12
// -----
// 146
#elif 1
@ -82,9 +83,9 @@ macro(FILLBYTES_LE32)
move.b 1(a0),d0 // 12
lsl.w #8,d0 // 22
move.b (a0),d0 // 8
addq.l #4,a0 // does not affect flags // 8
add.l d0,d0 // sets C and X // 6
bset #0,d0 // only changes Z // 12
addq.l #4,a0 // does not affect flags// 8
add.l d0,d0 // sets C and X // 6
bset #0,d0 // only changes Z // 12
// -----
// 118
#elif 1
@ -97,8 +98,8 @@ macro(FILLBYTES_LE32)
move.b 1(a0),d0 // 12
ror.w #8,d0 // 22
move.b (a0),d0 // 8
addq.l #4,a0 // does not affect flags // 8
addx.l d0,d0 // sets C and X // 8
addq.l #4,a0 // does not affect flags// 8
addx.l d0,d0 // sets C and X // 8
// -----
// 108
#else
@ -107,13 +108,13 @@ macro(FILLBYTES_LE32)
// note: we shift the X flag through -> must init d0.l with $80000000
// note: must use dc.l because of a bug in the pasm assembler
// note: may access past the end of the input// this is ok for UPX
dc.l $01080003 // movep.w 3(a0),d0 // 16
dc.l $01080003 // movep.w 3(a0),d0 // 16
move.b 2(a0),d0 // 12
swap d0 // 4
dc.l $01080001 // movep.w 1(a0),d0 // 16
dc.l $01080001 // movep.w 1(a0),d0 // 16
move.b (a0),d0 // 8
addq.l #4,a0 // does not affect flags // 8
addx.l d0,d0 // sets C and X // 8
addq.l #4,a0 // does not affect flags// 8
addx.l d0,d0 // sets C and X // 8
// -----
// 72
#endif

View File

@ -198,7 +198,7 @@ decompr_got_mlen:
sub.l d6,d1
addx.w d7,d2
// TODO: partly unroll this loop// could use some magic with d7 for address
// TODO: partly unroll this loop; could use some magic with d7 for address
// computations, then compute a nice `jmp yyy(pc,dx.w)'
#if 1

View File

@ -206,7 +206,7 @@ decompr_got_mlen:
sub.l d6,d1
addx.w d7,d2
// TODO: partly unroll this loop// could use some magic with d7 for address
// TODO: partly unroll this loop; could use some magic with d7 for address
// computations, then compute a nice `jmp yyy(pc,dx.w)'
#if 1

View File

@ -205,7 +205,7 @@ decompr_got_mlen:
sub.l d6,d1
addx.w d7,d2
// TODO: partly unroll this loop// could use some magic with d7 for address
// TODO: partly unroll this loop; could use some magic with d7 for address
// computations, then compute a nice `jmp yyy(pc,dx.w)'
#if 1

View File

@ -71,17 +71,12 @@
#define ELSE .else
#define ENDIF .endif
#define DW .word
#define DB .byte
.macro subiu reg, p1, p2
.ifnb p2
addiu \reg, p1, -p2
.else
addiu \reg, -p1
.endif
.endm
#ifndef DEBUG

View File

@ -29,7 +29,7 @@
#define COM 1
#define CJT16 1
#include "arch/i086/macros.ash"
#include "arch/i086/macros.S"
CPU 8086
@ -69,7 +69,7 @@ section COMMAIN2
section COMCUTPO
#include "arch/i086/nrv2b_d16.ash" /* decompressor & calltrick */
#include "arch/i086/nrv2b_d16.S" /* decompressor & calltrick */
section CORETURN
ret

View File

@ -27,8 +27,8 @@
;
*/
#define EXE
#include "arch/i086/macros.ash"
#define EXE 1
#include "arch/i086/macros.S"
CPU 8086
@ -116,9 +116,9 @@ section EXEMAIN4
section EXECUTPO
#include "arch/i086/nrv2b_d8.ash"
#include "arch/i086/nrv2d_d8.ash"
#include "arch/i086/nrv2e_d8.ash"
#include "arch/i086/nrv2b_d8.S"
#include "arch/i086/nrv2d_d8.S"
#include "arch/i086/nrv2e_d8.S"
section EXEMAIN5
pop bp

View File

@ -27,11 +27,10 @@
;
*/
#define SYS 1
#define COM 0
#define CJT16 1
#include "arch/i086/macros.ash"
#include "arch/i086/macros.S"
CPU 8086
@ -90,7 +89,7 @@ section SYSMAIN3
section SYSCUTPO
#include "arch/i086/nrv2b_d16.ash"
#include "arch/i086/nrv2b_d16.S"
section SYSMAIN5
pop es

View File

@ -1,5 +1,5 @@
/*
; header.ash --
; header.S --
;
; This file is part of the UPX executable compressor.
;
@ -27,38 +27,34 @@
;
*/
#define db .byte
#define dw .short
#define dd .long
section UPX1HEAD
db 85,80,88,33 // 0 UPX_MAGIC_LE32
db 161,216,208,213 // UPX_MAGIC2_LE32
dd 0 // 8 uncompressed adler32
dd 0 // 12 compressed adler32
.byte 85,80,88,33 // 0 UPX_MAGIC_LE32
.byte 161,216,208,213 // UPX_MAGIC2_LE32
.long 0 // 8 uncompressed adler32
.long 0 // 12 compressed adler32
#ifdef COM
dw 0 // 16 uncompressed len
dw 0 // 18 compressed len
db 0 // 20 filter
db 45 // 21 header checksum
.short 0 // 16 uncompressed len
.short 0 // 18 compressed len
.byte 0 // 20 filter
.byte 45 // 21 header checksum
#elif defined(EXE)
db 0,0,0 // 16 uncompressed len
db 0,0,0 // 19 compressed len
db 0,0,0 // 22 original file size
db 0 // 25 filter
db 45 // 26 header checksum
.byte 0,0,0 // 16 uncompressed len
.byte 0,0,0 // 19 compressed len
.byte 0,0,0 // 22 original file size
.byte 0 // 25 filter
.byte 45 // 26 header checksum
#else
dd 0 // 16 uncompressed len
dd 0 // 20 compressed len
dd 0 // 24 original file size
db 0 // 28 filter id
db 0 // 29 filter cto
db 0 // unused
db 45 // 31 header checksum
.long 0 // 16 uncompressed len
.long 0 // 20 compressed len
.long 0 // 24 original file size
.byte 0 // 28 filter id
.byte 0 // 29 filter cto
.byte 0 // unused
.byte 45 // 31 header checksum
#endif
/* vi:ts=8:et:nowrap */
// vi:ts=8:et:nowrap