mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
11066 lines
405 KiB
NASM
11066 lines
405 KiB
NASM
;
|
||
; LZMA compression code ripped from Starctaft II BEta
|
||
; Used while StormLib's LZMA implementation was tested against Starcraft compression
|
||
; Not used in StormLib.
|
||
;
|
||
|
||
.686P
|
||
.MODEL FLAT
|
||
ASSUME FS: NOTHING
|
||
|
||
.DATA
|
||
|
||
;---------------------------------------------------------------------------
|
||
; Data
|
||
|
||
byte_4CB248 db 0, 0Bh, 0Bh, 0Bh ; indirect table for switch statement
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 1, 2, 3, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 4, 5, 6, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 7, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 8, 9, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Bh, 0Bh, 0Bh, 0Bh
|
||
db 0Ah
|
||
align 10h
|
||
|
||
dword_544960 dd 0BB40E64Eh ; DATA XREF: sub_401C72+B
|
||
dword_553598 dd ? ; DATA XREF: sub_4CB8A0+9
|
||
|
||
off_50CD3C dd offset sub_4A0605 ; DATA XREF: sub_4A05F7+1o
|
||
; .data:off_52A004o ...
|
||
dword_50CD40 dd 0E06D7363h ; DATA XREF: _CxxThrowException(x,x)+Eo
|
||
dd 1
|
||
dd 0
|
||
dd 0
|
||
dd 3
|
||
dd 19930520h
|
||
dd 0
|
||
dd 0
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
off_546E20 dd offset sub_4CDD70 ; DATA XREF: sub_4D0270:loc_4D0324o
|
||
off_546E24 dd offset sub_4CDD90 ; DATA XREF: sub_4CF810+53r
|
||
off_546E28 dd offset off_50CD3C ; DATA XREF: .rdata:off_51B888o
|
||
dd 0
|
||
db '.?AUISequentialInStream@@',0
|
||
db 0
|
||
db 0
|
||
off_546E4C dd offset off_50CD3C ; DATA XREF: .rdata:off_51B8C0o
|
||
dd 0
|
||
db '.?AUISequentialOutStream@@',0
|
||
db 0
|
||
off_546E70 dd offset off_50CD3C ; DATA XREF: .rdata:off_51B8F8o
|
||
dd 0
|
||
db '.?AUICompressCoder@@',0
|
||
db 0
|
||
db 0
|
||
db 0
|
||
off_546E90 dd offset off_50CD3C ; DATA XREF: .rdata:off_51B944o
|
||
dd 0
|
||
db '.?AUICompressSetOutStream@@',0
|
||
off_546EB4 dd offset off_50CD3C ; DATA XREF: .rdata:0051B96Co
|
||
dd 0
|
||
db '.?AUICompressSetCoderProperties@@',0
|
||
db 0
|
||
db 0
|
||
off_546EE0 dd offset off_50CD3C ; DATA XREF: .rdata:0051B9B8o
|
||
dd 0
|
||
db '.?AUICompressWriteCoderProperties@@',0
|
||
dd offset off_50CD3C
|
||
dd 0
|
||
db '.?AUCSystemException@@',0
|
||
db 0
|
||
dd offset off_50CD3C
|
||
dd 0
|
||
db '.?AUCOutBufferException@@',0
|
||
db 0
|
||
db 0
|
||
off_546F50 dd offset off_50CD3C ; DATA XREF: .rdata:0051BA04o
|
||
dd 0
|
||
db '.?AVCInStreamMemory@@',0
|
||
db 0
|
||
db 0
|
||
off_546F70 dd offset off_50CD3C ; DATA XREF: .rdata:off_51BA4Co
|
||
dd 0
|
||
db '.?AVCMyUnknownImp@@',0
|
||
off_546F8C dd offset off_50CD3C ; DATA XREF: .rdata:0051BAA8o
|
||
dd 0
|
||
db '.?AVCOutStreamMemory@@',0
|
||
db 0
|
||
off_546FAC dd offset off_50CD3C ; DATA XREF: .rdata:0051BAFCo
|
||
dd 0
|
||
db '.?AVCEncoder@NLZMA@NCompress@@',0
|
||
db 0
|
||
off_546FD4 dd offset off_50CD3C ; DATA XREF: .rdata:off_51BBECo
|
||
dd 0
|
||
db '.?AVCBaseState@NLZMA@NCompress@@',0
|
||
db 0
|
||
db 0
|
||
db 0
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
dword_51B960 dd 0 ; DATA XREF: .rdata:00517A64o
|
||
dd 0
|
||
dd 0
|
||
dd offset off_546EB4
|
||
dd 0 ; offset dword_51B974
|
||
|
||
dword_51B9AC dd 0 ; DATA XREF: .rdata:00517A78o
|
||
dd 0
|
||
dd 0
|
||
dd offset off_546EE0
|
||
dd 0 ;offset dword_51B9C0
|
||
|
||
dword_51B9F8 dd 0 ; DATA XREF: .rdata:00517A8Co
|
||
dd 0
|
||
dd 0
|
||
dd offset off_546F50
|
||
dd 0 ; offset dword_51BA0C
|
||
|
||
dword_51BA9C dd 0 ; DATA XREF: .rdata:00517AA0o
|
||
dd 0
|
||
dd 0
|
||
dd offset off_546F8C
|
||
dd 0 ; offset dword_51BAB0
|
||
|
||
dword_51BAF0 dd 0 ; DATA XREF: .rdata:00517AF8o
|
||
dd 0
|
||
dd 0
|
||
dd offset off_546FAC
|
||
dd 0 ; offset dword_51BB04
|
||
|
||
dword_51BC58 dd 0 ; DATA XREF: .rdata:00517AE0o
|
||
dd 4
|
||
dd 0
|
||
dd offset off_546FAC
|
||
dd 0 ; offset dword_51BB04
|
||
|
||
dword_51BC6C dd 0 ; DATA XREF: .rdata:00517ACCo
|
||
dd 8
|
||
dd 0
|
||
dd offset off_546FAC
|
||
dd 0 ; offset dword_51BB04
|
||
|
||
dword_51BC80 dd 0 ; DATA XREF: .rdata:00517AB8o
|
||
dd 0Ch
|
||
dd 0
|
||
dd offset off_546FAC
|
||
dd 0 ; offset dword_51BB04
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
dword_512730 dd 0 ; DATA XREF: sub_48DB4D+B9o
|
||
dword_512734 dd 0 ; DATA XREF: CCmdTarget::GetInterface(void const *)+2Dr
|
||
dword_512738 dd 0C0h ; DATA XREF: CCmdTarget::GetInterface(void const *)+38r
|
||
dword_51273C dd 46000000h ; DATA XREF: CCmdTarget::GetInterface(void const *)+43r
|
||
|
||
dword_5535A0 dd ? ; DATA XREF: sub_4CF900:loc_4CF94Co
|
||
dword_5535A4 dd ? ; DATA XREF: .text:004DAF37w
|
||
dword_5535A8 dd ? ; DATA XREF: .text:004DAF3Cw
|
||
dword_5535AC dd ? ; DATA XREF: .text:004DAF41w
|
||
|
||
dword_5535B0 dd ? ; DATA XREF: sub_4CF900+5Eo
|
||
dword_5535B4 dd ? ; DATA XREF: .text:004DAF17w
|
||
dword_5535B8 dd ? ; DATA XREF: .text:004DAF1Cw
|
||
dword_5535BC dd ? ; DATA XREF: .text:004DAF21w
|
||
|
||
dword_5535C0 dd ? ; DATA XREF: sub_4CF900:loc_4CF98Fo
|
||
dword_5535C4 dd ? ; DATA XREF: .text:004DAEF7w
|
||
dword_5535C8 dd ? ; DATA XREF: .text:004DAEFCw
|
||
dword_5535CC dd ? ; DATA XREF: .text:004DAF01w
|
||
|
||
|
||
dword_526DD0 dd 0 ; DATA XREF: .text:loc_4CF6CBo
|
||
dd 0
|
||
dd 0
|
||
dd 0 ; offset dword_526DE0
|
||
|
||
kLiteralNextStates db 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5
|
||
kMatchNextStates db 7, 7, 7, 7, 7, 7, 7, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
|
||
kRepNextStates db 8, 8, 8, 8, 8, 8, 8, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
|
||
kShortRepNextStates db 9, 9, 9, 9, 9, 9, 9, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
|
||
|
||
dword_550998 dd 200h dup(?)
|
||
dword_551198 dd 800h dup(?)
|
||
dword_553198 dd 100h dup(?)
|
||
|
||
ICompressSetOutStream_vftable dd offset __purecall ; DATA XREF: NCompress_NLZMA_CEncoder_CEncoder+2o
|
||
dd offset __purecall
|
||
dd offset __purecall
|
||
dd offset __purecall
|
||
dd offset __purecall
|
||
dd offset dword_51B960
|
||
ICompressSetCoderProperties_vftable dd offset __purecall ; DATA XREF: NCompress_NLZMA_CEncoder_CEncoder+9o
|
||
dd offset __purecall
|
||
dd offset __purecall
|
||
dd offset __purecall
|
||
dd offset dword_51B9AC
|
||
ICompressWriteCoderProperties_vftable dd offset __purecall ; DATA XREF: NCompress_NLZMA_CEncoder_CEncoder+10o
|
||
dd offset __purecall
|
||
dd offset __purecall
|
||
dd offset __purecall
|
||
dd offset dword_51B9F8
|
||
off_517A90 dd offset Interface1_QueryInterface
|
||
dd offset Interface1_AddRef
|
||
dd offset Interface1_Release
|
||
dd offset sub_4CCB20
|
||
dd offset dword_51BA9C
|
||
off_517AA4 dd offset Interface1_QueryInterface ; DATA XREF: sub_4CF610+Eo
|
||
dd offset Interface1_AddRef
|
||
dd offset Interface2_Release
|
||
dd offset sub_4CCB90
|
||
dd offset sub_4CF590
|
||
dd offset dword_51BC80
|
||
NCompress_NLZMA_CEncoder_vftable_ICompressWriteCoderProperties dd offset sub_4CFA50 ; DATA XREF: sub_4CF810+3Do
|
||
dd offset sub_4CFA10
|
||
dd offset sub_4CFA70
|
||
dd offset sub_4CDDB0
|
||
dd offset dword_51BC6C
|
||
NCompress_NLZMA_CEncoder_vftable_ICompressSetCoderProperties dd offset ICompressSetCoderProperties_QueryInterface ; DATA XREF: sub_4CF810+36o
|
||
dd offset ICompressSetCoderProperties_AddRef
|
||
dd offset ICompressSetCoderProperties_Release
|
||
dd offset ICompressSetCoderProperties_SetCoderProperties
|
||
dd offset dword_51BC58
|
||
NCompress_NLZMA_CEncoder_vftable_ICompressSetOutStream dd offset sub_4CFA20 ; DATA XREF: sub_4CF810+2Fo
|
||
dd offset sub_4CFA80
|
||
dd offset sub_4CFA40
|
||
dd offset sub_4CFA90
|
||
dd offset sub_4CDE70
|
||
dd offset dword_51BAF0
|
||
NCompress_NLZMA_CEncoder_vftable dd offset sub_4CF900 ; DATA XREF: sub_4CF810+29o
|
||
dd offset sub_4CF9D0
|
||
dd offset sub_4CF9E0
|
||
dd offset CEncoder_Code
|
||
dd offset sub_4D0250
|
||
|
||
.CODE
|
||
|
||
extrn _operator_new:PROC
|
||
extrn __allshr: PROC
|
||
extrn _free: PROC
|
||
extrn _memcmp: PROC
|
||
extrn _memcpy: PROC
|
||
extrn _memset: PROC
|
||
extrn ___report_gsfailure: PROC
|
||
extrn __purecall: PROC
|
||
VirtualAlloc PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD
|
||
VirtualFree PROTO STDCALL :DWORD,:DWORD,:DWORD
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
; void __cdecl j__free(void *Memory)
|
||
; 004843B8
|
||
j__free proc near ; CODE XREF: sub_401048+16p
|
||
; .text:004010CFp ...
|
||
jmp _free
|
||
j__free endp
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
; int __cdecl unknown_libname_324(void *Buf1, void *Buf2)
|
||
unknown_libname_324 proc near
|
||
; sub_48B7BA
|
||
|
||
Buf1 = dword ptr 4
|
||
Buf2 = dword ptr 8
|
||
|
||
push 10h ; Size
|
||
push [esp+4+Buf2] ; Buf2
|
||
push [esp+8+Buf1] ; Buf1
|
||
call _memcmp
|
||
add esp, 0Ch
|
||
neg eax
|
||
sbb eax, eax
|
||
inc eax
|
||
retn
|
||
unknown_libname_324 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
sub_4A05F7 proc near ; CODE XREF: sub_4A0605+3p
|
||
push ecx
|
||
mov dword ptr [ecx], offset off_50CD3C
|
||
call sub_4A98B8
|
||
pop ecx
|
||
retn
|
||
sub_4A05F7 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
; int __thiscall sub_4A0605(void *Memory, char)
|
||
sub_4A0605 proc near ; DATA XREF: .rdata:off_50CD3Co
|
||
|
||
arg_0 = byte ptr 4
|
||
|
||
push esi
|
||
mov esi, ecx
|
||
call sub_4A05F7
|
||
test [esp+4+arg_0], 1
|
||
jz short loc_4A061B
|
||
push esi ; Memory
|
||
call j__free
|
||
pop ecx
|
||
|
||
loc_4A061B: ; CODE XREF: sub_4A0605+Dj
|
||
mov eax, esi
|
||
pop esi
|
||
retn 4
|
||
sub_4A0605 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
sub_4A0686 proc near ; CODE XREF: sub_401C72+49p
|
||
; sub_40222F+15Cp ...
|
||
cmp ecx, dword_544960
|
||
jnz short loc_4A0690
|
||
retn
|
||
loc_4A0690: ; CODE XREF: sub_4A0686+6j
|
||
jmp ___report_gsfailure
|
||
sub_4A0686 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
sub_4A98B8 proc near ; CODE XREF: sub_4A05F7+7p
|
||
|
||
int 3
|
||
retn
|
||
sub_4A98B8 endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CAEC0 proc near ; CODE XREF: CEncoder_GetOptimum+514p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
push esi
|
||
push edi
|
||
mov edi, [esp+8+arg_4]
|
||
lea eax, [edi-2]
|
||
cmp eax, 4
|
||
mov esi, ecx
|
||
jb short loc_4CAED5
|
||
mov eax, 3
|
||
|
||
loc_4CAED5: ; CODE XREF: sub_4CAEC0+Ej
|
||
mov edx, [esp+8+arg_0]
|
||
cmp edx, 80h
|
||
jnb short loc_4CAEEF
|
||
shl eax, 7
|
||
add eax, edx
|
||
mov ecx, [esi+eax*4+33314h]
|
||
jmp short loc_4CAF25
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CAEEF: ; CODE XREF: sub_4CAEC0+1Fj
|
||
mov ecx, 7FFFFh
|
||
sub ecx, edx
|
||
sar ecx, 1Fh
|
||
push ebx
|
||
and ecx, 0Ch
|
||
add ecx, 6
|
||
mov ebx, edx
|
||
shr ebx, cl
|
||
shl eax, 5
|
||
add eax, ecx
|
||
and edx, 0Fh
|
||
movzx ebx, byte ptr dword_551198[ebx]
|
||
lea eax, [ebx+eax*2]
|
||
mov ecx, [esi+eax*4+32F14h]
|
||
add ecx, [esi+edx*4+33B14h]
|
||
pop ebx
|
||
|
||
loc_4CAF25: ; CODE XREF: sub_4CAEC0+2Dj
|
||
mov edx, [esp+8+arg_8]
|
||
imul edx, 110h
|
||
add edx, edi
|
||
mov eax, [esi+edx*4+295B8h]
|
||
pop edi
|
||
add eax, ecx
|
||
pop esi
|
||
retn 0Ch
|
||
sub_4CAEC0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CAF40: ; CODE XREF: .text:004DAED5j
|
||
push ecx
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov ebp, 2
|
||
mov bl, 2
|
||
push edi
|
||
mov byte ptr dword_551198, 0
|
||
mov byte ptr dword_551198+1, 1
|
||
mov [esp+10h], bl
|
||
mov edi, ebp
|
||
|
||
loc_4CAF60: ; CODE XREF: .text:004CAF96j
|
||
mov ecx, edi
|
||
shr ecx, 1
|
||
sub ecx, 1
|
||
mov esi, 1
|
||
shl esi, cl
|
||
test esi, esi
|
||
jbe short loc_4CAF89
|
||
mov ecx, [esp+10h]
|
||
push esi
|
||
lea eax, dword_551198[ebp]
|
||
push ecx
|
||
push eax
|
||
call _memset
|
||
add esp, 0Ch
|
||
add ebp, esi
|
||
|
||
loc_4CAF89: ; CODE XREF: .text:004CAF70j
|
||
add bl, 1
|
||
add edi, 1
|
||
cmp bl, 1Ah
|
||
mov [esp+10h], bl
|
||
jb short loc_4CAF60
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
pop ecx
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CAFA0 proc near ; CODE XREF: sub_4CAFC0+90p
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
mov eax, [esp+arg_0]
|
||
lea ecx, [eax-61h]
|
||
cmp cx, 19h
|
||
ja short locret_4CAFB2
|
||
add eax, 0FFE0h
|
||
|
||
locret_4CAFB2: ; CODE XREF: sub_4CAFA0+Bj
|
||
retn
|
||
sub_4CAFA0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CAFC0 proc near ; CODE XREF: ICompressSetCoderProperties_SetCoderProperties+A5p
|
||
movzx ecx, word ptr [eax]
|
||
lea edx, [ecx-61h]
|
||
cmp dx, 19h
|
||
ja short loc_4CAFD2
|
||
add ecx, 0FFE0h
|
||
|
||
loc_4CAFD2: ; CODE XREF: sub_4CAFC0+Aj
|
||
add eax, 2
|
||
cmp cx, 48h
|
||
jnz short loc_4CB01B
|
||
movzx ecx, word ptr [eax]
|
||
lea edx, [ecx-61h]
|
||
cmp dx, 19h
|
||
ja short loc_4CAFED
|
||
add ecx, 0FFE0h
|
||
|
||
loc_4CAFED: ; CODE XREF: sub_4CAFC0+25j
|
||
add eax, 2
|
||
cmp cx, 43h
|
||
jz short loc_4CAFF9
|
||
|
||
loc_4CAFF6: ; CODE XREF: sub_4CAFC0+44j
|
||
; sub_4CAFC0+4Bj ...
|
||
xor eax, eax
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CAFF9: ; CODE XREF: sub_4CAFC0+34j
|
||
movzx ecx, word ptr [eax]
|
||
sub ecx, 30h
|
||
lea edx, [ecx-4]
|
||
test edx, edx
|
||
ja short loc_4CAFF6
|
||
cmp word ptr [eax+2], 0
|
||
jnz short loc_4CAFF6
|
||
mov dword ptr [ebx], 0
|
||
mov [edi], ecx
|
||
mov eax, 1
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB01B: ; CODE XREF: sub_4CAFC0+19j
|
||
cmp cx, 42h
|
||
jnz short loc_4CAFF6
|
||
movzx ecx, word ptr [eax]
|
||
lea edx, [ecx-61h]
|
||
cmp dx, 19h
|
||
ja short loc_4CB033
|
||
add ecx, 0FFE0h
|
||
|
||
loc_4CB033: ; CODE XREF: sub_4CAFC0+6Bj
|
||
add eax, 2
|
||
cmp cx, 54h
|
||
jnz short loc_4CAFF6
|
||
push esi
|
||
movzx esi, word ptr [eax]
|
||
sub esi, 30h
|
||
lea ecx, [esi-2]
|
||
cmp ecx, 2
|
||
ja short loc_4CB06C
|
||
movzx eax, word ptr [eax+2]
|
||
push eax
|
||
call sub_4CAFA0
|
||
add esp, 4
|
||
test ax, ax
|
||
jnz short loc_4CB06C
|
||
mov dword ptr [ebx], 1
|
||
mov [edi], esi
|
||
mov eax, 1
|
||
pop esi
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB06C: ; CODE XREF: sub_4CAFC0+89j
|
||
; sub_4CAFC0+9Bj
|
||
xor eax, eax
|
||
pop esi
|
||
retn
|
||
sub_4CAFC0 endp
|
||
|
||
|
||
ICompressSetCoderProperties_SetCoderProperties proc near ; DATA XREF: .rdata:00517ADCo
|
||
|
||
var_4 = dword ptr -4
|
||
pThis = dword ptr 4
|
||
propIDs = dword ptr 8
|
||
properties = dword ptr 0Ch
|
||
numProperties = dword ptr 10h
|
||
|
||
push ecx
|
||
push ebx
|
||
push ebp
|
||
xor edx, edx
|
||
cmp [esp+0Ch+numProperties], edx
|
||
push esi
|
||
push edi
|
||
mov [esp+14h+var_4], edx
|
||
jbe loc_4CB20D
|
||
mov esi, [esp+14h+properties]
|
||
mov ebp, [esp+14h+pThis]
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CB090: ; CODE XREF: sub_4CB070+197j
|
||
mov eax, [esp+14h+propIDs]
|
||
mov eax, [eax+edx*4]
|
||
add eax, 0FFFFFC00h
|
||
cmp eax, 90h ; switch 145 cases
|
||
ja loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
movzx ecx, ds:byte_4CB248[eax]
|
||
jmp ds:off_4CB218[ecx*4] ; switch jump
|
||
|
||
loc_4CB0B5: ; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 13h ; jumptable 004CB0AE case 80
|
||
jnz short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov eax, [esi+8]
|
||
lea ecx, [eax-5]
|
||
cmp ecx, 10Ch
|
||
ja short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov [ebp+32EF0h], eax
|
||
jmp loc_4CB1F9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB0D4: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 13h ; jumptable 004CB0AE case 82
|
||
jnz short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov eax, [esi+8]
|
||
mov [ebp+33B88h], eax
|
||
jmp loc_4CB1F9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB0E8: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 13h ; jumptable 004CB0AE case 112
|
||
jnz short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
cmp dword ptr [esi+8], 0
|
||
setz cl
|
||
mov [ebp+32EECh], cl
|
||
jmp loc_4CB1F9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB100: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 8 ; jumptable 004CB0AE case 81
|
||
jnz short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov eax, [esi+8]
|
||
lea edi, [ebp+0C4h]
|
||
lea ebx, [ebp+0CCh]
|
||
call sub_4CAFC0
|
||
test eax, eax
|
||
jz short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov edx, [esp+14h+var_4]
|
||
jmp loc_4CB1F9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB127: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 0Bh ; jumptable 004CB0AE case 128
|
||
jz loc_4CB1F9
|
||
|
||
loc_4CB131: ; CODE XREF: sub_4CB070+31j
|
||
; sub_4CB070+3Ej ...
|
||
pop edi ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
pop esi
|
||
pop ebp
|
||
mov eax, 80070057h
|
||
pop ebx
|
||
pop ecx
|
||
retn 10h
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB13E: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 13h ; jumptable 004CB0AE case 129
|
||
jnz short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
jmp loc_4CB1F9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB149: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 13h ; jumptable 004CB0AE case 0
|
||
jnz short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov eax, [esi+8]
|
||
lea ecx, [eax-1]
|
||
cmp ecx, 3FFFFFFFh
|
||
ja short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov [ebp+33B64h], eax
|
||
xor ecx, ecx
|
||
|
||
loc_4CB165: ; CODE XREF: sub_4CB070+106j
|
||
mov edi, 1
|
||
shl edi, cl
|
||
cmp eax, edi
|
||
jbe short loc_4CB178
|
||
add ecx, 1
|
||
cmp ecx, 1Eh
|
||
jb short loc_4CB165
|
||
|
||
loc_4CB178: ; CODE XREF: sub_4CB070+FEj
|
||
lea eax, [ecx+ecx]
|
||
mov [ebp+33B50h], eax
|
||
jmp short loc_4CB1F9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB183: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 13h ; jumptable 004CB0AE case 64
|
||
jnz short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov ecx, [esi+8]
|
||
cmp ecx, 4
|
||
ja short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov eax, 1
|
||
shl eax, cl
|
||
mov [ebp+33B54h], ecx
|
||
sub eax, 1
|
||
mov [ebp+33B58h], eax
|
||
jmp short loc_4CB1F9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB1A9: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 13h ; jumptable 004CB0AE case 66
|
||
jnz short loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov eax, [esi+8]
|
||
cmp eax, 4
|
||
ja loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov [ebp+33B5Ch], eax
|
||
jmp short loc_4CB1F9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB1C3: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 13h ; jumptable 004CB0AE case 65
|
||
jnz loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov eax, [esi+8]
|
||
cmp eax, 8
|
||
ja loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
mov [ebp+33B60h], eax
|
||
jmp short loc_4CB1F9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB1E1: ; CODE XREF: sub_4CB070+3Ej
|
||
; DATA XREF: .text:off_4CB218o
|
||
cmp word ptr [esi], 0Bh ; jumptable 004CB0AE case 144
|
||
jnz loc_4CB131 ; default
|
||
; jumptable 004CB0AE cases 1-63,67-79,83-111,113-127,130-143
|
||
cmp word ptr [esi+8], 0FFFFh
|
||
setz cl
|
||
mov [ebp+33B8Ch], cl
|
||
|
||
loc_4CB1F9: ; CODE XREF: sub_4CB070+5Fj
|
||
; sub_4CB070+73j ...
|
||
add edx, 1
|
||
add esi, 10h
|
||
cmp edx, [esp+14h+numProperties]
|
||
mov [esp+14h+var_4], edx
|
||
jb loc_4CB090
|
||
|
||
loc_4CB20D: ; CODE XREF: sub_4CB070+Fj
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
xor eax, eax
|
||
pop ebx
|
||
pop ecx
|
||
retn 10h
|
||
|
||
off_4CB218 dd offset loc_4CB149, offset loc_4CB183, offset loc_4CB1C3
|
||
dd offset loc_4CB1A9, offset loc_4CB0B5, offset loc_4CB100 ; jump table for switch statement
|
||
dd offset loc_4CB0D4, offset loc_4CB0E8, offset loc_4CB127
|
||
dd offset loc_4CB13E, offset loc_4CB1E1, offset loc_4CB131
|
||
|
||
ICompressSetCoderProperties_SetCoderProperties endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CB2E0 proc near ; CODE XREF: CEncoder_GetOptimum+1199p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_4]
|
||
lea eax, [esi+esi*4]
|
||
lea edx, [ecx+eax*8]
|
||
mov [ecx+32F08h], esi
|
||
mov eax, [edx+100h]
|
||
mov ebx, [edx+104h]
|
||
push edi
|
||
|
||
loc_4CB300: ; CODE XREF: sub_4CB2E0+A6j
|
||
lea edx, [esi+esi*4]
|
||
cmp byte ptr [ecx+edx*8+0F1h], 0
|
||
lea edi, [ecx+edx*8]
|
||
jz short loc_4CB359
|
||
lea edx, [eax+eax*4+1Eh]
|
||
lea edx, [ecx+edx*8]
|
||
mov dword ptr [edx+14h], 0FFFFFFFFh
|
||
mov byte ptr [edx+1], 0
|
||
lea edx, [eax+eax*4]
|
||
lea edx, [ecx+edx*8]
|
||
lea ebp, [eax-1]
|
||
mov [edx+100h], ebp
|
||
cmp byte ptr [edi+0F2h], 0
|
||
jz short loc_4CB359
|
||
mov byte ptr [edx+0C9h], 0
|
||
mov ebp, [edi+0F4h]
|
||
mov [edx+0D8h], ebp
|
||
mov edi, [edi+0F8h]
|
||
mov [edx+0DCh], edi
|
||
|
||
loc_4CB359: ; CODE XREF: sub_4CB2E0+2Ej
|
||
; sub_4CB2E0+58j
|
||
lea edx, [eax+eax*4]
|
||
add edx, edx
|
||
add edx, edx
|
||
add edx, edx
|
||
mov edi, eax
|
||
test edi, edi
|
||
mov eax, [edx+ecx+100h]
|
||
mov ebp, ebx
|
||
mov ebx, [edx+ecx+104h]
|
||
mov [edx+ecx+100h], esi
|
||
mov [edx+ecx+104h], ebp
|
||
mov esi, edi
|
||
jnz loc_4CB300
|
||
mov eax, [ecx+104h]
|
||
mov edx, [esp+10h+arg_0]
|
||
pop edi
|
||
pop esi
|
||
mov [edx], eax
|
||
mov eax, [ecx+100h]
|
||
pop ebp
|
||
mov [ecx+32F0Ch], eax
|
||
pop ebx
|
||
retn 8
|
||
sub_4CB2E0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CB3B0 proc near ; CODE XREF: CEncoder_GetOptimumFast+2Dp
|
||
; CEncoder_GetOptimumFast+28Fp ...
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, ecx
|
||
mov ecx, [esi+80h]
|
||
mov edx, [esi+78h]
|
||
lea eax, [esi+32660h]
|
||
push eax
|
||
push ecx
|
||
xor ebx, ebx
|
||
call edx
|
||
mov ebp, [esp+14h+arg_0]
|
||
add esp, 8
|
||
test eax, eax
|
||
mov [ebp+0], eax
|
||
jbe short loc_4CB446
|
||
mov ebx, [esi+eax*4+32658h]
|
||
cmp ebx, [esi+32EF8h]
|
||
jnz short loc_4CB446
|
||
mov eax, [esi+80h]
|
||
mov ecx, [esi+70h]
|
||
push edi
|
||
push eax
|
||
call ecx
|
||
mov edx, [esi+80h]
|
||
mov edi, eax
|
||
mov eax, [esi+74h]
|
||
push edx
|
||
add edi, 1
|
||
call eax
|
||
mov ecx, [ebp+0]
|
||
mov ecx, [esi+ecx*4+3265Ch]
|
||
add esp, 8
|
||
sub eax, 1
|
||
add ecx, 1
|
||
cmp edi, 111h
|
||
jbe short loc_4CB425
|
||
mov edi, 111h
|
||
|
||
loc_4CB425: ; CODE XREF: sub_4CB3B0+6Ej
|
||
mov edx, eax
|
||
sub edx, ecx
|
||
cmp ebx, edi
|
||
jnb short loc_4CB445
|
||
mov ebp, edx
|
||
lea ecx, [eax+ebx]
|
||
sub ebp, eax
|
||
|
||
loc_4CB434: ; CODE XREF: sub_4CB3B0+93j
|
||
mov dl, [ecx]
|
||
cmp dl, [ecx+ebp]
|
||
jnz short loc_4CB445
|
||
add ebx, 1
|
||
add ecx, 1
|
||
cmp ebx, edi
|
||
jb short loc_4CB434
|
||
|
||
loc_4CB445: ; CODE XREF: sub_4CB3B0+7Bj
|
||
; sub_4CB3B0+89j
|
||
pop edi
|
||
|
||
loc_4CB446: ; CODE XREF: sub_4CB3B0+26j
|
||
; sub_4CB3B0+35j
|
||
add dword ptr [esi+32F04h], 1
|
||
pop esi
|
||
pop ebp
|
||
mov eax, ebx
|
||
pop ebx
|
||
retn 4
|
||
sub_4CB3B0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
CEncoder_GetOptimumFast proc near ; CODE XREF: CEncoder_CodeOneBlock+1F4p
|
||
|
||
var_28 = dword ptr -28h
|
||
var_24 = dword ptr -24h
|
||
var_20 = dword ptr -20h
|
||
var_1C = dword ptr -1Ch
|
||
var_18 = dword ptr -18h
|
||
var_14 = dword ptr -14h
|
||
var_10 = dword ptr -10h
|
||
arg_0 = dword ptr 4
|
||
|
||
sub esp, 28h
|
||
push ebx
|
||
push esi
|
||
push edi
|
||
mov edi, ecx
|
||
mov eax, [edi+80h]
|
||
mov ecx, [edi+70h]
|
||
push eax
|
||
call ecx
|
||
add esp, 4
|
||
cmp byte ptr [edi+32F10h], 0
|
||
mov esi, eax
|
||
mov [esp+34h+var_24], esi
|
||
jnz short loc_4CB498
|
||
lea edx, [esp+34h+var_20]
|
||
push edx
|
||
mov ecx, edi
|
||
call sub_4CB3B0
|
||
mov ebx, [esp+34h+var_20]
|
||
jmp short loc_4CB4AF
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB498: ; CODE XREF: CEncoder_GetOptimumFast+24j
|
||
mov ebx, [edi+32F00h]
|
||
mov eax, [edi+32EFCh]
|
||
mov [esp+34h+var_20], ebx
|
||
mov byte ptr [edi+32F10h], 0
|
||
|
||
loc_4CB4AF: ; CODE XREF: CEncoder_GetOptimumFast+36j
|
||
mov ecx, [edi+80h]
|
||
mov edx, [edi+74h]
|
||
push ecx
|
||
mov [esp+38h+var_28], eax
|
||
call edx
|
||
add esp, 4
|
||
sub eax, 1
|
||
cmp esi, 111h
|
||
jbe loc_4CB55E
|
||
mov [esp+34h+var_24], 111h
|
||
|
||
loc_4CB4D9: ; CODE XREF: CEncoder_GetOptimumFast+101j
|
||
push ebp
|
||
xor ebp, ebp
|
||
lea ecx, [edi+14h]
|
||
mov [esp+38h+var_18], ebp
|
||
mov [esp+38h+var_14], ebp
|
||
mov [esp+38h+var_1C], ecx
|
||
jmp short loc_4CB4F0
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CB4F0: ; CODE XREF: CEncoder_GetOptimumFast+8Bj
|
||
; CEncoder_GetOptimumFast+132j
|
||
mov edx, [esp+38h+var_1C]
|
||
mov ecx, eax
|
||
sub ecx, [edx]
|
||
mov dl, [eax]
|
||
sub ecx, 1
|
||
cmp dl, [ecx]
|
||
jnz short loc_4CB57F
|
||
mov dl, [eax+1]
|
||
cmp dl, [ecx+1]
|
||
jnz short loc_4CB57F
|
||
mov esi, 2
|
||
cmp [esp+38h+var_24], esi
|
||
jbe short loc_4CB537
|
||
lea edx, [eax+2]
|
||
sub ecx, eax
|
||
lea esp, [esp+0]
|
||
|
||
loc_4CB520: ; CODE XREF: CEncoder_GetOptimumFast+D1j
|
||
mov bl, [edx]
|
||
cmp bl, [ecx+edx]
|
||
jnz short loc_4CB533
|
||
add esi, 1
|
||
add edx, 1
|
||
cmp esi, [esp+38h+var_24]
|
||
jb short loc_4CB520
|
||
|
||
loc_4CB533: ; CODE XREF: CEncoder_GetOptimumFast+C5j
|
||
mov ebx, [esp+38h+var_20]
|
||
|
||
loc_4CB537: ; CODE XREF: CEncoder_GetOptimumFast+B2j
|
||
cmp esi, [edi+32EF8h]
|
||
jnb short loc_4CB5B9
|
||
mov edx, [esp+38h+var_14]
|
||
lea ecx, ds:0[ebp*4]
|
||
mov [esp+ecx+38h+var_10], esi
|
||
cmp esi, [esp+edx+38h+var_10]
|
||
jbe short loc_4CB587
|
||
mov [esp+38h+var_18], ebp
|
||
mov [esp+38h+var_14], ecx
|
||
jmp short loc_4CB587
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB55E: ; CODE XREF: CEncoder_GetOptimumFast+6Bj
|
||
cmp esi, 2
|
||
jnb loc_4CB4D9
|
||
mov eax, [esp+34h+arg_0]
|
||
pop edi
|
||
pop esi
|
||
mov dword ptr [eax], 0FFFFFFFFh
|
||
mov eax, 1
|
||
pop ebx
|
||
add esp, 28h
|
||
retn 4
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB57F: ; CODE XREF: CEncoder_GetOptimumFast+9Fj
|
||
; CEncoder_GetOptimumFast+A7j
|
||
mov [esp+ebp*4+38h+var_10], 0
|
||
|
||
loc_4CB587: ; CODE XREF: CEncoder_GetOptimumFast+F2j
|
||
; CEncoder_GetOptimumFast+FCj
|
||
add [esp+38h+var_1C], 4
|
||
add ebp, 1
|
||
cmp ebp, 4
|
||
jb loc_4CB4F0
|
||
mov esi, [esp+38h+var_28]
|
||
cmp esi, [edi+32EF8h]
|
||
jb short loc_4CB5EC
|
||
mov eax, [edi+ebx*4+3265Ch]
|
||
mov ecx, [esp+38h+arg_0]
|
||
add eax, 4
|
||
mov [ecx], eax
|
||
jmp loc_4CB69A
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB5B9: ; CODE XREF: CEncoder_GetOptimumFast+DDj
|
||
mov eax, [esp+38h+arg_0]
|
||
mov [eax], ebp
|
||
lea eax, [esi-1]
|
||
test eax, eax
|
||
jz loc_4CB82E
|
||
mov ecx, [edi+80h]
|
||
mov edx, [edi+7Ch]
|
||
add [edi+32F04h], eax
|
||
push eax
|
||
push ecx
|
||
call edx
|
||
add esp, 8
|
||
pop ebp
|
||
pop edi
|
||
mov eax, esi
|
||
pop esi
|
||
pop ebx
|
||
add esp, 28h
|
||
retn 4
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB5EC: ; CODE XREF: CEncoder_GetOptimumFast+142j
|
||
xor ebp, ebp
|
||
cmp esi, 2
|
||
mov [esp+38h+var_20], ebp
|
||
jb short loc_4CB65A
|
||
cmp ebx, 2
|
||
mov ecx, [edi+ebx*4+3265Ch]
|
||
mov [esp+38h+var_20], ecx
|
||
jbe short loc_4CB63F
|
||
lea eax, [edi+ebx*4+32654h]
|
||
mov edi, edi
|
||
|
||
loc_4CB610: ; CODE XREF: CEncoder_GetOptimumFast+1DDj
|
||
mov edx, [eax-4]
|
||
add edx, 1
|
||
cmp esi, edx
|
||
jnz short loc_4CB63F
|
||
mov ecx, [esp+38h+var_20]
|
||
shr ecx, 7
|
||
cmp ecx, [eax]
|
||
jbe short loc_4CB63F
|
||
mov edx, [eax-4]
|
||
mov ecx, [eax]
|
||
sub eax, 8
|
||
sub ebx, 2
|
||
cmp ebx, 2
|
||
mov [esp+38h+var_28], edx
|
||
mov [esp+38h+var_20], ecx
|
||
mov esi, edx
|
||
ja short loc_4CB610
|
||
|
||
loc_4CB63F: ; CODE XREF: CEncoder_GetOptimumFast+1A5j
|
||
; CEncoder_GetOptimumFast+1B8j ...
|
||
cmp esi, 2
|
||
jnz short loc_4CB656
|
||
cmp [esp+38h+var_20], 80h
|
||
jb short loc_4CB656
|
||
mov [esp+38h+var_28], 1
|
||
|
||
loc_4CB656: ; CODE XREF: CEncoder_GetOptimumFast+1E2j
|
||
; CEncoder_GetOptimumFast+1ECj
|
||
mov ebp, [esp+38h+var_20]
|
||
|
||
loc_4CB65A: ; CODE XREF: CEncoder_GetOptimumFast+195j
|
||
mov edx, [esp+38h+var_18]
|
||
mov esi, [esp+edx*4+38h+var_10]
|
||
cmp esi, 2
|
||
mov ebx, [esp+38h+var_28]
|
||
jb short loc_4CB6C7
|
||
lea eax, [esi+1]
|
||
cmp eax, ebx
|
||
jnb short loc_4CB690
|
||
lea ecx, [esi+2]
|
||
cmp ecx, ebx
|
||
jb short loc_4CB681
|
||
cmp ebp, 200h
|
||
ja short loc_4CB690
|
||
|
||
loc_4CB681: ; CODE XREF: CEncoder_GetOptimumFast+217j
|
||
lea edx, [esi+3]
|
||
cmp edx, ebx
|
||
jb short loc_4CB6C7
|
||
cmp ebp, 8000h
|
||
jbe short loc_4CB6C7
|
||
|
||
loc_4CB690: ; CODE XREF: CEncoder_GetOptimumFast+210j
|
||
; CEncoder_GetOptimumFast+21Fj
|
||
mov eax, [esp+38h+arg_0]
|
||
mov ecx, [esp+38h+var_18]
|
||
mov [eax], ecx
|
||
|
||
loc_4CB69A: ; CODE XREF: CEncoder_GetOptimumFast+154j
|
||
lea eax, [esi-1]
|
||
test eax, eax
|
||
jz loc_4CB82E
|
||
mov edx, [edi+80h]
|
||
add [edi+32F04h], eax
|
||
push eax
|
||
mov eax, [edi+7Ch]
|
||
push edx
|
||
call eax
|
||
add esp, 8
|
||
pop ebp
|
||
pop edi
|
||
mov eax, esi
|
||
pop esi
|
||
pop ebx
|
||
add esp, 28h
|
||
retn 4
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB6C7: ; CODE XREF: CEncoder_GetOptimumFast+209j
|
||
; CEncoder_GetOptimumFast+226j ...
|
||
cmp ebx, 2
|
||
jb short loc_4CB73E
|
||
cmp [esp+38h+var_24], 2
|
||
jbe short loc_4CB73E
|
||
mov ecx, [edi+80h]
|
||
mov edx, [edi+70h]
|
||
push ecx
|
||
call edx
|
||
add esp, 4
|
||
lea esi, [edi+32F00h]
|
||
push esi
|
||
mov ecx, edi
|
||
mov [esp+3Ch+var_24], eax
|
||
call sub_4CB3B0
|
||
cmp eax, 2
|
||
mov [edi+32EFCh], eax
|
||
jb short loc_4CB757
|
||
cmp eax, ebx
|
||
mov ecx, [esi]
|
||
mov edx, [edi+ecx*4+3265Ch]
|
||
jb short loc_4CB710
|
||
cmp edx, ebp
|
||
jb short loc_4CB737
|
||
|
||
loc_4CB710: ; CODE XREF: CEncoder_GetOptimumFast+2AAj
|
||
lea ecx, [ebx+1]
|
||
cmp eax, ecx
|
||
jnz short loc_4CB722
|
||
mov esi, edx
|
||
shr esi, 7
|
||
cmp esi, ebp
|
||
jbe short loc_4CB737
|
||
cmp eax, ecx
|
||
|
||
loc_4CB722: ; CODE XREF: CEncoder_GetOptimumFast+2B5j
|
||
ja short loc_4CB737
|
||
add eax, 1
|
||
cmp eax, ebx
|
||
jb short loc_4CB757
|
||
cmp ebx, 3
|
||
jb short loc_4CB757
|
||
shr ebp, 7
|
||
cmp ebp, edx
|
||
jbe short loc_4CB757
|
||
|
||
loc_4CB737: ; CODE XREF: CEncoder_GetOptimumFast+2AEj
|
||
; CEncoder_GetOptimumFast+2BEj ...
|
||
mov byte ptr [edi+32F10h], 1
|
||
|
||
loc_4CB73E: ; CODE XREF: CEncoder_GetOptimumFast+26Aj
|
||
; CEncoder_GetOptimumFast+271j
|
||
mov edx, [esp+38h+arg_0]
|
||
pop ebp
|
||
pop edi
|
||
pop esi
|
||
mov dword ptr [edx], 0FFFFFFFFh
|
||
mov eax, 1
|
||
pop ebx
|
||
add esp, 28h
|
||
retn 4
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB757: ; CODE XREF: CEncoder_GetOptimumFast+29Dj
|
||
; CEncoder_GetOptimumFast+2C9j ...
|
||
mov eax, [edi+80h]
|
||
mov ecx, [edi+74h]
|
||
push eax
|
||
call ecx
|
||
lea ecx, [edi+14h]
|
||
add esp, 4
|
||
sub eax, 1
|
||
mov [esp+38h+var_18], 0
|
||
mov ebx, ecx
|
||
|
||
loc_4CB776: ; CODE XREF: CEncoder_GetOptimumFast+39Aj
|
||
mov dl, [eax+1]
|
||
mov ecx, eax
|
||
sub ecx, [ebx]
|
||
sub ecx, 1
|
||
cmp dl, [ecx+1]
|
||
jnz short loc_4CB7DD
|
||
mov dl, [eax+2]
|
||
cmp dl, [ecx+2]
|
||
lea ebp, [eax+2]
|
||
jnz short loc_4CB7DD
|
||
mov esi, 2
|
||
cmp [esp+38h+var_24], esi
|
||
jbe short loc_4CB7B4
|
||
mov edx, ebp
|
||
mov ebp, ecx
|
||
sub ebp, eax
|
||
|
||
loc_4CB7A1: ; CODE XREF: CEncoder_GetOptimumFast+352j
|
||
mov cl, [edx]
|
||
cmp cl, [edx+ebp]
|
||
jnz short loc_4CB7B4
|
||
add esi, 1
|
||
add edx, 1
|
||
cmp esi, [esp+38h+var_24]
|
||
jb short loc_4CB7A1
|
||
|
||
loc_4CB7B4: ; CODE XREF: CEncoder_GetOptimumFast+339j
|
||
; CEncoder_GetOptimumFast+346j
|
||
add esi, 1
|
||
cmp esi, [esp+38h+var_28]
|
||
jb short loc_4CB7E9
|
||
mov eax, [esp+38h+arg_0]
|
||
pop ebp
|
||
mov byte ptr [edi+32F10h], 1
|
||
pop edi
|
||
pop esi
|
||
mov dword ptr [eax], 0FFFFFFFFh
|
||
mov eax, 1
|
||
pop ebx
|
||
add esp, 28h
|
||
retn 4
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB7DD: ; CODE XREF: CEncoder_GetOptimumFast+323j
|
||
; CEncoder_GetOptimumFast+32Ej
|
||
mov edx, [esp+38h+var_18]
|
||
mov [esp+edx*4+38h+var_10], 0
|
||
|
||
loc_4CB7E9: ; CODE XREF: CEncoder_GetOptimumFast+35Bj
|
||
mov ecx, [esp+38h+var_18]
|
||
add ecx, 1
|
||
add ebx, 4
|
||
cmp ecx, 4
|
||
mov [esp+38h+var_18], ecx
|
||
jb loc_4CB776
|
||
mov esi, [esp+38h+var_28]
|
||
mov ecx, [esp+38h+var_20]
|
||
mov edx, [esp+38h+arg_0]
|
||
add ecx, 4
|
||
lea eax, [esi-2]
|
||
test eax, eax
|
||
mov [edx], ecx
|
||
jz short loc_4CB82E
|
||
add [edi+32F04h], eax
|
||
mov ecx, [edi+7Ch]
|
||
push eax
|
||
mov eax, [edi+80h]
|
||
push eax
|
||
call ecx
|
||
add esp, 8
|
||
|
||
loc_4CB82E: ; CODE XREF: CEncoder_GetOptimumFast+164j
|
||
; CEncoder_GetOptimumFast+23Fj ...
|
||
pop ebp
|
||
pop edi
|
||
mov eax, esi
|
||
pop esi
|
||
pop ebx
|
||
add esp, 28h
|
||
retn 4
|
||
CEncoder_GetOptimumFast endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CB8A0 proc near ; CODE XREF: sub_4CD940+37p
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push edi
|
||
mov edi, [esp+4+arg_0]
|
||
test edi, edi
|
||
jz short loc_4CB8EB
|
||
mov eax, dword_553598
|
||
test eax, eax
|
||
jnz short loc_4CB8DD
|
||
push 0Ch ; Size
|
||
call _operator_new ; operator new(uint)
|
||
add esp, 4
|
||
test eax, eax
|
||
jz short loc_4CB8D6
|
||
mov dword ptr [eax], 0
|
||
mov dword ptr [eax+4], 0
|
||
mov dword ptr [eax+8], 0
|
||
jmp short loc_4CB8D8
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB8D6: ; CODE XREF: sub_4CB8A0+1Ej
|
||
xor eax, eax
|
||
|
||
loc_4CB8D8: ; CODE XREF: sub_4CB8A0+34j
|
||
mov dword_553598, eax
|
||
|
||
loc_4CB8DD: ; CODE XREF: sub_4CB8A0+10j
|
||
mov eax, [eax]
|
||
test eax, eax
|
||
jz short loc_4CB8EB
|
||
push edi
|
||
call eax
|
||
add esp, 4
|
||
pop edi
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB8EB: ; CODE XREF: sub_4CB8A0+7j
|
||
; sub_4CB8A0+41j
|
||
xor eax, eax
|
||
pop edi
|
||
retn
|
||
sub_4CB8A0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CB8F0 proc near ; CODE XREF: sub_4CBA60+85p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
push esi
|
||
mov esi, [esp+4+arg_0]
|
||
push edi
|
||
mov edi, [esi+44h]
|
||
add edi, [esi+40h]
|
||
add edi, [esp+8+arg_4]
|
||
cmp dword ptr [esi+4Ch], 0
|
||
jz short loc_4CB911
|
||
mov [esi+3Ch], edi
|
||
pop edi
|
||
mov eax, 1
|
||
pop esi
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB911: ; CODE XREF: sub_4CB8F0+14j
|
||
mov eax, [esi+30h]
|
||
test eax, eax
|
||
jz short loc_4CB91D
|
||
cmp [esi+3Ch], edi
|
||
jz short loc_4CB93E
|
||
|
||
loc_4CB91D: ; CODE XREF: sub_4CB8F0+26j
|
||
push ebx
|
||
mov ebx, [esp+0Ch+arg_8]
|
||
push eax
|
||
mov eax, [ebx+4]
|
||
call eax
|
||
mov dword ptr [esi+30h], 0
|
||
mov [esi+3Ch], edi
|
||
mov ecx, [ebx]
|
||
push edi
|
||
call ecx
|
||
add esp, 8
|
||
mov [esi+30h], eax
|
||
pop ebx
|
||
|
||
loc_4CB93E: ; CODE XREF: sub_4CB8F0+2Bj
|
||
xor eax, eax
|
||
cmp [esi+30h], eax
|
||
pop edi
|
||
setnz al
|
||
pop esi
|
||
retn
|
||
sub_4CB8F0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CB950: ; DATA XREF: sub_4CCAA0+1Co
|
||
mov eax, [esp+4]
|
||
mov eax, [eax]
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CB960: ; DATA XREF: sub_4CCAA0+Eo
|
||
mov eax, [esp+4]
|
||
mov ecx, [eax]
|
||
mov edx, [esp+8]
|
||
mov al, [edx+ecx]
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
loc_4CB970: ; DATA XREF: sub_4CCAA0+15o
|
||
mov ecx, [esp+4]
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
; Attributes: library function
|
||
|
||
; public: int __thiscall CRect::Height(void)const
|
||
?Height@CRect@@QBEHXZ proc near
|
||
mov eax, [ecx+0Ch]
|
||
sub eax, [ecx+4]
|
||
retn
|
||
?Height@CRect@@QBEHXZ endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CB980 proc near ; CODE XREF: sub_4CBC80+46p
|
||
; sub_4CBD50+61p
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push esi
|
||
mov esi, [esp+4+arg_0]
|
||
cmp dword ptr [esi+38h], 0
|
||
jnz short loc_4CB9F0
|
||
cmp dword ptr [esi+68h], 0
|
||
jnz short loc_4CB9F0
|
||
mov eax, [esi]
|
||
sub eax, [esi+4]
|
||
mov ecx, [esi+30h]
|
||
add eax, [esi+0Ch]
|
||
sub ecx, eax
|
||
add ecx, [esi+3Ch]
|
||
jz short loc_4CB9F0
|
||
push edi
|
||
|
||
loc_4CB9A4: ; CODE XREF: sub_4CB980+63j
|
||
mov edx, [esi+34h]
|
||
lea edi, [esp+8+arg_0]
|
||
push edi
|
||
push ecx
|
||
push eax
|
||
mov eax, [edx]
|
||
push edx
|
||
call eax
|
||
add esp, 10h
|
||
test eax, eax
|
||
mov [esi+68h], eax
|
||
jnz short loc_4CB9EF
|
||
mov eax, [esp+8+arg_0]
|
||
test eax, eax
|
||
jz short loc_4CB9E8
|
||
add [esi+0Ch], eax
|
||
mov eax, [esi+0Ch]
|
||
sub eax, [esi+4]
|
||
cmp eax, [esi+44h]
|
||
ja short loc_4CB9EF
|
||
mov eax, [esi]
|
||
sub eax, [esi+4]
|
||
mov ecx, [esi+30h]
|
||
add eax, [esi+0Ch]
|
||
sub ecx, eax
|
||
add ecx, [esi+3Ch]
|
||
jnz short loc_4CB9A4
|
||
pop edi
|
||
pop esi
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CB9E8: ; CODE XREF: sub_4CB980+43j
|
||
mov dword ptr [esi+38h], 1
|
||
|
||
loc_4CB9EF: ; CODE XREF: sub_4CB980+3Bj
|
||
; sub_4CB980+51j
|
||
pop edi
|
||
|
||
loc_4CB9F0: ; CODE XREF: sub_4CB980+9j
|
||
; sub_4CB980+Fj ...
|
||
pop esi
|
||
retn
|
||
sub_4CB980 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CBA00 proc near ; CODE XREF: sub_4CBD50+58p
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
push edi
|
||
mov edi, [esp+10h+arg_0]
|
||
mov esi, [edi+0Ch]
|
||
mov eax, [edi+40h]
|
||
sub esi, [edi+4]
|
||
mov ebx, [edi]
|
||
mov ebp, [edi+30h]
|
||
add esi, eax
|
||
sub ebx, eax
|
||
mov eax, dword_553598
|
||
test eax, eax
|
||
jnz short loc_4CBA44
|
||
push 0Ch ; Size
|
||
call _operator_new ; operator new(uint)
|
||
xor ecx, ecx
|
||
add esp, 4
|
||
cmp eax, ecx
|
||
jz short loc_4CBA3D
|
||
mov [eax], ecx
|
||
mov [eax+4], ecx
|
||
mov [eax+8], ecx
|
||
jmp short loc_4CBA3F
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBA3D: ; CODE XREF: sub_4CBA00+31j
|
||
xor eax, eax
|
||
|
||
loc_4CBA3F: ; CODE XREF: sub_4CBA00+3Bj
|
||
mov dword_553598, eax
|
||
|
||
loc_4CBA44: ; CODE XREF: sub_4CBA00+21j
|
||
mov eax, [eax+8]
|
||
test eax, eax
|
||
jz short loc_4CBA53
|
||
push esi
|
||
push ebx
|
||
push ebp
|
||
call eax
|
||
add esp, 0Ch
|
||
|
||
loc_4CBA53: ; CODE XREF: sub_4CBA00+49j
|
||
mov eax, [edi+30h]
|
||
add eax, [edi+40h]
|
||
mov [edi], eax
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn
|
||
sub_4CBA00 endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CBA60 proc near ; CODE XREF: sub_4D0270+D2p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
arg_C = dword ptr 10h
|
||
arg_10 = dword ptr 14h
|
||
arg_14 = dword ptr 18h
|
||
|
||
push ebx
|
||
push esi
|
||
push edi
|
||
mov edi, [esp+0Ch+arg_4]
|
||
cmp edi, 0C0000000h
|
||
jbe short loc_4CBAA2
|
||
mov esi, [esp+0Ch+arg_0]
|
||
mov eax, [esi+20h]
|
||
mov edi, [esp+0Ch+arg_14]
|
||
mov ecx, [edi+4]
|
||
push eax
|
||
call ecx
|
||
xor ebx, ebx
|
||
add esp, 4
|
||
cmp [esi+4Ch], ebx
|
||
mov [esi+20h], ebx
|
||
jnz short loc_4CBA9C
|
||
mov edx, [esi+30h]
|
||
mov eax, [edi+4]
|
||
push edx
|
||
call eax
|
||
add esp, 4
|
||
mov [esi+30h], ebx
|
||
|
||
loc_4CBA9C: ; CODE XREF: sub_4CBA60+2Bj
|
||
pop edi
|
||
pop esi
|
||
xor eax, eax
|
||
pop ebx
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBAA2: ; CODE XREF: sub_4CBA60+Dj
|
||
mov eax, edi
|
||
shr eax, 1
|
||
cmp edi, 80000000h
|
||
jbe short loc_4CBAB3
|
||
mov eax, edi
|
||
shr eax, 2
|
||
|
||
loc_4CBAB3: ; CODE XREF: sub_4CBA60+4Cj
|
||
mov ecx, [esp+0Ch+arg_8]
|
||
mov esi, [esp+0Ch+arg_0]
|
||
mov ebx, [esp+0Ch+arg_C]
|
||
lea edx, [edi+ecx+1]
|
||
push ebp
|
||
mov [esi+40h], edx
|
||
mov edx, [esp+10h+arg_10]
|
||
add ecx, ebx
|
||
lea ebp, [ebx+edx]
|
||
add ecx, edx
|
||
mov [esi+44h], ebp
|
||
mov ebp, [esp+10h+arg_14]
|
||
shr ecx, 1
|
||
push ebp
|
||
lea eax, [ecx+eax+80000h]
|
||
push eax
|
||
push esi
|
||
call sub_4CB8F0
|
||
add esp, 0Ch
|
||
test eax, eax
|
||
jz loc_4CBBEA
|
||
mov edx, [esi+48h]
|
||
mov [esi+1Ch], ebx
|
||
xor ebx, ebx
|
||
cmp edx, 2
|
||
lea ebp, [edi+1]
|
||
mov [esi+5Ch], ebx
|
||
jnz short loc_4CBB0F
|
||
mov eax, 0FFFFh
|
||
jmp short loc_4CBB49
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBB0F: ; CODE XREF: sub_4CBA60+A6j
|
||
lea ecx, [edi-1]
|
||
mov eax, ecx
|
||
shr eax, 1
|
||
or ecx, eax
|
||
mov eax, ecx
|
||
shr eax, 2
|
||
or ecx, eax
|
||
mov eax, ecx
|
||
shr eax, 4
|
||
or ecx, eax
|
||
mov eax, ecx
|
||
or eax, 1FFFE00h
|
||
shr eax, 8
|
||
or eax, ecx
|
||
shr eax, 1
|
||
cmp eax, 1000000h
|
||
jbe short loc_4CBB49
|
||
cmp edx, 3
|
||
jnz short loc_4CBB47
|
||
mov eax, 0FFFFFFh
|
||
jmp short loc_4CBB49
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBB47: ; CODE XREF: sub_4CBA60+DEj
|
||
shr eax, 1
|
||
|
||
loc_4CBB49: ; CODE XREF: sub_4CBA60+ADj
|
||
; sub_4CBA60+D9j ...
|
||
mov [esi+28h], eax
|
||
add eax, 1
|
||
cmp edx, 2
|
||
jbe short loc_4CBB5B
|
||
mov dword ptr [esi+5Ch], 400h
|
||
|
||
loc_4CBB5B: ; CODE XREF: sub_4CBA60+F2j
|
||
cmp edx, 3
|
||
jbe short loc_4CBB67
|
||
add dword ptr [esi+5Ch], 10000h
|
||
|
||
loc_4CBB67: ; CODE XREF: sub_4CBA60+FEj
|
||
cmp edx, 4
|
||
jbe short loc_4CBB73
|
||
add dword ptr [esi+5Ch], 100000h
|
||
|
||
loc_4CBB73: ; CODE XREF: sub_4CBA60+10Aj
|
||
mov ecx, [esi+60h]
|
||
mov edx, [esi+5Ch]
|
||
add ecx, [esi+64h]
|
||
add eax, edx
|
||
cmp [esi+50h], ebx
|
||
mov [esi+58h], edi
|
||
mov [esi+60h], eax
|
||
mov [esi+18h], ebp
|
||
lea edx, [ebp+ebp+0]
|
||
jnz short loc_4CBB92
|
||
mov edx, ebp
|
||
|
||
loc_4CBB92: ; CODE XREF: sub_4CBA60+12Ej
|
||
lea edi, [eax+edx]
|
||
mov eax, [esi+20h]
|
||
cmp eax, ebx
|
||
mov [esi+64h], edx
|
||
jz short loc_4CBBA3
|
||
cmp ecx, edi
|
||
jz short loc_4CBBE0
|
||
|
||
loc_4CBBA3: ; CODE XREF: sub_4CBA60+13Dj
|
||
mov ebp, [esp+10h+arg_14]
|
||
push eax
|
||
mov eax, [ebp+4]
|
||
call eax
|
||
lea eax, ds:0[edi*4]
|
||
mov ecx, eax
|
||
shr ecx, 2
|
||
add esp, 4
|
||
cmp ecx, edi
|
||
mov [esi+20h], ebx
|
||
jz short loc_4CBBC7
|
||
xor eax, eax
|
||
jmp short loc_4CBBD0
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBBC7: ; CODE XREF: sub_4CBA60+161j
|
||
mov edx, [ebp+0]
|
||
push eax
|
||
call edx
|
||
add esp, 4
|
||
|
||
loc_4CBBD0: ; CODE XREF: sub_4CBA60+165j
|
||
cmp eax, ebx
|
||
mov [esi+20h], eax
|
||
jz short loc_4CBBEC
|
||
mov ecx, [esi+60h]
|
||
lea edx, [eax+ecx*4]
|
||
mov [esi+24h], edx
|
||
|
||
loc_4CBBE0: ; CODE XREF: sub_4CBA60+141j
|
||
pop ebp
|
||
pop edi
|
||
pop esi
|
||
mov eax, 1
|
||
pop ebx
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBBEA: ; CODE XREF: sub_4CBA60+8Fj
|
||
xor ebx, ebx
|
||
|
||
loc_4CBBEC: ; CODE XREF: sub_4CBA60+175j
|
||
mov eax, [esi+20h]
|
||
mov ecx, [ebp+4]
|
||
push eax
|
||
call ecx
|
||
add esp, 4
|
||
cmp [esi+4Ch], ebx
|
||
mov [esi+20h], ebx
|
||
jnz short loc_4CBC0F
|
||
mov edx, [esi+30h]
|
||
mov eax, [ebp+4]
|
||
push edx
|
||
call eax
|
||
add esp, 4
|
||
mov [esi+30h], ebx
|
||
|
||
loc_4CBC0F: ; CODE XREF: sub_4CBA60+19Ej
|
||
pop ebp
|
||
pop edi
|
||
pop esi
|
||
xor eax, eax
|
||
pop ebx
|
||
retn
|
||
sub_4CBA60 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CBC20 proc near ; CODE XREF: sub_4CBD50+79p
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
mov eax, [esp+arg_0]
|
||
mov edx, [eax+18h]
|
||
sub edx, [eax+14h]
|
||
push ebx
|
||
mov ebx, [eax+4]
|
||
or ecx, 0FFFFFFFFh
|
||
sub ecx, ebx
|
||
cmp edx, ecx
|
||
push esi
|
||
jnb short loc_4CBC3A
|
||
mov ecx, edx
|
||
|
||
loc_4CBC3A: ; CODE XREF: sub_4CBC20+16j
|
||
mov esi, [eax+0Ch]
|
||
sub esi, ebx
|
||
push edi
|
||
mov edi, [eax+44h]
|
||
mov edx, esi
|
||
cmp edx, edi
|
||
ja short loc_4CBC54
|
||
test edx, edx
|
||
jbe short loc_4CBC56
|
||
mov edx, 1
|
||
jmp short loc_4CBC56
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBC54: ; CODE XREF: sub_4CBC20+27j
|
||
sub edx, edi
|
||
|
||
loc_4CBC56: ; CODE XREF: sub_4CBC20+2Bj
|
||
; sub_4CBC20+32j
|
||
cmp edx, ecx
|
||
pop edi
|
||
jnb short loc_4CBC5D
|
||
mov ecx, edx
|
||
|
||
loc_4CBC5D: ; CODE XREF: sub_4CBC20+39j
|
||
mov edx, [eax+1Ch]
|
||
cmp esi, edx
|
||
jbe short loc_4CBC66
|
||
mov esi, edx
|
||
|
||
loc_4CBC66: ; CODE XREF: sub_4CBC20+42j
|
||
add ebx, ecx
|
||
mov [eax+10h], esi
|
||
pop esi
|
||
mov [eax+8], ebx
|
||
pop ebx
|
||
retn
|
||
sub_4CBC20 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CBC80 proc near ; DATA XREF: sub_4CCAA0+8o
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push ebx
|
||
push esi
|
||
mov esi, [esp+8+arg_0]
|
||
xor eax, eax
|
||
cmp [esi+60h], eax
|
||
jbe short loc_4CBCA2
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CBC90: ; CODE XREF: sub_4CBC80+20j
|
||
mov ecx, [esi+20h]
|
||
mov dword ptr [ecx+eax*4], 0
|
||
add eax, 1
|
||
cmp eax, [esi+60h]
|
||
jb short loc_4CBC90
|
||
|
||
loc_4CBCA2: ; CODE XREF: sub_4CBC80+Bj
|
||
mov eax, [esi+18h]
|
||
mov edx, [esi+30h]
|
||
push esi
|
||
mov dword ptr [esi+14h], 0
|
||
mov [esi], edx
|
||
mov [esi+0Ch], eax
|
||
mov [esi+4], eax
|
||
mov dword ptr [esi+68h], 0
|
||
mov dword ptr [esi+38h], 0
|
||
call sub_4CB980
|
||
mov eax, [esi+18h]
|
||
mov ebx, [esi+4]
|
||
sub eax, [esi+14h]
|
||
or ecx, 0FFFFFFFFh
|
||
sub ecx, ebx
|
||
add esp, 4
|
||
cmp eax, ecx
|
||
jnb short loc_4CBCE2
|
||
mov ecx, eax
|
||
|
||
loc_4CBCE2: ; CODE XREF: sub_4CBC80+5Ej
|
||
mov edx, [esi+0Ch]
|
||
sub edx, ebx
|
||
push edi
|
||
mov edi, [esi+44h]
|
||
mov eax, edx
|
||
cmp eax, edi
|
||
ja short loc_4CBCFC
|
||
test eax, eax
|
||
jbe short loc_4CBCFE
|
||
mov eax, 1
|
||
jmp short loc_4CBCFE
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBCFC: ; CODE XREF: sub_4CBC80+6Fj
|
||
sub eax, edi
|
||
|
||
loc_4CBCFE: ; CODE XREF: sub_4CBC80+73j
|
||
; sub_4CBC80+7Aj
|
||
cmp eax, ecx
|
||
pop edi
|
||
jnb short loc_4CBD05
|
||
mov ecx, eax
|
||
|
||
loc_4CBD05: ; CODE XREF: sub_4CBC80+81j
|
||
mov eax, edx
|
||
mov edx, [esi+1Ch]
|
||
cmp eax, edx
|
||
jbe short loc_4CBD10
|
||
mov eax, edx
|
||
|
||
loc_4CBD10: ; CODE XREF: sub_4CBC80+8Cj
|
||
add ebx, ecx
|
||
mov [esi+8], ebx
|
||
mov [esi+10h], eax
|
||
pop esi
|
||
pop ebx
|
||
retn
|
||
sub_4CBC80 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CBD20 proc near ; CODE XREF: sub_4CBD50+26p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
push edi
|
||
mov edi, [esp+4+arg_8]
|
||
xor eax, eax
|
||
test edi, edi
|
||
jbe short loc_4CBD4C
|
||
mov edx, [esp+4+arg_4]
|
||
push esi
|
||
mov esi, [esp+8+arg_0]
|
||
|
||
loc_4CBD34: ; CODE XREF: sub_4CBD20+29j
|
||
mov ecx, [edx+eax*4]
|
||
cmp ecx, esi
|
||
ja short loc_4CBD3F
|
||
xor ecx, ecx
|
||
jmp short loc_4CBD41
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBD3F: ; CODE XREF: sub_4CBD20+19j
|
||
sub ecx, esi
|
||
|
||
loc_4CBD41: ; CODE XREF: sub_4CBD20+1Dj
|
||
mov [edx+eax*4], ecx
|
||
add eax, 1
|
||
cmp eax, edi
|
||
jb short loc_4CBD34
|
||
pop esi
|
||
|
||
loc_4CBD4C: ; CODE XREF: sub_4CBD20+9j
|
||
pop edi
|
||
retn
|
||
sub_4CBD20 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CBD50 proc near ; CODE XREF: .text:004CC1A1p
|
||
; .text:004CC20Ap ...
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push esi
|
||
mov esi, [esp+4+arg_0]
|
||
cmp dword ptr [esi+4], 0FFFFFFFFh
|
||
jnz short loc_4CBD88
|
||
mov eax, [esi+64h]
|
||
add eax, [esi+60h]
|
||
mov ecx, [esi+20h]
|
||
push edi
|
||
mov edi, 0FFFFFFFEh
|
||
sub edi, [esi+58h]
|
||
push eax
|
||
push ecx
|
||
and edi, 0FFFFFC00h
|
||
push edi
|
||
call sub_4CBD20
|
||
sub [esi+8], edi
|
||
sub [esi+4], edi
|
||
add esp, 0Ch
|
||
sub [esi+0Ch], edi
|
||
pop edi
|
||
|
||
loc_4CBD88: ; CODE XREF: sub_4CBD50+9j
|
||
cmp dword ptr [esi+38h], 0
|
||
jnz short loc_4CBDB9
|
||
mov edx, [esi+0Ch]
|
||
sub edx, [esi+4]
|
||
mov eax, [esi+44h]
|
||
cmp eax, edx
|
||
jnz short loc_4CBDB9
|
||
mov ecx, [esi+3Ch]
|
||
add ecx, [esi+30h]
|
||
sub ecx, [esi]
|
||
cmp ecx, eax
|
||
ja short loc_4CBDB0
|
||
push esi
|
||
call sub_4CBA00
|
||
add esp, 4
|
||
|
||
loc_4CBDB0: ; CODE XREF: sub_4CBD50+55j
|
||
push esi
|
||
call sub_4CB980
|
||
add esp, 4
|
||
|
||
loc_4CBDB9: ; CODE XREF: sub_4CBD50+3Cj
|
||
; sub_4CBD50+49j
|
||
mov edx, [esi+14h]
|
||
cmp edx, [esi+18h]
|
||
jnz short loc_4CBDC8
|
||
mov dword ptr [esi+14h], 0
|
||
|
||
loc_4CBDC8: ; CODE XREF: sub_4CBD50+6Fj
|
||
push esi
|
||
call sub_4CBC20
|
||
add esp, 4
|
||
pop esi
|
||
retn
|
||
sub_4CBD50 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CBDE0 proc near ; CODE XREF: sub_4CC5C0+1B7p
|
||
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
arg_C = dword ptr 10h
|
||
arg_10 = dword ptr 14h
|
||
arg_14 = dword ptr 18h
|
||
arg_18 = dword ptr 1Ch
|
||
arg_1C = dword ptr 20h
|
||
arg_20 = dword ptr 24h
|
||
arg_24 = dword ptr 28h
|
||
|
||
push ecx
|
||
mov edx, [esp+4+arg_4]
|
||
mov ecx, [esp+4+arg_10]
|
||
mov eax, [esp+4+arg_14]
|
||
push ebx
|
||
mov [ecx+eax*4], edx
|
||
mov ecx, [esp+8+arg_8]
|
||
push ebp
|
||
push esi
|
||
sub ecx, edx
|
||
cmp [esp+10h+arg_1C], 0
|
||
push edi
|
||
jz loc_4CBEAC
|
||
mov ebp, [esp+14h+arg_C]
|
||
mov ebx, [esp+14h+arg_24]
|
||
jmp short loc_4CBE14
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CBE10: ; CODE XREF: sub_4CBDE0+C6j
|
||
mov eax, [esp+14h+arg_14]
|
||
|
||
loc_4CBE14: ; CODE XREF: sub_4CBDE0+2Dj
|
||
mov esi, [esp+14h+arg_18]
|
||
sub [esp+14h+arg_1C], 1
|
||
cmp ecx, esi
|
||
jnb loc_4CBEAC
|
||
mov edx, ebp
|
||
sub edx, ecx
|
||
cmp eax, ecx
|
||
sbb edi, edi
|
||
and edi, esi
|
||
sub edi, ecx
|
||
add edi, eax
|
||
mov eax, [esp+14h+arg_10]
|
||
mov eax, [eax+edi*4]
|
||
mov [esp+14h+arg_4], eax
|
||
mov al, [edx+ebx]
|
||
cmp al, [ebx+ebp]
|
||
jnz short loc_4CBE99
|
||
mov al, [edx]
|
||
cmp al, [ebp+0]
|
||
jnz short loc_4CBE99
|
||
mov eax, [esp+14h+arg_0]
|
||
mov esi, 1
|
||
cmp eax, esi
|
||
jz short loc_4CBE7A
|
||
sub edx, ebp
|
||
lea edi, [ebp+1]
|
||
mov [esp+14h+var_4], edx
|
||
jmp short loc_4CBE69
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBE65: ; CODE XREF: sub_4CBDE0+98j
|
||
mov edx, [esp+14h+var_4]
|
||
|
||
loc_4CBE69: ; CODE XREF: sub_4CBDE0+83j
|
||
mov dl, [edx+edi]
|
||
cmp dl, [edi]
|
||
jnz short loc_4CBE7A
|
||
add esi, 1
|
||
add edi, 1
|
||
cmp esi, eax
|
||
jnz short loc_4CBE65
|
||
|
||
loc_4CBE7A: ; CODE XREF: sub_4CBDE0+78j
|
||
; sub_4CBDE0+8Ej
|
||
cmp ebx, esi
|
||
jnb short loc_4CBE99
|
||
mov edx, [esp+14h+arg_20]
|
||
mov [edx], esi
|
||
add edx, 4
|
||
add ecx, 0FFFFFFFFh
|
||
mov [edx], ecx
|
||
add edx, 4
|
||
cmp esi, eax
|
||
mov ebx, esi
|
||
mov [esp+14h+arg_20], edx
|
||
jz short loc_4CBEB6
|
||
|
||
loc_4CBE99: ; CODE XREF: sub_4CBDE0+64j
|
||
; sub_4CBDE0+6Bj ...
|
||
mov ecx, [esp+14h+arg_8]
|
||
sub ecx, [esp+14h+arg_4]
|
||
cmp [esp+14h+arg_1C], 0
|
||
jnz loc_4CBE10
|
||
|
||
loc_4CBEAC: ; CODE XREF: sub_4CBDE0+1Fj
|
||
; sub_4CBDE0+3Fj
|
||
mov eax, [esp+14h+arg_20]
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
pop ecx
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBEB6: ; CODE XREF: sub_4CBDE0+B7j
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
mov eax, edx
|
||
pop ebx
|
||
pop ecx
|
||
retn
|
||
sub_4CBDE0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CBEC0 proc near ; CODE XREF: .text:004CC1E7p
|
||
; sub_4CC220+14Ep ...
|
||
|
||
var_10 = dword ptr -10h
|
||
var_C = dword ptr -0Ch
|
||
var_8 = dword ptr -8
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
arg_C = dword ptr 10h
|
||
arg_10 = dword ptr 14h
|
||
arg_14 = dword ptr 18h
|
||
arg_18 = dword ptr 1Ch
|
||
arg_1C = dword ptr 20h
|
||
arg_20 = dword ptr 24h
|
||
arg_24 = dword ptr 28h
|
||
|
||
sub esp, 10h
|
||
mov eax, [esp+10h+arg_10]
|
||
mov edx, [esp+10h+arg_8]
|
||
sub edx, [esp+10h+arg_4]
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
push edi
|
||
mov edi, [esp+20h+arg_14]
|
||
lea eax, [eax+edi*8]
|
||
lea ecx, [eax+4]
|
||
mov [esp+20h+var_C], ecx
|
||
xor ecx, ecx
|
||
xor ebx, ebx
|
||
cmp [esp+20h+arg_1C], ecx
|
||
mov ebp, eax
|
||
mov [esp+20h+var_10], ebp
|
||
mov [esp+20h+var_8], ecx
|
||
mov [esp+20h+var_4], ebx
|
||
jnz short loc_4CBF24
|
||
|
||
loc_4CBEF9: ; CODE XREF: sub_4CBEC0+6Fj
|
||
; sub_4CBEC0+151j
|
||
mov edx, [esp+20h+var_C]
|
||
mov eax, [esp+20h+arg_20]
|
||
pop edi
|
||
pop esi
|
||
mov dword ptr [ebp+0], 0
|
||
pop ebp
|
||
mov dword ptr [edx], 0
|
||
pop ebx
|
||
add esp, 10h
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
jmp short loc_4CBF20
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CBF20: ; CODE XREF: sub_4CBEC0+56j
|
||
; sub_4CBEC0+14Bj
|
||
mov edi, [esp+20h+arg_14]
|
||
|
||
loc_4CBF24: ; CODE XREF: sub_4CBEC0+37j
|
||
mov eax, [esp+20h+arg_18]
|
||
sub [esp+20h+arg_1C], 1
|
||
cmp edx, eax
|
||
jnb short loc_4CBEF9
|
||
cmp edi, edx
|
||
sbb esi, esi
|
||
and esi, eax
|
||
mov eax, [esp+20h+arg_10]
|
||
sub esi, edx
|
||
add esi, edi
|
||
lea eax, [eax+esi*8]
|
||
mov esi, [esp+20h+arg_C]
|
||
sub esi, edx
|
||
cmp ecx, ebx
|
||
jb short loc_4CBF4E
|
||
mov ecx, ebx
|
||
|
||
loc_4CBF4E: ; CODE XREF: sub_4CBEC0+8Aj
|
||
mov bl, [ecx+esi]
|
||
mov edi, [esp+20h+arg_C]
|
||
cmp bl, [ecx+edi]
|
||
jnz short loc_4CBFB8
|
||
add ecx, 1
|
||
cmp ecx, [esp+20h+arg_0]
|
||
jz short loc_4CBF93
|
||
mov bl, [ecx+esi]
|
||
cmp bl, [ecx+edi]
|
||
jnz short loc_4CBF93
|
||
add ecx, 1
|
||
cmp ecx, [esp+20h+arg_0]
|
||
jz short loc_4CBF93
|
||
mov ebx, edi
|
||
mov ebp, esi
|
||
lea edi, [ecx+ebx]
|
||
sub ebp, ebx
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CBF80: ; CODE XREF: sub_4CBEC0+D1j
|
||
mov bl, [edi+ebp]
|
||
cmp bl, [edi]
|
||
jnz short loc_4CBF93
|
||
add ecx, 1
|
||
add edi, 1
|
||
cmp ecx, [esp+20h+arg_0]
|
||
jnz short loc_4CBF80
|
||
|
||
loc_4CBF93: ; CODE XREF: sub_4CBEC0+A1j
|
||
; sub_4CBEC0+A9j ...
|
||
cmp [esp+20h+arg_24], ecx
|
||
jnb short loc_4CBFB8
|
||
mov edi, [esp+20h+arg_20]
|
||
mov [edi], ecx
|
||
add edi, 4
|
||
add edx, 0FFFFFFFFh
|
||
mov [edi], edx
|
||
add edi, 4
|
||
cmp ecx, [esp+20h+arg_0]
|
||
mov [esp+20h+arg_24], ecx
|
||
mov [esp+20h+arg_20], edi
|
||
jz short loc_4CC016
|
||
|
||
loc_4CBFB8: ; CODE XREF: sub_4CBEC0+98j
|
||
; sub_4CBEC0+D7j
|
||
mov dl, [ecx+esi]
|
||
mov esi, [esp+20h+arg_C]
|
||
cmp dl, [ecx+esi]
|
||
mov edx, [esp+20h+arg_4]
|
||
jnb short loc_4CBFE4
|
||
mov esi, [esp+20h+var_10]
|
||
lea ebp, [eax+4]
|
||
mov ebx, ecx
|
||
mov ecx, [esp+20h+var_8]
|
||
mov [esi], edx
|
||
mov eax, [ebp+0]
|
||
mov [esp+20h+var_10], ebp
|
||
mov [esp+20h+var_4], ebx
|
||
jmp short loc_4CBFFC
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CBFE4: ; CODE XREF: sub_4CBEC0+106j
|
||
mov esi, [esp+20h+var_C]
|
||
mov ebp, [esp+20h+var_10]
|
||
mov ebx, [esp+20h+var_4]
|
||
mov [esi], edx
|
||
mov [esp+20h+var_C], eax
|
||
mov eax, [eax]
|
||
mov [esp+20h+var_8], ecx
|
||
|
||
loc_4CBFFC: ; CODE XREF: sub_4CBEC0+122j
|
||
mov edx, [esp+20h+arg_8]
|
||
sub edx, eax
|
||
cmp [esp+20h+arg_1C], 0
|
||
mov [esp+20h+arg_4], eax
|
||
jnz loc_4CBF20
|
||
jmp loc_4CBEF9
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC016: ; CODE XREF: sub_4CBEC0+F6j
|
||
mov ecx, [eax]
|
||
mov edx, [esp+20h+var_10]
|
||
mov [edx], ecx
|
||
mov eax, [eax+4]
|
||
mov ecx, [esp+20h+var_C]
|
||
mov [ecx], eax
|
||
mov eax, edi
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
add esp, 10h
|
||
retn
|
||
sub_4CBEC0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CC040 proc near ; CODE XREF: sub_4CC220+F8p
|
||
; sub_4CC3B0+173p ...
|
||
|
||
var_10 = dword ptr -10h
|
||
var_C = dword ptr -0Ch
|
||
var_8 = dword ptr -8
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
arg_C = dword ptr 10h
|
||
arg_10 = dword ptr 14h
|
||
arg_14 = dword ptr 18h
|
||
arg_18 = dword ptr 1Ch
|
||
arg_1C = dword ptr 20h
|
||
|
||
sub esp, 10h
|
||
mov eax, [esp+10h+arg_10]
|
||
mov edx, [esp+10h+arg_4]
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+1Ch+arg_14]
|
||
lea eax, [eax+esi*8]
|
||
lea ecx, [eax+4]
|
||
push edi
|
||
mov edi, eax
|
||
mov eax, [esp+20h+arg_8]
|
||
xor ebx, ebx
|
||
xor ebp, ebp
|
||
sub eax, edx
|
||
cmp [esp+20h+arg_1C], ebx
|
||
mov [esp+20h+var_C], ecx
|
||
mov [esp+20h+var_10], edi
|
||
mov [esp+20h+var_8], ebx
|
||
mov [esp+20h+var_4], ebp
|
||
jz loc_4CC159
|
||
nop
|
||
|
||
loc_4CC080: ; CODE XREF: sub_4CC040+114j
|
||
sub [esp+20h+arg_1C], 1
|
||
cmp eax, [esp+20h+arg_18]
|
||
jnb loc_4CC159
|
||
cmp esi, eax
|
||
sbb ecx, ecx
|
||
and ecx, [esp+20h+arg_18]
|
||
sub ecx, eax
|
||
add ecx, esi
|
||
mov esi, [esp+20h+arg_10]
|
||
lea edi, [esi+ecx*8]
|
||
mov ecx, [esp+20h+arg_C]
|
||
sub ecx, eax
|
||
cmp ebx, ebp
|
||
mov eax, ebx
|
||
jb short loc_4CC0B0
|
||
mov eax, ebp
|
||
|
||
loc_4CC0B0: ; CODE XREF: sub_4CC040+6Cj
|
||
mov bl, [eax+ecx]
|
||
mov esi, [esp+20h+arg_C]
|
||
cmp bl, [eax+esi]
|
||
jnz short loc_4CC102
|
||
add eax, 1
|
||
cmp eax, [esp+20h+arg_0]
|
||
jz short loc_4CC0E3
|
||
mov ebx, esi
|
||
mov ebp, ecx
|
||
lea esi, [eax+ebx]
|
||
sub ebp, ebx
|
||
mov edi, edi
|
||
|
||
loc_4CC0D0: ; CODE XREF: sub_4CC040+A1j
|
||
mov bl, [esi+ebp]
|
||
cmp bl, [esi]
|
||
jnz short loc_4CC0FC
|
||
add eax, 1
|
||
add esi, 1
|
||
cmp eax, [esp+20h+arg_0]
|
||
jnz short loc_4CC0D0
|
||
|
||
loc_4CC0E3: ; CODE XREF: sub_4CC040+83j
|
||
; sub_4CC040+C0j
|
||
mov edx, [edi]
|
||
mov eax, [esp+20h+var_10]
|
||
mov [eax], edx
|
||
mov ecx, [edi+4]
|
||
mov edx, [esp+20h+var_C]
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
mov [edx], ecx
|
||
pop ebx
|
||
add esp, 10h
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC0FC: ; CODE XREF: sub_4CC040+95j
|
||
cmp eax, [esp+20h+arg_0]
|
||
jz short loc_4CC0E3
|
||
|
||
loc_4CC102: ; CODE XREF: sub_4CC040+7Aj
|
||
mov cl, [eax+ecx]
|
||
mov esi, [esp+20h+arg_C]
|
||
cmp cl, [eax+esi]
|
||
jnb short loc_4CC129
|
||
mov ecx, [esp+20h+var_10]
|
||
mov ebx, [esp+20h+var_8]
|
||
add edi, 4
|
||
mov ebp, eax
|
||
mov [ecx], edx
|
||
mov edx, [edi]
|
||
mov [esp+20h+var_10], edi
|
||
mov [esp+20h+var_4], ebp
|
||
jmp short loc_4CC143
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC129: ; CODE XREF: sub_4CC040+CCj
|
||
mov ecx, [esp+20h+var_C]
|
||
mov ebp, [esp+20h+var_4]
|
||
mov [ecx], edx
|
||
mov edx, [edi]
|
||
mov ebx, eax
|
||
mov [esp+20h+var_C], edi
|
||
mov edi, [esp+20h+var_10]
|
||
mov [esp+20h+var_8], ebx
|
||
|
||
loc_4CC143: ; CODE XREF: sub_4CC040+E7j
|
||
mov eax, [esp+20h+arg_8]
|
||
sub eax, edx
|
||
cmp [esp+20h+arg_1C], 0
|
||
jz short loc_4CC159
|
||
mov esi, [esp+20h+arg_14]
|
||
jmp loc_4CC080
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC159: ; CODE XREF: sub_4CC040+39j
|
||
; sub_4CC040+49j ...
|
||
mov eax, [esp+20h+var_C]
|
||
mov dword ptr [edi], 0
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
mov dword ptr [eax], 0
|
||
pop ebx
|
||
add esp, 10h
|
||
retn
|
||
sub_4CC040 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CC180: ; DATA XREF: sub_4CCAA0+40o
|
||
push esi
|
||
mov esi, [esp+8]
|
||
mov edx, [esi+10h]
|
||
cmp edx, 2
|
||
jnb short loc_4CC1AD
|
||
add dword ptr [esi+4], 1
|
||
mov eax, [esi+4]
|
||
add dword ptr [esi+14h], 1
|
||
add dword ptr [esi], 1
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC1A9
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC1A9: ; CODE XREF: .text:004CC19Ej
|
||
xor eax, eax
|
||
pop esi
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC1AD: ; CODE XREF: .text:004CC18Bj
|
||
mov eax, [esi]
|
||
xor ecx, ecx
|
||
mov ch, [eax+1]
|
||
push ebx
|
||
mov ebx, [esp+10h]
|
||
push edi
|
||
mov edi, [esi+4]
|
||
push 1
|
||
push ebx
|
||
mov cl, [eax]
|
||
mov eax, ecx
|
||
mov ecx, [esi+20h]
|
||
lea eax, [ecx+eax*4]
|
||
mov ecx, [eax]
|
||
mov [eax], edi
|
||
mov eax, [esi+2Ch]
|
||
push eax
|
||
mov eax, [esi+18h]
|
||
push eax
|
||
mov eax, [esi+14h]
|
||
push eax
|
||
mov eax, [esi+24h]
|
||
push eax
|
||
mov eax, [esi]
|
||
push eax
|
||
mov eax, [esi+4]
|
||
push eax
|
||
push ecx
|
||
push edx
|
||
call sub_4CBEC0
|
||
add dword ptr [esi+4], 1
|
||
add dword ptr [esi+14h], 1
|
||
add dword ptr [esi], 1
|
||
mov edi, eax
|
||
mov eax, [esi+4]
|
||
sub edi, ebx
|
||
add esp, 28h
|
||
sar edi, 2
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC212
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC212: ; CODE XREF: .text:004CC207j
|
||
mov eax, edi
|
||
pop edi
|
||
pop ebx
|
||
pop esi
|
||
retn
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CC220 proc near ; DATA XREF: sub_4CCAA0+54o
|
||
|
||
var_8 = dword ptr -8
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
sub esp, 8
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
mov eax, [esi+10h]
|
||
cmp eax, 3
|
||
mov [esp+0Ch+arg_0], eax
|
||
jnb short loc_4CC259
|
||
mov eax, 1
|
||
add [esi+14h], eax
|
||
add [esi], eax
|
||
add [esi+4], eax
|
||
mov eax, [esi+4]
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC252
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC252: ; CODE XREF: sub_4CC220+27j
|
||
xor eax, eax
|
||
pop esi
|
||
add esp, 8
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC259: ; CODE XREF: sub_4CC220+12j
|
||
push ebx
|
||
mov ebx, [esi+20h]
|
||
push ebp
|
||
xor edx, edx
|
||
push edi
|
||
mov edi, [esi]
|
||
mov dh, [edi+2]
|
||
movzx ecx, byte ptr [edi]
|
||
movzx eax, byte ptr [edi+1]
|
||
xor eax, dword_553198[ecx*4]
|
||
xor edx, eax
|
||
and edx, [esi+28h]
|
||
mov ecx, eax
|
||
mov ebp, [ebx+edx*4+1000h]
|
||
mov eax, [esi+4]
|
||
and ecx, 3FFh
|
||
sub eax, [ebx+ecx*4]
|
||
mov [esp+18h+var_8], ebp
|
||
mov ebp, [esi+4]
|
||
mov [ebx+edx*4+1000h], ebp
|
||
mov ebx, [esi+20h]
|
||
mov edx, [ebx+edx*4+1000h]
|
||
mov [ebx+ecx*4], edx
|
||
mov ebx, [esp+18h+arg_4]
|
||
xor ebp, ebp
|
||
cmp eax, [esi+18h]
|
||
mov ecx, 2
|
||
jnb loc_4CC348
|
||
mov edx, edi
|
||
sub edx, eax
|
||
mov [esp+18h+var_4], edx
|
||
mov dl, [edx]
|
||
cmp dl, [edi]
|
||
jnz short loc_4CC348
|
||
mov edx, [esp+18h+arg_0]
|
||
cmp edx, ecx
|
||
jz short loc_4CC2EA
|
||
|
||
loc_4CC2D3: ; CODE XREF: sub_4CC220+C4j
|
||
mov ebx, [esp+18h+var_4]
|
||
mov bl, [ebx+ecx]
|
||
cmp bl, [ecx+edi]
|
||
jnz short loc_4CC2E6
|
||
add ecx, 1
|
||
cmp ecx, edx
|
||
jnz short loc_4CC2D3
|
||
|
||
loc_4CC2E6: ; CODE XREF: sub_4CC220+BDj
|
||
mov ebx, [esp+18h+arg_4]
|
||
|
||
loc_4CC2EA: ; CODE XREF: sub_4CC220+B1j
|
||
add eax, 0FFFFFFFFh
|
||
cmp ecx, edx
|
||
mov [ebx], ecx
|
||
mov [ebx+4], eax
|
||
mov ebp, 2
|
||
jnz short loc_4CC34C
|
||
mov eax, [esi+2Ch]
|
||
mov ecx, [esi+18h]
|
||
push eax
|
||
mov eax, [esi+14h]
|
||
push ecx
|
||
mov ecx, [esi+24h]
|
||
push eax
|
||
mov eax, [esi]
|
||
push ecx
|
||
mov ecx, [esi+4]
|
||
push eax
|
||
mov eax, [esp+2Ch+var_8]
|
||
push ecx
|
||
push eax
|
||
push edx
|
||
call sub_4CC040
|
||
mov eax, 1
|
||
add [esi+14h], eax
|
||
add [esi], eax
|
||
add [esi+4], eax
|
||
mov eax, [esi+4]
|
||
add esp, 20h
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC33E
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC33E: ; CODE XREF: sub_4CC220+113j
|
||
pop edi
|
||
mov eax, ebp
|
||
pop ebp
|
||
pop ebx
|
||
pop esi
|
||
add esp, 8
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC348: ; CODE XREF: sub_4CC220+97j
|
||
; sub_4CC220+A9j
|
||
mov edx, [esp+18h+arg_0]
|
||
|
||
loc_4CC34C: ; CODE XREF: sub_4CC220+D9j
|
||
mov eax, [esi+2Ch]
|
||
push ecx
|
||
lea ecx, [ebx+ebp*4]
|
||
push ecx
|
||
mov ecx, [esi+18h]
|
||
push eax
|
||
mov eax, [esi+14h]
|
||
push ecx
|
||
mov ecx, [esi+24h]
|
||
push eax
|
||
mov eax, [esi]
|
||
push ecx
|
||
mov ecx, [esi+4]
|
||
push eax
|
||
mov eax, [esp+34h+var_8]
|
||
push ecx
|
||
push eax
|
||
push edx
|
||
call sub_4CBEC0
|
||
mov edi, eax
|
||
mov eax, 1
|
||
add [esi+14h], eax
|
||
add [esi], eax
|
||
add [esi+4], eax
|
||
mov eax, [esi+4]
|
||
sub edi, ebx
|
||
add esp, 28h
|
||
sar edi, 2
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC39B
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC39B: ; CODE XREF: sub_4CC220+170j
|
||
mov eax, edi
|
||
pop edi
|
||
pop ebp
|
||
pop ebx
|
||
pop esi
|
||
add esp, 8
|
||
retn
|
||
sub_4CC220 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CC3B0 proc near ; DATA XREF: sub_4CCAA0:loc_4CCB03o
|
||
|
||
var_10 = dword ptr -10h
|
||
var_8 = dword ptr -8
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
sub esp, 10h
|
||
push esi
|
||
mov esi, [esp+14h+arg_0]
|
||
mov eax, [esi+10h]
|
||
cmp eax, 4
|
||
mov [esp+14h+arg_0], eax
|
||
jnb short loc_4CC3E9
|
||
mov eax, 1
|
||
add [esi+14h], eax
|
||
add [esi], eax
|
||
add [esi+4], eax
|
||
mov eax, [esi+4]
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC3E2
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC3E2: ; CODE XREF: sub_4CC3B0+27j
|
||
xor eax, eax
|
||
pop esi
|
||
add esp, 10h
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC3E9: ; CODE XREF: sub_4CC3B0+12j
|
||
push ebx
|
||
push ebp
|
||
push edi
|
||
mov edi, [esi]
|
||
movzx eax, byte ptr [edi]
|
||
movzx edx, byte ptr [edi+1]
|
||
xor edx, dword_553198[eax*4]
|
||
movzx eax, byte ptr [edi+2]
|
||
movzx ebp, byte ptr [edi+3]
|
||
mov ecx, eax
|
||
add eax, eax
|
||
add eax, eax
|
||
add eax, eax
|
||
xor eax, dword_553198[ebp*4]
|
||
mov ebp, [esi+4]
|
||
shl eax, 5
|
||
shl ecx, 8
|
||
xor eax, edx
|
||
and eax, [esi+28h]
|
||
xor ecx, edx
|
||
mov ebx, edx
|
||
mov edx, [esi+20h]
|
||
and ebx, 3FFh
|
||
sub ebp, [edx+ebx*4]
|
||
and ecx, 0FFFFh
|
||
mov [esp+20h+var_4], ebp
|
||
mov ebp, [esi+4]
|
||
sub ebp, [edx+ecx*4+1000h]
|
||
mov [esp+20h+var_10], ebp
|
||
mov ebp, [edx+eax*4+41000h]
|
||
mov [esp+20h+var_8], ebp
|
||
mov ebp, [esi+4]
|
||
mov [edx+eax*4+41000h], ebp
|
||
mov edx, [esi+20h]
|
||
mov eax, [edx+eax*4+41000h]
|
||
mov [edx+ecx*4+1000h], eax
|
||
mov eax, [esi+20h]
|
||
mov ecx, [eax+ecx*4+1000h]
|
||
mov [eax+ebx*4], ecx
|
||
mov ecx, [esp+20h+var_4]
|
||
mov ebx, [esp+20h+arg_4]
|
||
xor ebp, ebp
|
||
cmp ecx, [esi+18h]
|
||
mov eax, 1
|
||
jnb short loc_4CC4A9
|
||
mov edx, edi
|
||
sub edx, ecx
|
||
mov dl, [edx]
|
||
cmp dl, [edi]
|
||
jnz short loc_4CC4A9
|
||
mov eax, 2
|
||
lea edx, [ecx-1]
|
||
mov [ebx], eax
|
||
mov [ebx+4], edx
|
||
mov ebp, eax
|
||
|
||
loc_4CC4A9: ; CODE XREF: sub_4CC3B0+DEj
|
||
; sub_4CC3B0+E8j
|
||
mov edx, [esp+20h+var_10]
|
||
cmp ecx, edx
|
||
jz short loc_4CC4D5
|
||
cmp edx, [esi+18h]
|
||
jnb short loc_4CC4D5
|
||
mov edx, edi
|
||
sub edx, [esp+20h+var_10]
|
||
mov dl, [edx]
|
||
cmp dl, [edi]
|
||
jnz short loc_4CC4D5
|
||
mov ecx, [esp+20h+var_10]
|
||
lea edx, [ecx-1]
|
||
mov [ebx+ebp*4+4], edx
|
||
mov eax, 3
|
||
add ebp, 2
|
||
|
||
loc_4CC4D5: ; CODE XREF: sub_4CC3B0+FFj
|
||
; sub_4CC3B0+104j ...
|
||
test ebp, ebp
|
||
mov edx, [esp+20h+arg_0]
|
||
jz short loc_4CC553
|
||
cmp eax, edx
|
||
jz short loc_4CC4FE
|
||
mov edx, eax
|
||
sub edx, ecx
|
||
add edx, edi
|
||
|
||
loc_4CC4E7: ; CODE XREF: sub_4CC3B0+148j
|
||
mov cl, [edx]
|
||
cmp cl, [eax+edi]
|
||
jnz short loc_4CC4FA
|
||
add eax, 1
|
||
add edx, 1
|
||
cmp eax, [esp+20h+arg_0]
|
||
jnz short loc_4CC4E7
|
||
|
||
loc_4CC4FA: ; CODE XREF: sub_4CC3B0+13Cj
|
||
mov edx, [esp+20h+arg_0]
|
||
|
||
loc_4CC4FE: ; CODE XREF: sub_4CC3B0+12Fj
|
||
cmp eax, edx
|
||
mov [ebx+ebp*4-8], eax
|
||
jnz short loc_4CC553
|
||
mov eax, [esi+2Ch]
|
||
mov ecx, [esi+18h]
|
||
push eax
|
||
mov eax, [esi+14h]
|
||
push ecx
|
||
mov ecx, [esi+24h]
|
||
push eax
|
||
mov eax, [esi]
|
||
push ecx
|
||
mov ecx, [esi+4]
|
||
push eax
|
||
mov eax, [esp+34h+var_8]
|
||
push ecx
|
||
push eax
|
||
push edx
|
||
call sub_4CC040
|
||
mov eax, 1
|
||
add [esi+14h], eax
|
||
add [esi], eax
|
||
add [esi+4], eax
|
||
mov eax, [esi+4]
|
||
add esp, 20h
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC549
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC549: ; CODE XREF: sub_4CC3B0+18Ej
|
||
pop edi
|
||
mov eax, ebp
|
||
pop ebp
|
||
pop ebx
|
||
pop esi
|
||
add esp, 10h
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC553: ; CODE XREF: sub_4CC3B0+12Bj
|
||
; sub_4CC3B0+154j
|
||
cmp eax, 3
|
||
jnb short loc_4CC55D
|
||
mov eax, 3
|
||
|
||
loc_4CC55D: ; CODE XREF: sub_4CC3B0+1A6j
|
||
push eax
|
||
mov eax, [esi+2Ch]
|
||
lea ecx, [ebx+ebp*4]
|
||
push ecx
|
||
mov ecx, [esi+18h]
|
||
push eax
|
||
mov eax, [esi+14h]
|
||
push ecx
|
||
mov ecx, [esi+24h]
|
||
push eax
|
||
mov eax, [esi]
|
||
push ecx
|
||
mov ecx, [esi+4]
|
||
push eax
|
||
mov eax, [esp+3Ch+var_8]
|
||
push ecx
|
||
push eax
|
||
push edx
|
||
call sub_4CBEC0
|
||
mov edi, eax
|
||
mov eax, 1
|
||
add [esi+14h], eax
|
||
add [esi], eax
|
||
add [esi+4], eax
|
||
mov eax, [esi+4]
|
||
sub edi, ebx
|
||
add esp, 28h
|
||
sar edi, 2
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC5AC
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC5AC: ; CODE XREF: sub_4CC3B0+1F1j
|
||
mov eax, edi
|
||
pop edi
|
||
pop ebp
|
||
pop ebx
|
||
pop esi
|
||
add esp, 10h
|
||
retn
|
||
sub_4CC3B0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CC5C0 proc near ; DATA XREF: sub_4CCAA0+29o
|
||
|
||
var_10 = dword ptr -10h
|
||
var_8 = dword ptr -8
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
sub esp, 10h
|
||
push esi
|
||
mov esi, [esp+14h+arg_0]
|
||
mov eax, [esi+10h]
|
||
cmp eax, 4
|
||
mov [esp+14h+arg_0], eax
|
||
jnb short loc_4CC5F9
|
||
mov eax, 1
|
||
add [esi+14h], eax
|
||
add [esi], eax
|
||
add [esi+4], eax
|
||
mov eax, [esi+4]
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC5F2
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC5F2: ; CODE XREF: sub_4CC5C0+27j
|
||
xor eax, eax
|
||
pop esi
|
||
add esp, 10h
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC5F9: ; CODE XREF: sub_4CC5C0+12j
|
||
push ebx
|
||
push ebp
|
||
push edi
|
||
mov edi, [esi]
|
||
movzx eax, byte ptr [edi]
|
||
movzx edx, byte ptr [edi+1]
|
||
xor edx, dword_553198[eax*4]
|
||
movzx eax, byte ptr [edi+2]
|
||
movzx ebp, byte ptr [edi+3]
|
||
mov ecx, eax
|
||
add eax, eax
|
||
add eax, eax
|
||
add eax, eax
|
||
xor eax, dword_553198[ebp*4]
|
||
mov ebp, [esi+4]
|
||
shl eax, 5
|
||
shl ecx, 8
|
||
xor eax, edx
|
||
and eax, [esi+28h]
|
||
xor ecx, edx
|
||
mov ebx, edx
|
||
mov edx, [esi+20h]
|
||
and ebx, 3FFh
|
||
sub ebp, [edx+ebx*4]
|
||
and ecx, 0FFFFh
|
||
mov [esp+20h+var_4], ebp
|
||
mov ebp, [esi+4]
|
||
sub ebp, [edx+ecx*4+1000h]
|
||
mov [esp+20h+var_10], ebp
|
||
mov ebp, [edx+eax*4+41000h]
|
||
mov [esp+20h+var_8], ebp
|
||
mov ebp, [esi+4]
|
||
mov [edx+eax*4+41000h], ebp
|
||
mov edx, [esi+20h]
|
||
mov eax, [edx+eax*4+41000h]
|
||
mov [edx+ecx*4+1000h], eax
|
||
mov eax, [esi+20h]
|
||
mov ecx, [eax+ecx*4+1000h]
|
||
mov [eax+ebx*4], ecx
|
||
mov ecx, [esp+20h+var_4]
|
||
mov ebx, [esp+20h+arg_4]
|
||
xor ebp, ebp
|
||
cmp ecx, [esi+18h]
|
||
mov eax, 1
|
||
jnb short loc_4CC6B9
|
||
mov edx, edi
|
||
sub edx, ecx
|
||
mov dl, [edx]
|
||
cmp dl, [edi]
|
||
jnz short loc_4CC6B9
|
||
mov eax, 2
|
||
lea edx, [ecx-1]
|
||
mov [ebx], eax
|
||
mov [ebx+4], edx
|
||
mov ebp, eax
|
||
|
||
loc_4CC6B9: ; CODE XREF: sub_4CC5C0+DEj
|
||
; sub_4CC5C0+E8j
|
||
mov edx, [esp+20h+var_10]
|
||
cmp ecx, edx
|
||
jz short loc_4CC6E5
|
||
cmp edx, [esi+18h]
|
||
jnb short loc_4CC6E5
|
||
mov edx, edi
|
||
sub edx, [esp+20h+var_10]
|
||
mov dl, [edx]
|
||
cmp dl, [edi]
|
||
jnz short loc_4CC6E5
|
||
mov ecx, [esp+20h+var_10]
|
||
lea edx, [ecx-1]
|
||
mov [ebx+ebp*4+4], edx
|
||
mov eax, 3
|
||
add ebp, 2
|
||
|
||
loc_4CC6E5: ; CODE XREF: sub_4CC5C0+FFj
|
||
; sub_4CC5C0+104j ...
|
||
test ebp, ebp
|
||
jz short loc_4CC747
|
||
cmp eax, [esp+20h+arg_0]
|
||
jz short loc_4CC708
|
||
mov edx, eax
|
||
sub edx, ecx
|
||
add edx, edi
|
||
|
||
loc_4CC6F5: ; CODE XREF: sub_4CC5C0+146j
|
||
mov cl, [edx]
|
||
cmp cl, [eax+edi]
|
||
jnz short loc_4CC708
|
||
add eax, 1
|
||
add edx, 1
|
||
cmp eax, [esp+20h+arg_0]
|
||
jnz short loc_4CC6F5
|
||
|
||
loc_4CC708: ; CODE XREF: sub_4CC5C0+12Dj
|
||
; sub_4CC5C0+13Aj
|
||
cmp eax, [esp+20h+arg_0]
|
||
mov [ebx+ebp*4-8], eax
|
||
jnz short loc_4CC747
|
||
mov edx, [esi+14h]
|
||
mov eax, [esi+24h]
|
||
mov ecx, [esp+20h+var_8]
|
||
mov [eax+edx*4], ecx
|
||
mov eax, 1
|
||
add [esi+14h], eax
|
||
add [esi], eax
|
||
add [esi+4], eax
|
||
mov eax, [esi+4]
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC73D
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC73D: ; CODE XREF: sub_4CC5C0+172j
|
||
pop edi
|
||
mov eax, ebp
|
||
pop ebp
|
||
pop ebx
|
||
pop esi
|
||
add esp, 10h
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CC747: ; CODE XREF: sub_4CC5C0+127j
|
||
; sub_4CC5C0+150j
|
||
cmp eax, 3
|
||
jnb short loc_4CC751
|
||
mov eax, 3
|
||
|
||
loc_4CC751: ; CODE XREF: sub_4CC5C0+18Aj
|
||
mov ecx, [esi+18h]
|
||
push eax
|
||
mov eax, [esi+2Ch]
|
||
lea edx, [ebx+ebp*4]
|
||
push edx
|
||
mov edx, [esi+14h]
|
||
push eax
|
||
mov eax, [esi+24h]
|
||
push ecx
|
||
mov ecx, [esi]
|
||
push edx
|
||
mov edx, [esi+4]
|
||
push eax
|
||
mov eax, [esp+38h+var_8]
|
||
push ecx
|
||
mov ecx, [esp+3Ch+arg_0]
|
||
push edx
|
||
push eax
|
||
push ecx
|
||
call sub_4CBDE0
|
||
mov edi, eax
|
||
mov eax, 1
|
||
add [esi+14h], eax
|
||
add [esi], eax
|
||
add [esi+4], eax
|
||
mov eax, [esi+4]
|
||
sub edi, ebx
|
||
add esp, 28h
|
||
sar edi, 2
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC7A4
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC7A4: ; CODE XREF: sub_4CC5C0+1D9j
|
||
mov eax, edi
|
||
pop edi
|
||
pop ebp
|
||
pop ebx
|
||
pop esi
|
||
add esp, 10h
|
||
retn
|
||
sub_4CC5C0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CC7B0 proc near ; DATA XREF: sub_4CCAA0+47o
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
mov ebp, [esp+8+arg_4]
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
push edi
|
||
mov edi, 1
|
||
|
||
loc_4CC7C1: ; CODE XREF: sub_4CC7B0+6Dj
|
||
mov edx, [esi+10h]
|
||
cmp edx, 2
|
||
jb short loc_4CC802
|
||
mov eax, [esi]
|
||
mov ebx, [esi+4]
|
||
xor ecx, ecx
|
||
mov ch, [eax+1]
|
||
mov cl, [eax]
|
||
mov eax, ecx
|
||
mov ecx, [esi+20h]
|
||
lea eax, [ecx+eax*4]
|
||
mov ecx, [eax]
|
||
mov [eax], ebx
|
||
mov eax, [esi+2Ch]
|
||
push eax
|
||
mov eax, [esi+18h]
|
||
push eax
|
||
mov eax, [esi+14h]
|
||
push eax
|
||
mov eax, [esi+24h]
|
||
push eax
|
||
mov eax, [esi]
|
||
push eax
|
||
mov eax, [esi+4]
|
||
push eax
|
||
push ecx
|
||
push edx
|
||
call sub_4CC040
|
||
add esp, 20h
|
||
|
||
loc_4CC802: ; CODE XREF: sub_4CC7B0+17j
|
||
add [esi+4], edi
|
||
mov eax, [esi+4]
|
||
add [esi+14h], edi
|
||
add [esi], edi
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC81B
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC81B: ; CODE XREF: sub_4CC7B0+60j
|
||
sub ebp, edi
|
||
jnz short loc_4CC7C1
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn
|
||
sub_4CC7B0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CC830 proc near ; DATA XREF: sub_4CCAA0+5Bo
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
push edi
|
||
mov edi, 1
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CC840: ; CODE XREF: sub_4CC830+9Fj
|
||
mov ebp, [esi+10h]
|
||
cmp ebp, 3
|
||
jb short loc_4CC8B2
|
||
mov ecx, [esi]
|
||
movzx edx, byte ptr [ecx]
|
||
movzx eax, byte ptr [ecx+1]
|
||
xor eax, dword_553198[edx*4]
|
||
mov ebx, [esi+4]
|
||
xor edx, edx
|
||
mov dh, [ecx+2]
|
||
xor edx, eax
|
||
and edx, [esi+28h]
|
||
and eax, 3FFh
|
||
mov ecx, edx
|
||
mov edx, [esi+20h]
|
||
mov edi, [edx+ecx*4+1000h]
|
||
lea edx, [edx+ecx*4+1000h]
|
||
mov [edx], ebx
|
||
mov edx, [esi+20h]
|
||
mov ecx, [edx+ecx*4+1000h]
|
||
mov [edx+eax*4], ecx
|
||
mov edx, [esi+2Ch]
|
||
mov eax, [esi+18h]
|
||
mov ecx, [esi+14h]
|
||
push edx
|
||
mov edx, [esi+24h]
|
||
push eax
|
||
mov eax, [esi]
|
||
push ecx
|
||
mov ecx, [esi+4]
|
||
push edx
|
||
push eax
|
||
push ecx
|
||
push edi
|
||
push ebp
|
||
call sub_4CC040
|
||
add esp, 20h
|
||
mov edi, 1
|
||
|
||
loc_4CC8B2: ; CODE XREF: sub_4CC830+16j
|
||
add [esi+4], edi
|
||
mov eax, [esi+4]
|
||
add [esi+14h], edi
|
||
add [esi], edi
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC8CB
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC8CB: ; CODE XREF: sub_4CC830+90j
|
||
sub [esp+10h+arg_4], edi
|
||
jnz loc_4CC840
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn
|
||
sub_4CC830 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CC8E0 proc near ; DATA XREF: sub_4CCAA0+6Ao
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
push edi
|
||
mov edi, 1
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CC8F0: ; CODE XREF: sub_4CC8E0+D6j
|
||
mov eax, [esi+10h]
|
||
cmp eax, 4
|
||
mov [esp+10h+arg_0], eax
|
||
jb loc_4CC999
|
||
mov eax, [esi]
|
||
movzx edi, byte ptr [eax+2]
|
||
movzx edx, byte ptr [eax]
|
||
movzx ebx, byte ptr [eax+3]
|
||
movzx ecx, byte ptr [eax+1]
|
||
xor ecx, dword_553198[edx*4]
|
||
mov ebp, [esi+4]
|
||
lea eax, ds:0[edi*8]
|
||
xor eax, dword_553198[ebx*4]
|
||
mov edx, edi
|
||
mov edi, [esi+20h]
|
||
shl eax, 5
|
||
xor eax, ecx
|
||
and eax, [esi+28h]
|
||
shl edx, 8
|
||
mov ebx, [edi+eax*4+41000h]
|
||
xor edx, ecx
|
||
and edx, 0FFFFh
|
||
mov [edi+edx*4+1000h], ebp
|
||
mov edi, [esi+20h]
|
||
mov edx, [edi+edx*4+1000h]
|
||
and ecx, 3FFh
|
||
mov [edi+ecx*4], edx
|
||
mov ecx, [esi+20h]
|
||
mov edx, [esi+4]
|
||
mov [ecx+eax*4+41000h], edx
|
||
mov eax, [esi+2Ch]
|
||
mov ecx, [esi+18h]
|
||
mov edx, [esi+14h]
|
||
push eax
|
||
mov eax, [esi+24h]
|
||
push ecx
|
||
mov ecx, [esi]
|
||
push edx
|
||
mov edx, [esi+4]
|
||
push eax
|
||
mov eax, [esp+20h+arg_0]
|
||
push ecx
|
||
push edx
|
||
push ebx
|
||
push eax
|
||
call sub_4CC040
|
||
add esp, 20h
|
||
mov edi, 1
|
||
|
||
loc_4CC999: ; CODE XREF: sub_4CC8E0+1Aj
|
||
add [esi+4], edi
|
||
mov eax, [esi+4]
|
||
add [esi+14h], edi
|
||
add [esi], edi
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CC9B2
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CC9B2: ; CODE XREF: sub_4CC8E0+C7j
|
||
sub [esp+10h+arg_4], edi
|
||
jnz loc_4CC8F0
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn
|
||
sub_4CC8E0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CC9D0 proc near ; DATA XREF: sub_4CCAA0+30o
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
push edi
|
||
mov edi, 1
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CC9E0: ; CODE XREF: sub_4CC9D0+BAj
|
||
cmp dword ptr [esi+10h], 4
|
||
jb loc_4CCA6D
|
||
mov eax, [esi]
|
||
movzx edi, byte ptr [eax+2]
|
||
movzx edx, byte ptr [eax]
|
||
movzx ebx, byte ptr [eax+3]
|
||
movzx ecx, byte ptr [eax+1]
|
||
xor ecx, dword_553198[edx*4]
|
||
mov ebp, [esi+4]
|
||
lea eax, ds:0[edi*8]
|
||
xor eax, dword_553198[ebx*4]
|
||
mov edx, edi
|
||
mov edi, [esi+20h]
|
||
shl eax, 5
|
||
xor eax, ecx
|
||
and eax, [esi+28h]
|
||
mov ebx, [edi+eax*4+41000h]
|
||
lea edi, [edi+eax*4+41000h]
|
||
mov [edi], ebp
|
||
mov edi, [esi+20h]
|
||
mov eax, [edi+eax*4+41000h]
|
||
shl edx, 8
|
||
xor edx, ecx
|
||
and edx, 0FFFFh
|
||
mov [edi+edx*4+1000h], eax
|
||
mov eax, [esi+20h]
|
||
mov edx, [eax+edx*4+1000h]
|
||
and ecx, 3FFh
|
||
mov [eax+ecx*4], edx
|
||
mov eax, [esi+14h]
|
||
mov ecx, [esi+24h]
|
||
mov [ecx+eax*4], ebx
|
||
mov edi, 1
|
||
|
||
loc_4CCA6D: ; CODE XREF: sub_4CC9D0+14j
|
||
add [esi+4], edi
|
||
mov eax, [esi+4]
|
||
add [esi+14h], edi
|
||
add [esi], edi
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CCA86
|
||
push esi
|
||
call sub_4CBD50
|
||
add esp, 4
|
||
|
||
loc_4CCA86: ; CODE XREF: sub_4CC9D0+ABj
|
||
sub [esp+10h+arg_4], edi
|
||
jnz loc_4CC9E0
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn
|
||
sub_4CC9D0 endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CCAA0 proc near ; CODE XREF: sub_4D0270+F3p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
mov eax, [esp+arg_4]
|
||
mov ecx, [esp+arg_0]
|
||
mov dword ptr [eax], offset sub_4CBC80
|
||
mov dword ptr [eax+4], offset loc_4CB960
|
||
mov dword ptr [eax+8], offset loc_4CB970
|
||
mov dword ptr [eax+0Ch], offset loc_4CB950
|
||
cmp dword ptr [ecx+50h], 0
|
||
jnz short loc_4CCAD8
|
||
mov dword ptr [eax+10h], offset sub_4CC5C0
|
||
mov dword ptr [eax+14h], offset sub_4CC9D0
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCAD8: ; CODE XREF: sub_4CCAA0+27j
|
||
mov ecx, [ecx+48h]
|
||
cmp ecx, 2
|
||
jnz short loc_4CCAEF
|
||
mov dword ptr [eax+10h], offset loc_4CC180
|
||
mov dword ptr [eax+14h], offset sub_4CC7B0
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCAEF: ; CODE XREF: sub_4CCAA0+3Ej
|
||
cmp ecx, 3
|
||
jnz short loc_4CCB03
|
||
mov dword ptr [eax+10h], offset sub_4CC220
|
||
mov dword ptr [eax+14h], offset sub_4CC830
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCB03: ; CODE XREF: sub_4CCAA0+52j
|
||
mov dword ptr [eax+10h], offset sub_4CC3B0
|
||
mov dword ptr [eax+14h], offset sub_4CC8E0
|
||
retn
|
||
sub_4CCAA0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
Interface1_AddRef proc near ; DATA XREF: .rdata:00517A94o
|
||
;sub_4CCB80
|
||
|
||
arg_0 = dword ptr 4
|
||
mov eax, [esp+arg_0]
|
||
add dword ptr [eax+4], 1
|
||
mov eax, [eax+4]
|
||
retn 4
|
||
Interface1_AddRef endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
sub_4CCB20 proc near ; DATA XREF: .rdata:00517A9Co
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
arg_C = dword ptr 10h
|
||
|
||
push esi
|
||
mov esi, [esp+4+arg_0]
|
||
mov ecx, [esi+10h]
|
||
sub ecx, [esi+18h]
|
||
mov eax, [esi+14h]
|
||
sbb eax, [esi+1Ch]
|
||
xor edx, edx
|
||
cmp edx, eax
|
||
push edi
|
||
mov edi, [esp+8+arg_8]
|
||
jb short loc_4CCB48
|
||
ja short loc_4CCB42
|
||
cmp edi, ecx
|
||
jbe short loc_4CCB48
|
||
|
||
loc_4CCB42: ; CODE XREF: sub_4CCB20+1Cj
|
||
mov edi, [esi+10h]
|
||
sub edi, [esi+18h]
|
||
|
||
loc_4CCB48: ; CODE XREF: sub_4CCB20+1Aj
|
||
; sub_4CCB20+20j
|
||
mov eax, [esp+8+arg_C]
|
||
test eax, eax
|
||
jz short loc_4CCB52
|
||
mov [eax], edi
|
||
|
||
loc_4CCB52: ; CODE XREF: sub_4CCB20+2Ej
|
||
test edi, edi
|
||
jz short loc_4CCB72
|
||
mov eax, [esi+8]
|
||
add eax, [esi+18h]
|
||
mov ecx, [esp+8+arg_4]
|
||
push edi ; size_t
|
||
push eax ; void *
|
||
push ecx ; void *
|
||
call _memcpy ; Microsoft VisualC 2-8/net runtime
|
||
add esp, 0Ch
|
||
add [esi+18h], edi
|
||
adc dword ptr [esi+1Ch], 0
|
||
|
||
loc_4CCB72: ; CODE XREF: sub_4CCB20+34j
|
||
pop edi
|
||
xor eax, eax
|
||
pop esi
|
||
retn 10h
|
||
sub_4CCB20 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
sub_4CCB90 proc near ; DATA XREF: .rdata:00517AB0o
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
arg_C = dword ptr 10h
|
||
|
||
push ebx
|
||
mov ebx, [esp+4+arg_8]
|
||
push esi
|
||
mov esi, [esp+8+arg_0]
|
||
mov ecx, [esi+10h]
|
||
mov eax, [esi+14h]
|
||
push edi
|
||
xor edi, edi
|
||
sub ecx, [esi+18h]
|
||
sbb eax, [esi+1Ch]
|
||
cmp edi, eax
|
||
jb short loc_4CCBC2
|
||
ja short loc_4CCBB3
|
||
cmp ebx, ecx
|
||
jbe short loc_4CCBC2
|
||
|
||
loc_4CCBB3: ; CODE XREF: sub_4CCB90+1Dj
|
||
pop edi
|
||
mov byte ptr [esi+20h], 1
|
||
pop esi
|
||
mov eax, 80004005h
|
||
pop ebx
|
||
retn 10h
|
||
|
||
loc_4CCBC2: ; CODE XREF: sub_4CCB90+1Bj
|
||
; sub_4CCB90+21j
|
||
mov ecx, [esi+8]
|
||
mov eax, [esp+0Ch+arg_4]
|
||
add ecx, [esi+18h]
|
||
push ebx ; size_t
|
||
push eax ; void *
|
||
push ecx ; void *
|
||
call _memcpy ; Microsoft VisualC 2-8/net runtime
|
||
mov eax, [esp+18h+arg_C]
|
||
add esp, 0Ch
|
||
add [esi+18h], ebx
|
||
adc [esi+1Ch], edi
|
||
test eax, eax
|
||
jz short loc_4CCBE7
|
||
mov [eax], ebx
|
||
|
||
loc_4CCBE7: ; CODE XREF: sub_4CCB90+53j
|
||
pop edi
|
||
pop esi
|
||
xor eax, eax
|
||
pop ebx
|
||
retn 10h
|
||
sub_4CCB90 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; ---------------------------------------------------------------------------
|
||
|
||
LzmaProps_Decode proc near ; CODE XREF: Decompress_lzma_internal+35p
|
||
;sub_4CCBF0
|
||
|
||
propsRes = dword ptr 4
|
||
propsData = dword ptr 8
|
||
propsSize = dword ptr 0Ch
|
||
|
||
cmp [esp+propsSize], 5 ; LZMA_PROPS_SIZE
|
||
jge short loc_4CCBFD
|
||
|
||
loc_4CCBF7: ; CODE XREF: LzmaProps_Decode+16j
|
||
mov eax, 1
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCBFD: ; CODE XREF: LzmaProps_Decode+5j
|
||
mov eax, [esp+propsData]
|
||
mov cl, [eax]
|
||
cmp cl, 0E1h ; 9 * 5 * 5
|
||
jnb short loc_4CCBF7
|
||
cmp cl, 2Dh
|
||
push edi
|
||
mov edi, [esp+4+propsRes]
|
||
mov dword ptr [edi+8], 0
|
||
jb short loc_4CCC40
|
||
push esi
|
||
movzx esi, cl
|
||
mov eax, 6C16C16Dh
|
||
mul esi
|
||
mov eax, esi
|
||
sub eax, edx
|
||
shr eax, 1
|
||
add eax, edx
|
||
shr eax, 5
|
||
movzx eax, al
|
||
mov edx, eax
|
||
pop esi
|
||
|
||
loc_4CCC35: ; CODE XREF: LzmaProps_Decode+4Bj
|
||
add cl, 0D3h
|
||
sub eax, 1
|
||
jnz short loc_4CCC35
|
||
mov [edi+8], edx
|
||
|
||
loc_4CCC40: ; CODE XREF: LzmaProps_Decode+27j
|
||
cmp cl, 9
|
||
mov dword ptr [edi+4], 0
|
||
jb short loc_4CCC6B
|
||
movzx edx, cl
|
||
mov eax, 38E38E39h
|
||
mul edx
|
||
shr edx, 1
|
||
movzx eax, dl
|
||
mov edx, eax
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CCC60: ; CODE XREF: LzmaProps_Decode+76j
|
||
add cl, 0F7h
|
||
sub eax, 1
|
||
jnz short loc_4CCC60
|
||
mov [edi+4], edx
|
||
|
||
loc_4CCC6B: ; CODE XREF: LzmaProps_Decode+5Aj
|
||
movzx eax, cl
|
||
mov [edi], eax
|
||
xor eax, eax
|
||
pop edi
|
||
retn
|
||
LzmaProps_Decode endp
|
||
|
||
sub_4CCC80 proc near ; CODE XREF: Decompress_lzma_internal+97p
|
||
|
||
var_3C = dword ptr -3Ch
|
||
var_38 = dword ptr -38h
|
||
var_34 = dword ptr -34h
|
||
var_30 = dword ptr -30h
|
||
var_2C = dword ptr -2Ch
|
||
var_28 = dword ptr -28h
|
||
var_24 = dword ptr -24h
|
||
var_20 = dword ptr -20h
|
||
var_1C = dword ptr -1Ch
|
||
var_18 = dword ptr -18h
|
||
var_14 = dword ptr -14h
|
||
var_10 = dword ptr -10h
|
||
var_C = dword ptr -0Ch
|
||
var_8 = dword ptr -8
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
arg_C = dword ptr 10h
|
||
arg_10 = dword ptr 14h
|
||
arg_14 = dword ptr 18h
|
||
arg_18 = dword ptr 1Ch
|
||
|
||
sub esp, 3Ch
|
||
mov eax, [esp+3Ch+arg_0]
|
||
mov ecx, [eax+8]
|
||
push ebx
|
||
push ebp
|
||
mov ebp, 1
|
||
mov edx, ebp
|
||
shl edx, cl
|
||
mov ecx, [eax+4]
|
||
xor ebx, ebx
|
||
push esi
|
||
sub edx, ebp
|
||
mov [esp+48h+var_C], edx
|
||
mov edx, ebp
|
||
shl edx, cl
|
||
mov ecx, [esp+48h+arg_C]
|
||
push edi
|
||
mov edi, [eax+0Ch]
|
||
sub edx, ebp
|
||
mov [esp+4Ch+var_8], edx
|
||
mov edx, [eax]
|
||
mov [ecx], ebx
|
||
mov ecx, [esp+4Ch+arg_18]
|
||
mov [ecx], ebx
|
||
mov ecx, [eax+4]
|
||
add ecx, edx
|
||
mov eax, 300h
|
||
shl eax, cl
|
||
mov [esp+4Ch+var_20], edi
|
||
mov [esp+4Ch+var_2C], ebx
|
||
mov byte ptr [esp+4Ch+arg_0], bl
|
||
add eax, 736h
|
||
mov [esp+4Ch+var_14], edx
|
||
mov [esp+4Ch+var_34], ebx
|
||
mov [esp+4Ch+var_38], ebp
|
||
mov [esp+4Ch+var_24], ebp
|
||
mov [esp+4Ch+var_28], ebp
|
||
mov [esp+4Ch+var_18], ebp
|
||
jz short loc_4CCD04
|
||
mov ecx, eax
|
||
shr ecx, 1
|
||
mov eax, 4000400h
|
||
rep stosd
|
||
adc ecx, ecx
|
||
rep stosw
|
||
|
||
loc_4CCD04: ; CODE XREF: sub_4CCC80+72j
|
||
mov edx, [esp+4Ch+arg_8]
|
||
mov ecx, [esp+4Ch+arg_4]
|
||
lea edi, [ecx+edx]
|
||
xor esi, esi
|
||
or eax, 0FFFFFFFFh
|
||
mov [esp+4Ch+var_3C], edi
|
||
xor edx, edx
|
||
lea ebx, [ebx+0]
|
||
|
||
loc_4CCD20: ; CODE XREF: sub_4CCC80+BCj
|
||
cmp ecx, edi
|
||
jz loc_4CCF0B
|
||
movzx ebp, byte ptr [ecx]
|
||
shl esi, 8
|
||
or esi, ebp
|
||
mov ebp, 1
|
||
add edx, ebp
|
||
add ecx, ebp
|
||
cmp edx, 5
|
||
jl short loc_4CCD20
|
||
cmp [esp+4Ch+arg_14], ebx
|
||
mov [esp+4Ch+arg_8], ecx
|
||
jbe loc_4CCFCD
|
||
lea esp, [esp+0]
|
||
|
||
loc_4CCD50: ; CODE XREF: sub_4CCC80+32Dj
|
||
mov edx, [esp+4Ch+var_34]
|
||
mov ecx, [esp+4Ch+var_C]
|
||
and ecx, [esp+4Ch+var_2C]
|
||
mov edi, [esp+4Ch+var_20]
|
||
mov ebx, edx
|
||
shl ebx, 4
|
||
add ebx, ecx
|
||
cmp eax, 1000000h
|
||
lea ebx, [edi+ebx*2]
|
||
mov [esp+4Ch+var_1C], ecx
|
||
mov [esp+4Ch+var_30], ebx
|
||
jnb short loc_4CCD99
|
||
mov ecx, [esp+4Ch+arg_8]
|
||
cmp ecx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx ebp, byte ptr [ecx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, ebp
|
||
add ecx, 1
|
||
mov [esp+4Ch+arg_8], ecx
|
||
|
||
loc_4CCD99: ; CODE XREF: sub_4CCC80+F7j
|
||
movzx ebx, word ptr [ebx]
|
||
movzx ebp, bx
|
||
mov ecx, eax
|
||
shr ecx, 0Bh
|
||
imul ecx, ebp
|
||
cmp esi, ecx
|
||
jnb loc_4CCFF4
|
||
mov edi, [esp+4Ch+var_30]
|
||
mov eax, ecx
|
||
mov ecx, 800h
|
||
sub ecx, ebp
|
||
mov ebp, [esp+4Ch+var_8]
|
||
sar ecx, 5
|
||
add ecx, ebx
|
||
movzx ebx, byte ptr [esp+4Ch+arg_0]
|
||
mov [edi], cx
|
||
mov edi, [esp+4Ch+var_2C]
|
||
mov ecx, 8
|
||
sub cl, byte ptr [esp+4Ch+var_14]
|
||
and ebp, edi
|
||
shr ebx, cl
|
||
mov ecx, [esp+4Ch+var_14]
|
||
shl ebp, cl
|
||
mov ecx, [esp+4Ch+var_20]
|
||
mov edx, 1
|
||
add ebx, ebp
|
||
imul ebx, 600h
|
||
cmp [esp+4Ch+var_34], 7
|
||
lea ebp, [ebx+ecx+0E6Ch]
|
||
mov [esp+4Ch+var_30], ebp
|
||
jl loc_4CCEB0
|
||
sub edi, [esp+4Ch+var_38]
|
||
mov ecx, [esp+4Ch+arg_10]
|
||
movzx ebx, byte ptr [edi+ecx]
|
||
jmp short loc_4CCE20
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CCE20: ; CODE XREF: sub_4CCC80+197j
|
||
; sub_4CCC80+2C6j
|
||
add ebx, ebx
|
||
mov [esp+4Ch+var_10], ebx
|
||
and ebx, 100h
|
||
cmp eax, 1000000h
|
||
lea ecx, [ebx+edx]
|
||
lea ebp, [ebp+ecx*2+200h]
|
||
mov [esp+4Ch+arg_0], ebp
|
||
jnb short loc_4CCE61
|
||
mov ecx, [esp+4Ch+arg_8]
|
||
cmp ecx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx edi, byte ptr [ecx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, edi
|
||
add ecx, 1
|
||
mov [esp+4Ch+arg_8], ecx
|
||
|
||
loc_4CCE61: ; CODE XREF: sub_4CCC80+1BFj
|
||
movzx edi, word ptr [ebp+0]
|
||
movzx ebp, di
|
||
mov ecx, eax
|
||
shr ecx, 0Bh
|
||
imul ecx, ebp
|
||
cmp esi, ecx
|
||
jnb loc_4CCF15
|
||
mov eax, ecx
|
||
mov ecx, 800h
|
||
sub ecx, ebp
|
||
sar ecx, 5
|
||
add ecx, edi
|
||
mov edi, [esp+4Ch+arg_0]
|
||
add edx, edx
|
||
test ebx, ebx
|
||
mov [edi], cx
|
||
jz loc_4CCF36
|
||
|
||
loc_4CCE97: ; CODE XREF: sub_4CCC80+2B0j
|
||
cmp edx, 100h
|
||
jge loc_4CCF70
|
||
mov ebp, [esp+4Ch+var_30]
|
||
jmp short loc_4CCEB0
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CCEB0: ; CODE XREF: sub_4CCC80+185j
|
||
; sub_4CCC80+227j ...
|
||
cmp eax, 1000000h
|
||
lea ecx, [edx+edx]
|
||
mov [esp+4Ch+arg_0], ecx
|
||
jnb short loc_4CCEDE
|
||
mov edi, [esp+4Ch+arg_8]
|
||
cmp edi, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx ebx, byte ptr [edi]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, ebx
|
||
add edi, 1
|
||
mov [esp+4Ch+arg_8], edi
|
||
|
||
loc_4CCEDE: ; CODE XREF: sub_4CCC80+23Cj
|
||
movzx edi, word ptr [ecx+ebp]
|
||
movzx ebx, di
|
||
mov ecx, eax
|
||
shr ecx, 0Bh
|
||
imul ecx, ebx
|
||
cmp esi, ecx
|
||
jnb short loc_4CCF4B
|
||
mov eax, ecx
|
||
mov ecx, 800h
|
||
sub ecx, ebx
|
||
sar ecx, 5
|
||
add ecx, edi
|
||
mov edi, [esp+4Ch+arg_0]
|
||
mov [edi+ebp], cx
|
||
add edx, edx
|
||
jmp short loc_4CCF64
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCF0B: ; CODE XREF: sub_4CCC80+A2j
|
||
pop edi
|
||
pop esi
|
||
mov eax, ebp
|
||
pop ebp
|
||
pop ebx
|
||
add esp, 3Ch
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCF15: ; CODE XREF: sub_4CCC80+1F2j
|
||
sub eax, ecx
|
||
sub esi, ecx
|
||
mov cx, di
|
||
shr cx, 5
|
||
sub di, cx
|
||
test ebx, ebx
|
||
mov ecx, [esp+4Ch+arg_0]
|
||
mov [ecx], di
|
||
lea edx, [edx+edx+1]
|
||
jz loc_4CCE97
|
||
|
||
loc_4CCF36: ; CODE XREF: sub_4CCC80+211j
|
||
cmp edx, 100h
|
||
jge short loc_4CCF70
|
||
mov ebp, [esp+4Ch+var_30]
|
||
mov ebx, [esp+4Ch+var_10]
|
||
jmp loc_4CCE20
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCF4B: ; CODE XREF: sub_4CCC80+26Fj
|
||
mov dx, di
|
||
shr dx, 5
|
||
sub di, dx
|
||
mov edx, [esp+4Ch+arg_0]
|
||
sub eax, ecx
|
||
sub esi, ecx
|
||
mov [edx+ebp], di
|
||
add edx, 1
|
||
|
||
loc_4CCF64: ; CODE XREF: sub_4CCC80+289j
|
||
cmp edx, 100h
|
||
jl loc_4CCEB0
|
||
|
||
loc_4CCF70: ; CODE XREF: sub_4CCC80+21Dj
|
||
; sub_4CCC80+2BCj
|
||
mov ecx, [esp+4Ch+var_2C]
|
||
mov edi, [esp+4Ch+arg_10]
|
||
mov [ecx+edi], dl
|
||
add ecx, 1
|
||
mov [esp+4Ch+var_2C], ecx
|
||
mov ecx, [esp+4Ch+var_34]
|
||
cmp ecx, 4
|
||
mov byte ptr [esp+4Ch+arg_0], dl
|
||
jge short loc_4CCF99
|
||
mov [esp+4Ch+var_34], 0
|
||
jmp short loc_4CCFA5
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCF99: ; CODE XREF: sub_4CCC80+30Dj
|
||
cmp ecx, 0Ah
|
||
jge short loc_4CCFEF
|
||
sub ecx, 3
|
||
|
||
loc_4CCFA1: ; CODE XREF: sub_4CCC80+372j
|
||
mov [esp+4Ch+var_34], ecx
|
||
|
||
loc_4CCFA5: ; CODE XREF: sub_4CCC80+317j
|
||
; sub_4CCC80+530j ...
|
||
mov ecx, [esp+4Ch+var_2C]
|
||
cmp ecx, [esp+4Ch+arg_14]
|
||
jb loc_4CCD50
|
||
|
||
loc_4CCFB3: ; CODE XREF: sub_4CCC80+A13j
|
||
; sub_4CCC80+A5Aj
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CCFCD
|
||
mov edx, [esp+4Ch+arg_8]
|
||
cmp edx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
add [esp+4Ch+arg_8], 1
|
||
|
||
loc_4CCFCD: ; CODE XREF: sub_4CCC80+C6j
|
||
; sub_4CCC80+338j
|
||
mov eax, [esp+4Ch+arg_8]
|
||
sub eax, [esp+4Ch+arg_4]
|
||
mov ecx, [esp+4Ch+arg_C]
|
||
mov edx, [esp+4Ch+var_2C]
|
||
pop edi
|
||
mov [ecx], eax
|
||
mov eax, [esp+48h+arg_18]
|
||
pop esi
|
||
pop ebp
|
||
mov [eax], edx
|
||
xor eax, eax
|
||
pop ebx
|
||
add esp, 3Ch
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCFEF: ; CODE XREF: sub_4CCC80+31Cj
|
||
sub ecx, 6
|
||
jmp short loc_4CCFA1
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CCFF4: ; CODE XREF: sub_4CCC80+129j
|
||
sub eax, ecx
|
||
sub esi, ecx
|
||
mov cx, bx
|
||
shr cx, 5
|
||
sub bx, cx
|
||
cmp eax, 1000000h
|
||
mov ecx, [esp+4Ch+var_30]
|
||
mov [ecx], bx
|
||
jnb short loc_4CD030
|
||
mov ecx, [esp+4Ch+arg_8]
|
||
cmp ecx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx ebx, byte ptr [ecx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, ebx
|
||
add ecx, 1
|
||
mov [esp+4Ch+arg_8], ecx
|
||
|
||
loc_4CD030: ; CODE XREF: sub_4CCC80+38Ej
|
||
movzx ebx, word ptr [edi+edx*2+180h]
|
||
movzx ebp, bx
|
||
mov ecx, eax
|
||
shr ecx, 0Bh
|
||
imul ecx, ebp
|
||
cmp esi, ecx
|
||
jnb short loc_4CD096
|
||
mov eax, ecx
|
||
mov ecx, 800h
|
||
sub ecx, ebp
|
||
sar ecx, 5
|
||
add ecx, ebx
|
||
mov [edi+edx*2+180h], cx
|
||
mov ecx, [esp+4Ch+var_28]
|
||
mov ebp, [esp+4Ch+var_1C]
|
||
mov [esp+4Ch+var_18], ecx
|
||
mov ecx, [esp+4Ch+var_24]
|
||
mov [esp+4Ch+var_28], ecx
|
||
mov ecx, [esp+4Ch+var_38]
|
||
mov [esp+4Ch+var_24], ecx
|
||
xor ecx, ecx
|
||
cmp edx, 7
|
||
setl cl
|
||
sub ecx, 1
|
||
and ecx, 3
|
||
mov [esp+4Ch+var_34], ecx
|
||
lea ecx, [edi+664h]
|
||
jmp loc_4CD30B
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD096: ; CODE XREF: sub_4CCC80+3C5j
|
||
sub eax, ecx
|
||
sub esi, ecx
|
||
mov cx, bx
|
||
shr cx, 5
|
||
sub bx, cx
|
||
cmp eax, 1000000h
|
||
mov [edi+edx*2+180h], bx
|
||
jnb short loc_4CD0D3
|
||
mov ecx, [esp+4Ch+arg_8]
|
||
cmp ecx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx ebx, byte ptr [ecx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, ebx
|
||
add ecx, 1
|
||
mov [esp+4Ch+arg_8], ecx
|
||
|
||
loc_4CD0D3: ; CODE XREF: sub_4CCC80+431j
|
||
movzx ebx, word ptr [edi+edx*2+198h]
|
||
movzx ebp, bx
|
||
mov ecx, eax
|
||
shr ecx, 0Bh
|
||
imul ecx, ebp
|
||
cmp esi, ecx
|
||
mov [esp+4Ch+arg_0], ebx
|
||
jnb loc_4CD1D3
|
||
mov ebx, 800h
|
||
sub ebx, ebp
|
||
mov ebp, [esp+4Ch+var_1C]
|
||
sar ebx, 5
|
||
add ebx, [esp+4Ch+arg_0]
|
||
mov eax, ecx
|
||
mov [edi+edx*2+198h], bx
|
||
lea ebx, [edx+0Fh]
|
||
shl ebx, 4
|
||
add ebx, ebp
|
||
cmp ecx, 1000000h
|
||
lea ebx, [edi+ebx*2]
|
||
mov [esp+4Ch+var_30], ebx
|
||
jnb short loc_4CD147
|
||
mov ebx, [esp+4Ch+arg_8]
|
||
cmp ebx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
shl ecx, 8
|
||
mov eax, ecx
|
||
movzx ecx, byte ptr [ebx]
|
||
shl esi, 8
|
||
or esi, ecx
|
||
add ebx, 1
|
||
mov [esp+4Ch+arg_8], ebx
|
||
|
||
loc_4CD147: ; CODE XREF: sub_4CCC80+4A3j
|
||
mov ecx, [esp+4Ch+var_30]
|
||
movzx ecx, word ptr [ecx]
|
||
mov [esp+4Ch+arg_0], ecx
|
||
movzx ebx, cx
|
||
mov ecx, eax
|
||
shr ecx, 0Bh
|
||
imul ecx, ebx
|
||
cmp esi, ecx
|
||
jnb short loc_4CD1B5
|
||
mov edi, [esp+4Ch+var_30]
|
||
mov eax, ecx
|
||
mov ecx, 800h
|
||
sub ecx, ebx
|
||
sar ecx, 5
|
||
add ecx, [esp+4Ch+arg_0]
|
||
mov [edi], cx
|
||
mov edi, [esp+4Ch+var_2C]
|
||
test edi, edi
|
||
jz loc_4CD6E2
|
||
xor ecx, ecx
|
||
cmp edx, 7
|
||
mov edx, [esp+4Ch+arg_10]
|
||
setnl cl
|
||
lea ecx, [ecx+ecx+9]
|
||
mov [esp+4Ch+var_34], ecx
|
||
mov ecx, edi
|
||
sub ecx, [esp+4Ch+var_38]
|
||
add edi, 1
|
||
mov cl, [ecx+edx]
|
||
mov [edi+edx-1], cl
|
||
mov byte ptr [esp+4Ch+arg_0], cl
|
||
mov [esp+4Ch+var_2C], edi
|
||
jmp loc_4CCFA5
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD1B5: ; CODE XREF: sub_4CCC80+4DFj
|
||
sub eax, ecx
|
||
sub esi, ecx
|
||
mov ecx, [esp+4Ch+arg_0]
|
||
mov bx, cx
|
||
shr bx, 5
|
||
sub cx, bx
|
||
mov ebx, [esp+4Ch+var_30]
|
||
mov [ebx], cx
|
||
jmp loc_4CD2F0
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD1D3: ; CODE XREF: sub_4CCC80+46Cj
|
||
sub eax, ecx
|
||
sub esi, ecx
|
||
mov cx, bx
|
||
shr cx, 5
|
||
sub bx, cx
|
||
cmp eax, 1000000h
|
||
mov [edi+edx*2+198h], bx
|
||
jnb short loc_4CD210
|
||
mov ecx, [esp+4Ch+arg_8]
|
||
cmp ecx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx ebx, byte ptr [ecx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, ebx
|
||
add ecx, 1
|
||
mov [esp+4Ch+arg_8], ecx
|
||
|
||
loc_4CD210: ; CODE XREF: sub_4CCC80+56Ej
|
||
movzx ebx, word ptr [edi+edx*2+1B0h]
|
||
movzx ebp, bx
|
||
mov ecx, eax
|
||
shr ecx, 0Bh
|
||
imul ecx, ebp
|
||
cmp esi, ecx
|
||
jnb short loc_4CD246
|
||
mov eax, ecx
|
||
mov ecx, 800h
|
||
sub ecx, ebp
|
||
sar ecx, 5
|
||
add ecx, ebx
|
||
mov [edi+edx*2+1B0h], cx
|
||
mov ecx, [esp+4Ch+var_24]
|
||
jmp loc_4CD2E0
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD246: ; CODE XREF: sub_4CCC80+5A5j
|
||
sub eax, ecx
|
||
sub esi, ecx
|
||
mov cx, bx
|
||
shr cx, 5
|
||
sub bx, cx
|
||
cmp eax, 1000000h
|
||
mov [edi+edx*2+1B0h], bx
|
||
jnb short loc_4CD283
|
||
mov ecx, [esp+4Ch+arg_8]
|
||
cmp ecx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx ebx, byte ptr [ecx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, ebx
|
||
add ecx, 1
|
||
mov [esp+4Ch+arg_8], ecx
|
||
|
||
loc_4CD283: ; CODE XREF: sub_4CCC80+5E1j
|
||
movzx ebx, word ptr [edi+edx*2+1C8h]
|
||
movzx ebp, bx
|
||
mov ecx, eax
|
||
shr ecx, 0Bh
|
||
imul ecx, ebp
|
||
cmp esi, ecx
|
||
jnb short loc_4CD2B6
|
||
mov eax, ecx
|
||
mov ecx, 800h
|
||
sub ecx, ebp
|
||
sar ecx, 5
|
||
add ecx, ebx
|
||
mov [edi+edx*2+1C8h], cx
|
||
mov ecx, [esp+4Ch+var_28]
|
||
jmp short loc_4CD2D8
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD2B6: ; CODE XREF: sub_4CCC80+618j
|
||
sub eax, ecx
|
||
sub esi, ecx
|
||
mov cx, bx
|
||
shr cx, 5
|
||
sub bx, cx
|
||
mov ecx, [esp+4Ch+var_18]
|
||
mov [edi+edx*2+1C8h], bx
|
||
mov ebx, [esp+4Ch+var_28]
|
||
mov [esp+4Ch+var_18], ebx
|
||
|
||
loc_4CD2D8: ; CODE XREF: sub_4CCC80+634j
|
||
mov ebx, [esp+4Ch+var_24]
|
||
mov [esp+4Ch+var_28], ebx
|
||
|
||
loc_4CD2E0: ; CODE XREF: sub_4CCC80+5C1j
|
||
mov ebx, [esp+4Ch+var_38]
|
||
mov ebp, [esp+4Ch+var_1C]
|
||
mov [esp+4Ch+var_24], ebx
|
||
mov [esp+4Ch+var_38], ecx
|
||
|
||
loc_4CD2F0: ; CODE XREF: sub_4CCC80+54Ej
|
||
xor ecx, ecx
|
||
cmp edx, 7
|
||
setnl cl
|
||
sub ecx, 1
|
||
and ecx, 0FFFFFFFDh
|
||
add ecx, 0Bh
|
||
mov [esp+4Ch+var_34], ecx
|
||
lea ecx, [edi+0A68h]
|
||
|
||
loc_4CD30B: ; CODE XREF: sub_4CCC80+411j
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CD332
|
||
mov edx, [esp+4Ch+arg_8]
|
||
cmp edx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx edi, byte ptr [edx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, edi
|
||
add edx, 1
|
||
mov [esp+4Ch+arg_8], edx
|
||
|
||
loc_4CD332: ; CODE XREF: sub_4CCC80+690j
|
||
movzx edi, word ptr [ecx]
|
||
movzx ebx, di
|
||
mov edx, eax
|
||
shr edx, 0Bh
|
||
imul edx, ebx
|
||
cmp esi, edx
|
||
jnb short loc_4CD36E
|
||
mov eax, edx
|
||
mov edx, 800h
|
||
sub edx, ebx
|
||
sar edx, 5
|
||
add edx, edi
|
||
mov [ecx], dx
|
||
shl ebp, 4
|
||
lea ecx, [ecx+ebp+4]
|
||
mov [esp+4Ch+var_1C], 0
|
||
mov edx, 3
|
||
jmp loc_4CD409
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD36E: ; CODE XREF: sub_4CCC80+6C2j
|
||
sub eax, edx
|
||
sub esi, edx
|
||
mov dx, di
|
||
shr dx, 5
|
||
sub di, dx
|
||
cmp eax, 1000000h
|
||
mov [ecx], di
|
||
jnb short loc_4CD3A6
|
||
mov edx, [esp+4Ch+arg_8]
|
||
cmp edx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx edi, byte ptr [edx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, edi
|
||
add edx, 1
|
||
mov [esp+4Ch+arg_8], edx
|
||
|
||
loc_4CD3A6: ; CODE XREF: sub_4CCC80+704j
|
||
movzx edx, word ptr [ecx+2]
|
||
movzx ebx, dx
|
||
mov edi, eax
|
||
shr edi, 0Bh
|
||
imul edi, ebx
|
||
cmp esi, edi
|
||
jnb short loc_4CD3E4
|
||
mov eax, edi
|
||
mov edi, 800h
|
||
sub edi, ebx
|
||
sar edi, 5
|
||
add edi, edx
|
||
shl ebp, 4
|
||
mov [ecx+2], di
|
||
lea ecx, [ecx+ebp+104h]
|
||
mov [esp+4Ch+var_1C], 8
|
||
mov edx, 3
|
||
jmp short loc_4CD409
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD3E4: ; CODE XREF: sub_4CCC80+737j
|
||
sub eax, edi
|
||
sub esi, edi
|
||
mov di, dx
|
||
shr di, 5
|
||
sub dx, di
|
||
mov [ecx+2], dx
|
||
add ecx, 204h
|
||
mov [esp+4Ch+var_1C], 10h
|
||
mov edx, 8
|
||
|
||
loc_4CD409: ; CODE XREF: sub_4CCC80+6E9j
|
||
; sub_4CCC80+762j
|
||
mov [esp+4Ch+arg_0], edx
|
||
mov [esp+4Ch+var_10], edx
|
||
mov ebx, 1
|
||
jmp short loc_4CD420
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CD420: ; CODE XREF: sub_4CCC80+796j
|
||
; sub_4CCC80+819j
|
||
cmp eax, 1000000h
|
||
mov edx, [esp+4Ch+arg_8]
|
||
lea edi, [ebx+ebx]
|
||
mov [esp+4Ch+var_30], edi
|
||
jnb short loc_4CD44E
|
||
cmp edx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx ebp, byte ptr [edx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, ebp
|
||
add edx, 1
|
||
mov [esp+4Ch+arg_8], edx
|
||
|
||
loc_4CD44E: ; CODE XREF: sub_4CCC80+7B0j
|
||
movzx edi, word ptr [edi+ecx]
|
||
movzx ebp, di
|
||
mov edx, eax
|
||
shr edx, 0Bh
|
||
imul edx, ebp
|
||
cmp esi, edx
|
||
jnb short loc_4CD47B
|
||
mov eax, edx
|
||
mov edx, 800h
|
||
sub edx, ebp
|
||
sar edx, 5
|
||
add edx, edi
|
||
mov edi, [esp+4Ch+var_30]
|
||
mov [edi+ecx], dx
|
||
add ebx, ebx
|
||
jmp short loc_4CD494
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD47B: ; CODE XREF: sub_4CCC80+7DFj
|
||
mov ebx, [esp+4Ch+var_30]
|
||
sub eax, edx
|
||
sub esi, edx
|
||
mov dx, di
|
||
shr dx, 5
|
||
sub di, dx
|
||
mov [ebx+ecx], di
|
||
add ebx, 1
|
||
|
||
loc_4CD494: ; CODE XREF: sub_4CCC80+7F9j
|
||
sub [esp+4Ch+var_10], 1
|
||
jnz short loc_4CD420
|
||
mov ecx, [esp+4Ch+arg_0]
|
||
mov edx, 1
|
||
shl edx, cl
|
||
mov ecx, [esp+4Ch+var_1C]
|
||
sub ecx, edx
|
||
add ebx, ecx
|
||
cmp [esp+4Ch+var_34], 4
|
||
mov [esp+4Ch+var_4], ebx
|
||
jge loc_4CD69D
|
||
add [esp+4Ch+var_34], 7
|
||
cmp ebx, 4
|
||
jl short loc_4CD4CC
|
||
mov ebx, 3
|
||
|
||
loc_4CD4CC: ; CODE XREF: sub_4CCC80+845j
|
||
mov ecx, [esp+4Ch+var_20]
|
||
shl ebx, 7
|
||
lea ecx, [ebx+ecx+360h]
|
||
mov [esp+4Ch+var_30], ecx
|
||
mov [esp+4Ch+arg_0], 6
|
||
mov edi, 1
|
||
jmp short loc_4CD4F0
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CD4F0: ; CODE XREF: sub_4CCC80+86Bj
|
||
; sub_4CCC80+8E3j
|
||
cmp eax, 1000000h
|
||
mov edx, [esp+4Ch+arg_8]
|
||
lea ebx, [edi+edi]
|
||
jnb short loc_4CD51A
|
||
cmp edx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx ebp, byte ptr [edx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, ebp
|
||
add edx, 1
|
||
mov [esp+4Ch+arg_8], edx
|
||
|
||
loc_4CD51A: ; CODE XREF: sub_4CCC80+87Cj
|
||
movzx edx, word ptr [ebx+ecx]
|
||
movzx ebp, dx
|
||
mov ecx, eax
|
||
shr ecx, 0Bh
|
||
imul ecx, ebp
|
||
cmp esi, ecx
|
||
jnb short loc_4CD545
|
||
mov eax, ecx
|
||
mov ecx, 800h
|
||
sub ecx, ebp
|
||
sar ecx, 5
|
||
add ecx, edx
|
||
mov [esp+4Ch+var_10], ecx
|
||
mov edx, ecx
|
||
add edi, edi
|
||
jmp short loc_4CD556
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD545: ; CODE XREF: sub_4CCC80+8ABj
|
||
sub eax, ecx
|
||
sub esi, ecx
|
||
mov cx, dx
|
||
shr cx, 5
|
||
sub dx, cx
|
||
lea edi, [ebx+1]
|
||
|
||
loc_4CD556: ; CODE XREF: sub_4CCC80+8C3j
|
||
sub [esp+4Ch+arg_0], 1
|
||
mov ecx, [esp+4Ch+var_30]
|
||
mov [ebx+ecx], dx
|
||
jnz short loc_4CD4F0
|
||
sub edi, 40h
|
||
cmp edi, 4
|
||
jl loc_4CD68A
|
||
mov ebx, 1
|
||
mov ecx, edi
|
||
mov edx, edi
|
||
sar ecx, 1
|
||
and edx, ebx
|
||
sub ecx, ebx
|
||
or edx, 2
|
||
cmp edi, 0Eh
|
||
mov [esp+4Ch+var_30], ecx
|
||
jge short loc_4CD5A1
|
||
shl edx, cl
|
||
mov ecx, [esp+4Ch+var_20]
|
||
mov [esp+4Ch+var_38], edx
|
||
sub edx, edi
|
||
lea ebp, [ecx+edx*2+55Eh]
|
||
jmp short loc_4CD5F3
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD5A1: ; CODE XREF: sub_4CCC80+90Aj
|
||
mov edi, [esp+4Ch+arg_8]
|
||
sub ecx, 4
|
||
|
||
loc_4CD5A8: ; CODE XREF: sub_4CCC80+958j
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CD5CA
|
||
cmp edi, [esp+4Ch+var_3C]
|
||
jz loc_4CD6EF
|
||
movzx ebp, byte ptr [edi]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, ebp
|
||
add edi, ebx
|
||
mov [esp+4Ch+arg_8], edi
|
||
|
||
loc_4CD5CA: ; CODE XREF: sub_4CCC80+92Dj
|
||
shr eax, 1
|
||
add edx, edx
|
||
cmp esi, eax
|
||
jb short loc_4CD5D6
|
||
sub esi, eax
|
||
or edx, ebx
|
||
|
||
loc_4CD5D6: ; CODE XREF: sub_4CCC80+950j
|
||
sub ecx, ebx
|
||
jnz short loc_4CD5A8
|
||
mov ebp, [esp+4Ch+var_20]
|
||
add ebp, 644h
|
||
shl edx, 4
|
||
mov [esp+4Ch+var_38], edx
|
||
mov [esp+4Ch+var_30], 4
|
||
|
||
loc_4CD5F3: ; CODE XREF: sub_4CCC80+91Fj
|
||
mov [esp+4Ch+var_1C], ebx
|
||
mov [esp+4Ch+arg_0], ebx
|
||
jmp short loc_4CD600
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CD600: ; CODE XREF: sub_4CCC80+97Bj
|
||
; sub_4CCC80+A02j
|
||
mov ebx, [esp+4Ch+arg_0]
|
||
add ebx, ebx
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CD62D
|
||
mov ecx, [esp+4Ch+arg_8]
|
||
cmp ecx, [esp+4Ch+var_3C]
|
||
jz loc_4CD6E2
|
||
movzx edx, byte ptr [ecx]
|
||
shl esi, 8
|
||
shl eax, 8
|
||
or esi, edx
|
||
add ecx, 1
|
||
mov [esp+4Ch+arg_8], ecx
|
||
|
||
loc_4CD62D: ; CODE XREF: sub_4CCC80+98Bj
|
||
movzx edi, word ptr [ebx+ebp]
|
||
movzx ecx, di
|
||
mov edx, eax
|
||
shr edx, 0Bh
|
||
imul edx, ecx
|
||
cmp esi, edx
|
||
jnb short loc_4CD658
|
||
mov eax, edx
|
||
mov edx, 800h
|
||
sub edx, ecx
|
||
sar edx, 5
|
||
add edx, edi
|
||
shl [esp+4Ch+arg_0], 1
|
||
mov [ebx+ebp], dx
|
||
jmp short loc_4CD679
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD658: ; CODE XREF: sub_4CCC80+9BEj
|
||
mov cx, di
|
||
shr cx, 5
|
||
sub di, cx
|
||
sub eax, edx
|
||
sub esi, edx
|
||
mov edx, [esp+4Ch+var_1C]
|
||
mov [ebx+ebp], di
|
||
add ebx, 1
|
||
or [esp+4Ch+var_38], edx
|
||
mov [esp+4Ch+arg_0], ebx
|
||
|
||
loc_4CD679: ; CODE XREF: sub_4CCC80+9D6j
|
||
shl [esp+4Ch+var_1C], 1
|
||
sub [esp+4Ch+var_30], 1
|
||
jnz loc_4CD600
|
||
jmp short loc_4CD68E
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD68A: ; CODE XREF: sub_4CCC80+8EBj
|
||
mov [esp+4Ch+var_38], edi
|
||
|
||
loc_4CD68E: ; CODE XREF: sub_4CCC80+A08j
|
||
add [esp+4Ch+var_38], 1
|
||
jz loc_4CCFB3
|
||
mov ebx, [esp+4Ch+var_4]
|
||
|
||
loc_4CD69D: ; CODE XREF: sub_4CCC80+837j
|
||
mov ebp, [esp+4Ch+var_2C]
|
||
mov ecx, [esp+4Ch+var_38]
|
||
add ebx, 2
|
||
cmp ecx, ebp
|
||
ja short loc_4CD6E2
|
||
mov edi, ebp
|
||
sub edi, ecx
|
||
add edi, [esp+4Ch+arg_10]
|
||
|
||
loc_4CD6B4: ; CODE XREF: sub_4CCC80+A60j
|
||
mov cl, [edi]
|
||
mov edx, [esp+4Ch+arg_10]
|
||
sub ebx, 1
|
||
mov [edx+ebp], cl
|
||
add ebp, 1
|
||
add edi, 1
|
||
test ebx, ebx
|
||
mov byte ptr [esp+4Ch+arg_0], cl
|
||
mov [esp+4Ch+var_2C], ebp
|
||
jz loc_4CCFA5
|
||
cmp ebp, [esp+4Ch+arg_14]
|
||
jnb loc_4CCFB3
|
||
jmp short loc_4CD6B4
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD6E2: ; CODE XREF: sub_4CCC80+101j
|
||
; sub_4CCC80+1C9j ...
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
mov eax, 1
|
||
pop ebx
|
||
add esp, 3Ch
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD6EF: ; CODE XREF: sub_4CCC80+933j
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
mov eax, ebx
|
||
pop ebx
|
||
add esp, 3Ch
|
||
retn
|
||
sub_4CCC80 endp
|
||
|
||
_starcraft_decompress_lzma PROC
|
||
;sub_4CD700
|
||
|
||
var_14 = byte ptr -14h
|
||
var_10 = dword ptr -10h
|
||
var_C = dword ptr -0Ch
|
||
var_4 = dword ptr -4
|
||
pbInBuffer = dword ptr 4
|
||
cbInBuffer = dword ptr 8
|
||
pbOutBuffer = dword ptr 0Ch
|
||
cbOutBuffer = dword ptr 10h
|
||
pcbOutBuffer = dword ptr 14h
|
||
pfnAllocateMemory= dword ptr 18h
|
||
pfnFreeMemory = dword ptr 1Ch
|
||
|
||
sub esp, 14h
|
||
push ebx
|
||
mov ebx, [esp+18h+cbInBuffer]
|
||
cmp ebx, 0Eh ; LZMA_PROPS_SIZE + 8
|
||
jnb short loc_4CD714
|
||
xor al, al
|
||
pop ebx
|
||
add esp, 14h
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD714: ; CODE XREF: Decompress_lzma_internal+Bj
|
||
push ebp
|
||
mov ebp, [esp+1Ch+pcbOutBuffer]
|
||
push edi
|
||
mov edi, [esp+20h+pbInBuffer]
|
||
mov dword ptr [ebp+0], 0
|
||
cmp byte ptr [edi], 0
|
||
jnz short loc_4CD741
|
||
push 5
|
||
lea eax, [edi+1]
|
||
push eax
|
||
lea ecx, [esp+28h+var_10]
|
||
push ecx
|
||
call LzmaProps_Decode
|
||
add esp, 0Ch
|
||
test eax, eax
|
||
jz short loc_4CD74A
|
||
|
||
loc_4CD741: ; CODE XREF: Decompress_lzma_internal+28j
|
||
pop edi
|
||
pop ebp
|
||
xor al, al
|
||
pop ebx
|
||
add esp, 14h
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD74A: ; CODE XREF: Decompress_lzma_internal+3Fj
|
||
mov edx, [esp+20h+var_10]
|
||
mov eax, [esp+20h+var_C]
|
||
lea ecx, [eax+edx]
|
||
mov edx, 300h
|
||
shl edx, cl
|
||
push esi
|
||
lea eax, [edx+edx+0E6Ch]
|
||
push eax
|
||
call [esp+28h+pfnAllocateMemory]
|
||
mov esi, eax
|
||
add esp, 4
|
||
test esi, esi
|
||
mov [esp+24h+var_4], esi
|
||
jz short loc_4CD7AA
|
||
mov edx, [esp+24h+cbOutBuffer]
|
||
mov eax, [esp+24h+pbOutBuffer]
|
||
lea ecx, [esp+24h+cbInBuffer]
|
||
push ecx ; cbInBuffer
|
||
push edx ; cbOutBuffer
|
||
push eax ; pbOutBuffer
|
||
lea ecx, [esp+30h+var_14]
|
||
push ecx ; &var_14
|
||
add ebx, 0FFFFFFF2h
|
||
push ebx ; cbInBuffer - LZMA86_HEADER_SIZE
|
||
add edi, 0Eh
|
||
lea edx, [esp+38h+var_10]
|
||
push edi ; pbInBuffer + LZMA86_HEADER_SIZE
|
||
push edx ; dest
|
||
call sub_4CCC80
|
||
push esi
|
||
mov edi, eax
|
||
call [esp+44h+pfnFreeMemory]
|
||
add esp, 20h
|
||
test edi, edi
|
||
jz short loc_4CD7B4
|
||
|
||
loc_4CD7AA: ; CODE XREF: Decompress_lzma_internal+74j
|
||
pop esi
|
||
pop edi
|
||
pop ebp
|
||
xor al, al
|
||
pop ebx
|
||
add esp, 14h
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD7B4: ; CODE XREF: Decompress_lzma_internal+A8j
|
||
mov eax, [esp+24h+cbInBuffer]
|
||
pop esi
|
||
pop edi
|
||
mov [ebp+0], eax
|
||
pop ebp
|
||
mov al, 1
|
||
pop ebx
|
||
add esp, 14h
|
||
retn
|
||
_starcraft_decompress_lzma ENDP
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CD7D0 proc near ; CODE XREF: sub_4CDC00+74p
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push esi
|
||
mov esi, [esp+4+arg_0]
|
||
or esi, 8
|
||
xor eax, eax
|
||
cmp esi, 1
|
||
jz short loc_4CD806
|
||
push edi
|
||
|
||
loc_4CD7E0: ; CODE XREF: sub_4CD7D0+33j
|
||
mov edx, esi
|
||
shr esi, 1
|
||
mov edi, [ecx+esi*4]
|
||
and edx, 1
|
||
sub edi, edx
|
||
neg edx
|
||
xor edi, edx
|
||
shr edi, 2
|
||
and edi, 1FFh
|
||
add eax, dword_550998[edi*4]
|
||
cmp esi, 1
|
||
jnz short loc_4CD7E0
|
||
pop edi
|
||
|
||
loc_4CD806: ; CODE XREF: sub_4CD7D0+Dj
|
||
pop esi
|
||
retn 4
|
||
sub_4CD7D0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CD810 proc near ; CODE XREF: CEncoder_FillAlignPrices+17p
|
||
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
|
||
push ecx
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
xor eax, eax
|
||
push edi
|
||
mov edi, [esp+14h+arg_0]
|
||
mov [esp+14h+var_4], ecx
|
||
lea esi, [eax+1]
|
||
lea ebx, [eax+4]
|
||
|
||
loc_4CD825: ; CODE XREF: sub_4CD810+42j
|
||
mov ecx, [esp+14h+var_4]
|
||
mov ecx, [ecx+esi*4]
|
||
mov edx, edi
|
||
and edx, 1
|
||
sub ecx, edx
|
||
mov ebp, edx
|
||
neg ebp
|
||
xor ecx, ebp
|
||
shr ecx, 2
|
||
and ecx, 1FFh
|
||
add eax, dword_550998[ecx*4]
|
||
add esi, esi
|
||
shr edi, 1
|
||
or esi, edx
|
||
sub ebx, 1
|
||
jnz short loc_4CD825
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
pop ecx
|
||
retn 4
|
||
sub_4CD810 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CD860 proc near ; CODE XREF: CEncoder_FillDistancesPrices+6Bp
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
push edi
|
||
mov edi, [esp+4+arg_4]
|
||
xor eax, eax
|
||
test edi, edi
|
||
lea edx, [eax+1]
|
||
jz short loc_4CD8A7
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+10h+arg_8]
|
||
|
||
loc_4CD875: ; CODE XREF: sub_4CD860+42j
|
||
mov ebx, [esp+10h+arg_0]
|
||
mov ebx, [ebx+edx*4]
|
||
mov ecx, esi
|
||
and ecx, 1
|
||
sub ebx, ecx
|
||
mov ebp, ecx
|
||
neg ebp
|
||
xor ebx, ebp
|
||
shr ebx, 2
|
||
and ebx, 1FFh
|
||
add eax, dword_550998[ebx*4]
|
||
add edx, edx
|
||
shr esi, 1
|
||
or edx, ecx
|
||
sub edi, 1
|
||
jnz short loc_4CD875
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
|
||
loc_4CD8A7: ; CODE XREF: sub_4CD860+Cj
|
||
pop edi
|
||
retn
|
||
sub_4CD860 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CD8B0 proc near ; CODE XREF: CEncoder_CodeOneBlock+7B8p
|
||
mov eax, [ecx+24h]
|
||
mov edx, [ecx+1Ch]
|
||
push ebx
|
||
push esi
|
||
mov esi, [ecx+30h]
|
||
xor ebx, ebx
|
||
push edi
|
||
mov edi, [ecx+34h]
|
||
sub esi, eax
|
||
sbb edi, ebx
|
||
add esi, edx
|
||
adc edi, ebx
|
||
cmp eax, edx
|
||
jbe short loc_4CD8D4
|
||
mov eax, [ecx+28h]
|
||
add esi, eax
|
||
adc edi, ebx
|
||
|
||
loc_4CD8D4: ; CODE XREF: sub_4CD8B0+1Bj
|
||
mov eax, [ecx]
|
||
xor edx, edx
|
||
add eax, esi
|
||
adc edx, edi
|
||
pop edi
|
||
add eax, 4
|
||
pop esi
|
||
adc edx, ebx
|
||
pop ebx
|
||
retn
|
||
sub_4CD8B0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CD8F0 proc near ; CODE XREF: sub_4CD940+21p
|
||
; .text:loc_4CF730j ...
|
||
mov eax, dword_553598
|
||
test eax, eax
|
||
push esi
|
||
mov esi, ecx
|
||
push edi
|
||
mov edi, [esi]
|
||
jnz short loc_4CD92A
|
||
push 0Ch ; Size
|
||
call _operator_new ; operator new(uint)
|
||
add esp, 4
|
||
test eax, eax
|
||
jz short loc_4CD923
|
||
mov dword ptr [eax], 0
|
||
mov dword ptr [eax+4], 0
|
||
mov dword ptr [eax+8], 0
|
||
jmp short loc_4CD925
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD923: ; CODE XREF: sub_4CD8F0+1Bj
|
||
xor eax, eax
|
||
|
||
loc_4CD925: ; CODE XREF: sub_4CD8F0+31j
|
||
mov dword_553598, eax
|
||
|
||
loc_4CD92A: ; CODE XREF: sub_4CD8F0+Dj
|
||
mov eax, [eax+4]
|
||
test eax, eax
|
||
jz short loc_4CD937
|
||
push edi
|
||
call eax
|
||
add esp, 4
|
||
|
||
loc_4CD937: ; CODE XREF: sub_4CD8F0+3Fj
|
||
pop edi
|
||
mov dword ptr [esi], 0
|
||
pop esi
|
||
retn
|
||
sub_4CD8F0 endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CD940 proc near ; CODE XREF: sub_4D0270+74p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
mov ebx, [esp+4+arg_4]
|
||
push esi
|
||
mov esi, ecx
|
||
cmp dword ptr [esi], 0
|
||
push edi
|
||
mov edi, [esp+0Ch+arg_0]
|
||
jz short loc_4CD95F
|
||
mov eax, [esi+8]
|
||
add eax, [esi+4]
|
||
lea ecx, [edi+ebx]
|
||
cmp ecx, eax
|
||
jz short loc_4CD981
|
||
|
||
loc_4CD95F: ; CODE XREF: sub_4CD940+10j
|
||
mov ecx, esi
|
||
call sub_4CD8F0
|
||
lea ecx, [edi+ebx]
|
||
mov edx, 1
|
||
shl edx, cl
|
||
imul edx, 0C00h
|
||
push edx
|
||
call sub_4CB8A0
|
||
add esp, 4
|
||
mov [esi], eax
|
||
|
||
loc_4CD981: ; CODE XREF: sub_4CD940+1Dj
|
||
mov ecx, edi
|
||
mov eax, 1
|
||
shl eax, cl
|
||
mov [esi+8], edi
|
||
pop edi
|
||
mov [esi+4], ebx
|
||
sub eax, 1
|
||
mov [esi+0Ch], eax
|
||
xor eax, eax
|
||
cmp [esi], eax
|
||
pop esi
|
||
setnz al
|
||
pop ebx
|
||
retn 8
|
||
sub_4CD940 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CD9B0 proc near ; CODE XREF: CEncoder_GetOptimum+436p
|
||
; CEncoder_GetOptimum+AE1p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = byte ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
mov edx, [esp+arg_0]
|
||
test edx, edx
|
||
push esi
|
||
jnz short loc_4CD9F2
|
||
movzx eax, [esp+4+arg_4]
|
||
mov edx, eax
|
||
shl edx, 4
|
||
add edx, [esp+4+arg_8]
|
||
mov esi, 800h
|
||
sub esi, [ecx+edx*4+284B0h]
|
||
mov ecx, [ecx+eax*4+28420h]
|
||
shr esi, 2
|
||
mov eax, dword_550998[esi*4]
|
||
shr ecx, 2
|
||
add eax, dword_550998[ecx*4]
|
||
pop esi
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CD9F2: ; CODE XREF: sub_4CD9B0+7j
|
||
movzx esi, [esp+4+arg_4]
|
||
mov eax, 800h
|
||
sub eax, [ecx+esi*4+28420h]
|
||
shr eax, 2
|
||
cmp edx, 1
|
||
mov eax, dword_550998[eax*4]
|
||
jnz short loc_4CDA27
|
||
mov ecx, [ecx+esi*4+28450h]
|
||
shr ecx, 2
|
||
add eax, dword_550998[ecx*4]
|
||
pop esi
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CDA27: ; CODE XREF: sub_4CD9B0+60j
|
||
push edi
|
||
add edx, 0FFFFFFFEh
|
||
mov edi, 800h
|
||
sub edi, [ecx+esi*4+28450h]
|
||
mov ecx, [ecx+esi*4+28480h]
|
||
sub ecx, edx
|
||
neg edx
|
||
xor ecx, edx
|
||
shr edi, 2
|
||
mov edx, dword_550998[edi*4]
|
||
shr ecx, 2
|
||
and ecx, 1FFh
|
||
add edx, dword_550998[ecx*4]
|
||
pop edi
|
||
add eax, edx
|
||
pop esi
|
||
retn 0Ch
|
||
sub_4CD9B0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CDA70 proc near ; CODE XREF: CEncoder_CodeReal+10Cp
|
||
; CEncoder_CodeReal+134p ...
|
||
push esi
|
||
mov esi, [ecx]
|
||
cmp dword ptr [esi+80h], 0
|
||
jz short loc_4CDA8C
|
||
cmp byte ptr [esi+33B95h], 0
|
||
jz short loc_4CDA8C
|
||
mov byte ptr [esi+33B95h], 0
|
||
|
||
loc_4CDA8C: ; CODE XREF: sub_4CDA70+Aj
|
||
; sub_4CDA70+13j
|
||
mov eax, [esi+33B8Ch]
|
||
test eax, eax
|
||
jz short loc_4CDAA8
|
||
mov ecx, [eax]
|
||
mov edx, [ecx+8]
|
||
push eax
|
||
call edx
|
||
mov dword ptr [esi+33B8Ch], 0
|
||
|
||
loc_4CDAA8: ; CODE XREF: sub_4CDA70+24j
|
||
mov ecx, [esi+4]
|
||
mov edx, [ecx+10h]
|
||
lea eax, [esi+4]
|
||
push eax
|
||
call edx
|
||
pop esi
|
||
retn
|
||
sub_4CDA70 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CDAC0 proc near ; CODE XREF: CEncoder_GetOptimum+2C4p
|
||
; CEncoder_GetOptimum+7ACp ...
|
||
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = byte ptr 8
|
||
arg_8 = byte ptr 0Ch
|
||
|
||
push ecx
|
||
push ebx
|
||
push ebp
|
||
xor ebp, ebp
|
||
cmp byte ptr [esp+0Ch+arg_0], 0
|
||
push esi
|
||
mov eax, ecx
|
||
push edi
|
||
mov [esp+14h+var_4], eax
|
||
lea edi, [ebp+1]
|
||
lea ebx, [ebp+8]
|
||
jz short loc_4CDB3B
|
||
movzx ecx, [esp+14h+arg_8]
|
||
mov [esp+14h+arg_0], ecx
|
||
|
||
loc_4CDAE3: ; CODE XREF: sub_4CDAC0+71j
|
||
movzx esi, [esp+14h+arg_4]
|
||
mov edx, [esp+14h+arg_0]
|
||
sub ebx, 1
|
||
movzx ecx, bl
|
||
shr esi, cl
|
||
shr edx, cl
|
||
and esi, 1
|
||
mov ecx, esi
|
||
shl ecx, 8
|
||
add ecx, edi
|
||
mov eax, [eax+ecx*4+400h]
|
||
and edx, 1
|
||
sub eax, edx
|
||
mov ecx, edx
|
||
neg ecx
|
||
xor eax, ecx
|
||
shr eax, 2
|
||
and eax, 1FFh
|
||
add ebp, dword_550998[eax*4]
|
||
add edi, edi
|
||
or edi, edx
|
||
cmp esi, edx
|
||
jnz short loc_4CDB33
|
||
test ebx, ebx
|
||
jz short loc_4CDB75
|
||
mov eax, [esp+14h+var_4]
|
||
jmp short loc_4CDAE3
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CDB33: ; CODE XREF: sub_4CDAC0+67j
|
||
test ebx, ebx
|
||
jz short loc_4CDB75
|
||
mov eax, [esp+14h+var_4]
|
||
|
||
loc_4CDB3B: ; CODE XREF: sub_4CDAC0+18j
|
||
movzx edx, [esp+14h+arg_8]
|
||
mov [esp+14h+arg_0], edx
|
||
|
||
loc_4CDB44: ; CODE XREF: sub_4CDAC0+B3j
|
||
mov edx, [esp+14h+arg_0]
|
||
sub ebx, 1
|
||
mov cl, bl
|
||
shr edx, cl
|
||
mov ecx, [eax+edi*4]
|
||
add edi, edi
|
||
and edx, 1
|
||
sub ecx, edx
|
||
mov esi, edx
|
||
neg esi
|
||
xor ecx, esi
|
||
shr ecx, 2
|
||
and ecx, 1FFh
|
||
add ebp, dword_550998[ecx*4]
|
||
or edi, edx
|
||
test ebx, ebx
|
||
jnz short loc_4CDB44
|
||
|
||
loc_4CDB75: ; CODE XREF: sub_4CDAC0+6Bj
|
||
; sub_4CDAC0+75j
|
||
pop edi
|
||
pop esi
|
||
mov eax, ebp
|
||
pop ebp
|
||
pop ebx
|
||
pop ecx
|
||
retn 0Ch
|
||
sub_4CDAC0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CDB80 proc near ; CODE XREF: sub_4CDEA0+11Ep
|
||
; sub_4CDEA0+137p
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push esi
|
||
mov esi, [esp+4+arg_0]
|
||
test esi, esi
|
||
mov edx, 400h
|
||
push edi
|
||
mov [ecx], edx
|
||
mov [ecx+4], edx
|
||
jbe short loc_4CDBE6
|
||
lea eax, [ecx+20Ch]
|
||
lea ebx, [ebx+0]
|
||
|
||
loc_4CDBA0: ; CODE XREF: sub_4CDB80+64j
|
||
mov [eax-200h], edx
|
||
mov [eax-1FCh], edx
|
||
mov [eax-1F8h], edx
|
||
mov [eax-1F4h], edx
|
||
mov [eax-1F0h], edx
|
||
mov [eax-1ECh], edx
|
||
mov [eax-1E8h], edx
|
||
mov [eax], edx
|
||
mov [eax+4], edx
|
||
mov [eax+8], edx
|
||
mov [eax+0Ch], edx
|
||
mov [eax+10h], edx
|
||
mov [eax+14h], edx
|
||
mov [eax+18h], edx
|
||
add eax, 20h
|
||
sub esi, 1
|
||
jnz short loc_4CDBA0
|
||
|
||
loc_4CDBE6: ; CODE XREF: sub_4CDB80+12j
|
||
lea edi, [ecx+40Ch]
|
||
mov ecx, 0FFh
|
||
mov eax, edx
|
||
rep stosd
|
||
pop edi
|
||
pop esi
|
||
retn 4
|
||
sub_4CDB80 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CDC00 proc near ; CODE XREF: sub_4CF740+22p
|
||
; sub_4CF780+2Bp
|
||
|
||
var_C = dword ptr -0Ch
|
||
var_8 = dword ptr -8
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
sub esp, 0Ch
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
push edi
|
||
mov edi, ecx
|
||
mov eax, [edi]
|
||
mov ebx, [esp+1Ch+arg_0]
|
||
mov ecx, eax
|
||
shr ecx, 2
|
||
mov edx, dword_550998[ecx*4]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
shr ecx, 2
|
||
mov eax, dword_550998[ecx*4]
|
||
mov ecx, [edi+4]
|
||
mov [esp+1Ch+var_C], edx
|
||
mov edx, ecx
|
||
shr edx, 2
|
||
mov ebp, dword_550998[edx*4]
|
||
mov edx, 800h
|
||
sub edx, ecx
|
||
shr edx, 2
|
||
mov ecx, dword_550998[edx*4]
|
||
add ebp, eax
|
||
add ecx, eax
|
||
mov [esp+1Ch+var_8], ebp
|
||
mov [esp+1Ch+var_4], ecx
|
||
xor esi, esi
|
||
mov edi, edi
|
||
|
||
loc_4CDC60: ; CODE XREF: sub_4CDC00+8Aj
|
||
cmp esi, [esp+1Ch+arg_4]
|
||
jnb loc_4CDD62
|
||
mov eax, ebx
|
||
shl eax, 5
|
||
push esi
|
||
lea ecx, [eax+edi+8]
|
||
call sub_4CD7D0
|
||
add eax, [esp+1Ch+var_C]
|
||
mov ecx, [esp+1Ch+arg_8]
|
||
mov [ecx+esi*4], eax
|
||
add esi, 1
|
||
cmp esi, 8
|
||
jb short loc_4CDC60
|
||
cmp esi, 10h
|
||
jnb short loc_4CDD00
|
||
lea ecx, [esi-8]
|
||
mov [esp+1Ch+arg_0], ecx
|
||
jmp short loc_4CDCA0
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CDCA0: ; CODE XREF: sub_4CDC00+98j
|
||
; sub_4CDC00+FEj
|
||
cmp esi, [esp+1Ch+arg_4]
|
||
jnb loc_4CDD62
|
||
or ecx, 8
|
||
xor edx, edx
|
||
cmp ecx, 1
|
||
jz short loc_4CDCE4
|
||
|
||
loc_4CDCB4: ; CODE XREF: sub_4CDC00+DEj
|
||
mov eax, ecx
|
||
shr ecx, 1
|
||
and eax, 1
|
||
lea ebp, [ecx+ebx*8]
|
||
mov ebp, [edi+ebp*4+208h]
|
||
sub ebp, eax
|
||
neg eax
|
||
xor ebp, eax
|
||
shr ebp, 2
|
||
and ebp, 1FFh
|
||
add edx, dword_550998[ebp*4]
|
||
cmp ecx, 1
|
||
jnz short loc_4CDCB4
|
||
mov ebp, [esp+1Ch+var_8]
|
||
|
||
loc_4CDCE4: ; CODE XREF: sub_4CDC00+B2j
|
||
mov eax, [esp+1Ch+arg_8]
|
||
mov ecx, [esp+1Ch+arg_0]
|
||
add edx, ebp
|
||
mov [eax+esi*4], edx
|
||
add esi, 1
|
||
add ecx, 1
|
||
cmp esi, 10h
|
||
mov [esp+1Ch+arg_0], ecx
|
||
jb short loc_4CDCA0
|
||
|
||
loc_4CDD00: ; CODE XREF: sub_4CDC00+8Fj
|
||
cmp esi, [esp+1Ch+arg_4]
|
||
jnb short loc_4CDD62
|
||
lea ebx, [esi-10h]
|
||
lea esp, [esp+0]
|
||
|
||
loc_4CDD10: ; CODE XREF: sub_4CDC00+160j
|
||
mov ecx, ebx
|
||
or ecx, 100h
|
||
xor edx, edx
|
||
cmp ecx, 1
|
||
jz short loc_4CDD49
|
||
nop
|
||
|
||
loc_4CDD20: ; CODE XREF: sub_4CDC00+147j
|
||
mov eax, ecx
|
||
shr ecx, 1
|
||
mov ebp, [edi+ecx*4+408h]
|
||
and eax, 1
|
||
sub ebp, eax
|
||
neg eax
|
||
xor ebp, eax
|
||
shr ebp, 2
|
||
and ebp, 1FFh
|
||
add edx, dword_550998[ebp*4]
|
||
cmp ecx, 1
|
||
jnz short loc_4CDD20
|
||
|
||
loc_4CDD49: ; CODE XREF: sub_4CDC00+11Dj
|
||
mov ecx, [esp+1Ch+var_4]
|
||
mov eax, [esp+1Ch+arg_8]
|
||
add edx, ecx
|
||
mov [eax+esi*4], edx
|
||
add esi, 1
|
||
add ebx, 1
|
||
cmp esi, [esp+1Ch+arg_4]
|
||
jb short loc_4CDD10
|
||
|
||
loc_4CDD62: ; CODE XREF: sub_4CDC00+64j
|
||
; sub_4CDC00+A4j ...
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
add esp, 0Ch
|
||
retn 0Ch
|
||
sub_4CDC00 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
; int __cdecl sub_4CDD70(SIZE_T dwSize)
|
||
sub_4CDD70 proc near ; DATA XREF: .data:off_546E20o
|
||
|
||
dwSize = dword ptr 4
|
||
|
||
mov eax, [esp+dwSize]
|
||
test eax, eax
|
||
jnz short loc_4CDD79
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CDD79: ; CODE XREF: sub_4CDD70+6j
|
||
push 4 ; flProtect
|
||
push 1000h ; flAllocationType
|
||
push eax ; dwSize
|
||
push 0 ; lpAddress
|
||
call ds:VirtualAlloc
|
||
retn
|
||
sub_4CDD70 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
; int __cdecl sub_4CDD90(void * lpAddress)
|
||
sub_4CDD90 proc near ; CODE XREF: sub_4CF810+53p
|
||
; sub_4CF810+73p
|
||
; DATA XREF: ...
|
||
|
||
lpAddress = dword ptr 4
|
||
|
||
mov eax, [esp+lpAddress]
|
||
test eax, eax
|
||
jz short locret_4CDDA6
|
||
push 8000h ; dwFreeType
|
||
push 0 ; dwSize
|
||
push eax ; lpAddress
|
||
call ds:VirtualFree
|
||
|
||
locret_4CDDA6: ; CODE XREF: sub_4CDD90+6j
|
||
retn
|
||
sub_4CDD90 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CDDB0 proc near ; DATA XREF: .rdata:00517AC8o
|
||
|
||
var_10 = dword ptr -10h
|
||
var_C = byte ptr -0Ch
|
||
var_B = byte ptr -0Bh
|
||
var_A = byte ptr -0Ah
|
||
var_9 = byte ptr -9
|
||
var_8 = byte ptr -8
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
sub esp, 10h
|
||
mov eax, dword_544960
|
||
xor eax, esp
|
||
mov [esp+10h+var_4], eax
|
||
mov ecx, [esp+10h+arg_0]
|
||
mov al, [ecx+33B50h]
|
||
mov dl, 5
|
||
imul dl
|
||
add al, [ecx+33B58h]
|
||
mov dl, 9
|
||
imul dl
|
||
add al, [ecx+33B5Ch]
|
||
push ebp
|
||
mov ebp, [esp+14h+arg_4]
|
||
mov [esp+14h+var_C], al
|
||
mov eax, [ecx+33B60h]
|
||
mov ecx, eax
|
||
mov edx, eax
|
||
push esi
|
||
shr ecx, 8
|
||
shr edx, 10h
|
||
mov [esp+18h+var_B], al
|
||
shr eax, 18h
|
||
push edi
|
||
mov [esp+1Ch+var_A], cl
|
||
mov [esp+1Ch+var_9], dl
|
||
mov [esp+1Ch+var_8], al
|
||
mov esi, 5
|
||
lea edi, [esp+1Ch+var_C]
|
||
|
||
loc_4CDE13: ; CODE XREF: sub_4CDDB0+85j
|
||
mov eax, [ebp+0]
|
||
mov edx, [eax+0Ch]
|
||
lea ecx, [esp+1Ch+var_10]
|
||
push ecx
|
||
push esi
|
||
push edi
|
||
push ebp
|
||
call edx
|
||
mov ecx, [esp+1Ch+var_10]
|
||
add edi, ecx
|
||
sub esi, ecx
|
||
test eax, eax
|
||
jnz short loc_4CDE37
|
||
test ecx, ecx
|
||
jz short loc_4CDE4B
|
||
test esi, esi
|
||
jnz short loc_4CDE13
|
||
|
||
loc_4CDE37: ; CODE XREF: sub_4CDDB0+7Dj
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
mov ecx, [esp+10h+var_4]
|
||
xor ecx, esp
|
||
call sub_4A0686
|
||
add esp, 10h
|
||
retn 8
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CDE4B: ; CODE XREF: sub_4CDDB0+81j
|
||
mov ecx, [esp+1Ch+var_4]
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
xor ecx, esp
|
||
mov eax, 80004005h
|
||
call sub_4A0686
|
||
add esp, 10h
|
||
retn 8
|
||
sub_4CDDB0 endp
|
||
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CDE70 proc near ; DATA XREF: .rdata:00517AF4o
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push esi
|
||
mov esi, [esp+4+arg_0]
|
||
mov eax, [esi+50h]
|
||
test eax, eax
|
||
jz short loc_4CDE8B
|
||
mov ecx, [eax]
|
||
mov edx, [ecx+8]
|
||
push eax
|
||
call edx
|
||
mov dword ptr [esi+50h], 0
|
||
|
||
loc_4CDE8B: ; CODE XREF: sub_4CDE70+Aj
|
||
xor eax, eax
|
||
pop esi
|
||
retn 4
|
||
sub_4CDE70 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CDEA0 proc near ; CODE XREF: CEncoder_SetStreams+3Cp
|
||
|
||
var_4 = dword ptr -4
|
||
|
||
push ecx
|
||
push ebx
|
||
xor ebx, ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, ecx
|
||
mov byte ptr [esi+10h], 0
|
||
mov byte ptr [esi+11h], 0
|
||
mov [esi+14h], ebx
|
||
mov [esi+18h], ebx
|
||
mov [esi+1Ch], ebx
|
||
mov [esi+20h], ebx
|
||
mov eax, [esi+50h]
|
||
mov [esi+4Ch], ebx
|
||
mov [esi+48h], eax
|
||
mov [esi+44h], ebx
|
||
mov [esi+58h], ebx
|
||
mov [esi+5Ch], ebx
|
||
mov [esi+64h], bl
|
||
push edi
|
||
mov [esi+30h], ebx
|
||
mov [esi+34h], ebx
|
||
mov dword ptr [esi+38h], 0FFFFFFFFh
|
||
mov dword ptr [esi+28h], 1
|
||
mov [esi+2Ch], bl
|
||
lea ecx, [esi+28420h]
|
||
lea edi, [esi+284B0h]
|
||
mov [esp+14h+var_4], 0Ch
|
||
mov ebp, 400h
|
||
|
||
loc_4CDF02: ; CODE XREF: sub_4CDEA0+9Cj
|
||
xor edx, edx
|
||
mov eax, edi
|
||
jmp short loc_4CDF10
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CDF10: ; CODE XREF: sub_4CDEA0+66j
|
||
; sub_4CDEA0+84j
|
||
mov [eax-3C0h], ebp
|
||
mov [eax], ebp
|
||
add edx, 1
|
||
add eax, 4
|
||
cmp edx, [esi+33B60h]
|
||
jbe short loc_4CDF10
|
||
mov [ecx-30h], ebp
|
||
mov [ecx], ebp
|
||
mov [ecx+30h], ebp
|
||
mov [ecx+60h], ebp
|
||
add ecx, 4
|
||
add edi, 40h
|
||
sub [esp+14h+var_4], 1
|
||
jnz short loc_4CDF02
|
||
mov ecx, [esi+32658h]
|
||
add ecx, [esi+32654h]
|
||
mov eax, 1
|
||
shl eax, cl
|
||
cmp eax, ebx
|
||
jbe short loc_4CDF7C
|
||
xor edx, edx
|
||
mov ebx, eax
|
||
lea esp, [esp+0]
|
||
|
||
loc_4CDF60: ; CODE XREF: sub_4CDEA0+DAj
|
||
mov edi, [esi+32650h]
|
||
add edi, edx
|
||
mov ecx, 300h
|
||
mov eax, ebp
|
||
add edx, 0C00h
|
||
sub ebx, 1
|
||
rep stosd
|
||
jnz short loc_4CDF60
|
||
|
||
loc_4CDF7C: ; CODE XREF: sub_4CDEA0+B3j
|
||
lea edx, [esi+287B4h]
|
||
mov ebx, 4
|
||
|
||
loc_4CDF87: ; CODE XREF: sub_4CDEA0+FBj
|
||
mov edi, edx
|
||
mov ecx, 3Fh
|
||
mov eax, ebp
|
||
add edx, 100h
|
||
sub ebx, 1
|
||
rep stosd
|
||
jnz short loc_4CDF87
|
||
lea edi, [esi+28BB0h]
|
||
mov ecx, 72h
|
||
rep stosd
|
||
mov ecx, [esi+33B5Ch]
|
||
mov edx, 1
|
||
shl edx, cl
|
||
lea ecx, [esi+28DB8h]
|
||
push edx
|
||
call sub_4CDB80
|
||
mov ecx, [esi+33B5Ch]
|
||
mov eax, 1
|
||
shl eax, cl
|
||
lea ecx, [esi+2DA04h]
|
||
push eax
|
||
call sub_4CDB80
|
||
mov eax, ebp
|
||
mov [esi+28D7Ch], eax
|
||
mov [esi+28D80h], eax
|
||
mov [esi+28D84h], eax
|
||
mov [esi+28D88h], eax
|
||
mov [esi+28D8Ch], eax
|
||
mov [esi+28D90h], eax
|
||
mov [esi+28D94h], eax
|
||
mov [esi+28D98h], eax
|
||
mov [esi+28D9Ch], eax
|
||
mov [esi+28DA0h], eax
|
||
mov [esi+28DA4h], eax
|
||
mov [esi+28DA8h], eax
|
||
mov [esi+28DACh], eax
|
||
mov [esi+28DB0h], eax
|
||
mov [esi+28DB4h], eax
|
||
xor eax, eax
|
||
pop edi
|
||
mov [esi+32F10h], bl
|
||
mov [esi+32F08h], eax
|
||
mov [esi+32F0Ch], eax
|
||
mov [esi+32F04h], eax
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
pop ecx
|
||
retn
|
||
sub_4CDEA0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CF450 proc near ; CODE XREF: .text:004CF692p
|
||
; CEncoder_Flush+42p
|
||
|
||
var_8 = dword ptr -8
|
||
var_4 = dword ptr -4
|
||
|
||
sub esp, 8
|
||
push esi
|
||
mov esi, ecx
|
||
mov eax, [esi+0Ch]
|
||
push edi
|
||
mov edi, [esi+4]
|
||
cmp eax, edi
|
||
jb short loc_4CF464
|
||
mov edi, [esi+10h]
|
||
|
||
loc_4CF464: ; CODE XREF: sub_4CF450+Fj
|
||
push ebp
|
||
mov ebp, [esi+20h]
|
||
xor edx, edx
|
||
sub edi, eax
|
||
cmp ebp, edx
|
||
mov [esp+14h+var_4], edx
|
||
jz short loc_4CF4BA
|
||
push ebx
|
||
mov ebx, [esi]
|
||
add ebx, eax
|
||
mov eax, dword_553598
|
||
cmp eax, edx
|
||
jnz short loc_4CF4A5
|
||
push 0Ch ; Size
|
||
call _operator_new ; operator new(uint)
|
||
xor ecx, ecx
|
||
add esp, 4
|
||
cmp eax, ecx
|
||
jz short loc_4CF49C
|
||
mov [eax], ecx
|
||
mov [eax+4], ecx
|
||
mov [eax+8], ecx
|
||
jmp short loc_4CF49E
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF49C: ; CODE XREF: sub_4CF450+40j
|
||
xor eax, eax
|
||
|
||
loc_4CF49E: ; CODE XREF: sub_4CF450+4Aj
|
||
mov dword_553598, eax
|
||
xor edx, edx
|
||
|
||
loc_4CF4A5: ; CODE XREF: sub_4CF450+30j
|
||
mov eax, [eax+8]
|
||
cmp eax, edx
|
||
jz short loc_4CF4B6
|
||
push edi
|
||
push ebx
|
||
push ebp
|
||
call eax
|
||
add esp, 0Ch
|
||
xor edx, edx
|
||
|
||
loc_4CF4B6: ; CODE XREF: sub_4CF450+5Aj
|
||
add [esi+20h], edi
|
||
pop ebx
|
||
|
||
loc_4CF4BA: ; CODE XREF: sub_4CF450+22j
|
||
mov eax, [esi+14h]
|
||
cmp eax, edx
|
||
pop ebp
|
||
jz short loc_4CF4E4
|
||
mov [esp+10h+var_8], edx
|
||
mov ecx, [eax]
|
||
lea edx, [esp+10h+var_8]
|
||
push edx
|
||
mov edx, [esi]
|
||
add edx, [esi+0Ch]
|
||
push edi
|
||
push edx
|
||
push eax
|
||
mov eax, [ecx+0Ch]
|
||
call eax
|
||
mov edi, [esp+10h+var_8]
|
||
mov [esp+10h+var_4], eax
|
||
xor edx, edx
|
||
|
||
loc_4CF4E4: ; CODE XREF: sub_4CF450+70j
|
||
add [esi+0Ch], edi
|
||
mov ecx, [esi+0Ch]
|
||
mov eax, [esi+10h]
|
||
cmp ecx, eax
|
||
jnz short loc_4CF4F4
|
||
mov [esi+0Ch], edx
|
||
|
||
loc_4CF4F4: ; CODE XREF: sub_4CF450+9Fj
|
||
cmp [esi+4], eax
|
||
jnz short loc_4CF500
|
||
mov byte ptr [esi+24h], 1
|
||
mov [esi+4], edx
|
||
|
||
loc_4CF500: ; CODE XREF: sub_4CF450+A7j
|
||
mov ecx, [esi+0Ch]
|
||
cmp ecx, [esi+4]
|
||
jbe short loc_4CF50A
|
||
mov eax, ecx
|
||
|
||
loc_4CF50A: ; CODE XREF: sub_4CF450+B6j
|
||
add [esi+18h], edi
|
||
mov [esi+8], eax
|
||
mov eax, [esp+10h+var_4]
|
||
adc [esi+1Ch], edx
|
||
pop edi
|
||
pop esi
|
||
add esp, 8
|
||
retn
|
||
sub_4CF450 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
; int __stdcall Interface1_QueryInterface(int, void *Buf1, int)
|
||
Interface1_QueryInterface proc near ; DATA XREF: .rdata:off_517A90o
|
||
; sub_4CF520
|
||
|
||
arg_0 = dword ptr 4
|
||
Buf1 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
mov eax, [esp+Buf1]
|
||
push offset dword_512730 ; Buf2
|
||
push eax ; Buf1
|
||
call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit
|
||
add esp, 8
|
||
test eax, eax
|
||
jz short loc_4CF54D
|
||
mov eax, [esp+arg_0]
|
||
mov ecx, [esp+arg_8]
|
||
mov [ecx], eax
|
||
mov edx, [eax]
|
||
push eax
|
||
mov eax, [edx+4]
|
||
call eax
|
||
xor eax, eax
|
||
retn 0Ch
|
||
loc_4CF54D: ; CODE XREF: Interface1_QueryInterface+14j
|
||
mov eax, 80004002h
|
||
retn 0Ch
|
||
Interface1_QueryInterface endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
; int __stdcall Interface1_Release(void *pUnknown)
|
||
Interface1_Release proc near ; DATA XREF: .rdata:00517A98o
|
||
|
||
pUnknown = dword ptr 4
|
||
|
||
mov ecx, [esp+pUnknown]
|
||
add dword ptr [ecx+4], 0FFFFFFFFh
|
||
mov eax, [ecx+4]
|
||
jnz short locret_4CF585
|
||
push ecx ; Memory
|
||
mov dword ptr [ecx], offset off_517A90
|
||
mov dword ptr [ecx+8], 0
|
||
call j__free
|
||
add esp, 4
|
||
xor eax, eax
|
||
|
||
locret_4CF585: ; CODE XREF: Interface1_Release+Bj
|
||
retn 4
|
||
Interface1_Release endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
sub_4CF590 proc near ; DATA XREF: .rdata:00517AB4o
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = byte ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
arg_C = dword ptr 10h
|
||
|
||
mov eax, [esp+arg_0]
|
||
mov edx, [eax+10h]
|
||
sub edx, [eax+18h]
|
||
mov ecx, [eax+14h]
|
||
sbb ecx, [eax+1Ch]
|
||
push ebx
|
||
mov ebx, [esp+4+arg_8]
|
||
push edi
|
||
mov edi, [esp+8+arg_C]
|
||
cmp edi, ecx
|
||
jb short loc_4CF5C2
|
||
ja short loc_4CF5B4
|
||
cmp ebx, edx
|
||
jbe short loc_4CF5C2
|
||
|
||
loc_4CF5B4: ; CODE XREF: sub_4CF590+1Ej
|
||
pop edi
|
||
mov byte ptr [eax+20h], 1
|
||
mov eax, 80004005h
|
||
pop ebx
|
||
retn 10h
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF5C2: ; CODE XREF: sub_4CF590+1Cj
|
||
; sub_4CF590+22j
|
||
push esi
|
||
xor esi, esi
|
||
xor ecx, ecx
|
||
test edi, edi
|
||
jb short loc_4CF5FA
|
||
ja short loc_4CF5D1
|
||
test ebx, ebx
|
||
jbe short loc_4CF5FA
|
||
|
||
loc_4CF5D1: ; CODE XREF: sub_4CF590+3Bj
|
||
mov dl, [esp+0Ch+arg_4]
|
||
push ebp
|
||
|
||
loc_4CF5D6: ; CODE XREF: sub_4CF590+5Fj
|
||
; sub_4CF590+67j
|
||
mov ebp, [eax+18h]
|
||
mov ebx, [eax+8]
|
||
mov [ebx+ebp], dl
|
||
add dword ptr [eax+18h], 1
|
||
adc dword ptr [eax+1Ch], 0
|
||
add esi, 1
|
||
adc ecx, 0
|
||
cmp ecx, edi
|
||
jb short loc_4CF5D6
|
||
ja short loc_4CF5F9
|
||
cmp esi, [esp+10h+arg_8]
|
||
jb short loc_4CF5D6
|
||
|
||
loc_4CF5F9: ; CODE XREF: sub_4CF590+61j
|
||
pop ebp
|
||
|
||
loc_4CF5FA: ; CODE XREF: sub_4CF590+39j
|
||
; sub_4CF590+3Fj
|
||
pop esi
|
||
pop edi
|
||
xor eax, eax
|
||
pop ebx
|
||
retn 10h
|
||
sub_4CF590 endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
; int __stdcall Interface2_Release(void *pUnknown)
|
||
Interface2_Release proc near ; DATA XREF: .rdata:00517AACo
|
||
; sub_4CF610
|
||
|
||
pUnknown = dword ptr 4
|
||
|
||
mov ecx, [esp+pUnknown]
|
||
add dword ptr [ecx+4], 0FFFFFFFFh
|
||
mov eax, [ecx+4]
|
||
jnz short locret_4CF635
|
||
push ecx ; Memory
|
||
mov dword ptr [ecx], offset off_517AA4
|
||
mov dword ptr [ecx+8], 0
|
||
call j__free
|
||
add esp, 4
|
||
xor eax, eax
|
||
|
||
locret_4CF635: ; CODE XREF: Interface2_Release+Bj
|
||
retn 4
|
||
Interface2_Release endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
loc_4CF640: ; CODE XREF: sub_4CF6E0+39p
|
||
; sub_4CFAC0+57p ...
|
||
push ecx
|
||
push ebx
|
||
push esi
|
||
push edi
|
||
mov edi, ecx
|
||
mov esi, [edi+8]
|
||
cmp esi, 0FF000000h
|
||
jb short loc_4CF661
|
||
mov edx, [edi+0Ch]
|
||
mov eax, esi
|
||
mov cl, 20h
|
||
call __allshr ; Microsoft VisualC 2-8/net runtime
|
||
test eax, eax
|
||
jz short loc_4CF6B6
|
||
|
||
loc_4CF661: ; CODE XREF: .text:004CF64Fj
|
||
mov bl, [edi+4]
|
||
lea esi, [edi+18h]
|
||
|
||
loc_4CF667: ; CODE XREF: .text:004CF6A9j
|
||
mov eax, [edi+8]
|
||
mov edx, [edi+0Ch]
|
||
mov cl, 20h
|
||
call __allshr ; Microsoft VisualC 2-8/net runtime
|
||
mov ecx, [esi+4]
|
||
mov edx, [esi]
|
||
add al, bl
|
||
mov [ecx+edx], al
|
||
add dword ptr [esi+4], 1
|
||
mov eax, [esi+4]
|
||
cmp eax, [esi+8]
|
||
jnz short loc_4CF6A3
|
||
cmp [esi+0Ch], eax
|
||
jz short loc_4CF6A3
|
||
nop
|
||
|
||
loc_4CF690: ; CODE XREF: .text:004CF6A1j
|
||
mov ecx, esi
|
||
call sub_4CF450
|
||
test eax, eax
|
||
jnz short loc_4CF6CB
|
||
mov eax, [esi+0Ch]
|
||
cmp eax, [esi+4]
|
||
jnz short loc_4CF690
|
||
|
||
loc_4CF6A3: ; CODE XREF: .text:004CF688j
|
||
; .text:004CF68Dj
|
||
or bl, 0FFh
|
||
add dword ptr [edi], 0FFFFFFFFh
|
||
jnz short loc_4CF667
|
||
mov esi, [edi+8]
|
||
mov edx, esi
|
||
shr edx, 18h
|
||
mov [edi+4], dl
|
||
|
||
loc_4CF6B6: ; CODE XREF: .text:004CF65Fj
|
||
add dword ptr [edi], 1
|
||
shl esi, 8
|
||
mov [edi+8], esi
|
||
mov dword ptr [edi+0Ch], 0
|
||
pop edi
|
||
pop esi
|
||
pop ebx
|
||
pop ecx
|
||
retn
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF6CB: ; CODE XREF: .text:004CF699j
|
||
push offset dword_526DD0
|
||
lea ecx, [esp+10h]
|
||
push ecx
|
||
mov [esp+14h], eax
|
||
int 3
|
||
; call __CxxThrowException@8 ; _CxxThrowException(x,x)
|
||
; ---------------------------------------------------------------------------
|
||
|
||
db 2 dup(0CCh)
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CF6E0 proc near ; CODE XREF: sub_4D0770+FBp
|
||
; CEncoder_CodeOneBlock+6C5p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push esi
|
||
push edi
|
||
mov edi, [esp+8+arg_4]
|
||
add edi, 0FFFFFFFFh
|
||
mov esi, ecx
|
||
js short loc_4CF724
|
||
push ebp
|
||
mov ebp, [esp+0Ch+arg_0]
|
||
|
||
loc_4CF6F2: ; CODE XREF: sub_4CF6E0+41j
|
||
shr dword ptr [esi+10h], 1
|
||
mov eax, [esi+10h]
|
||
mov edx, ebp
|
||
mov ecx, edi
|
||
shr edx, cl
|
||
test dl, 1
|
||
jz short loc_4CF70A
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
|
||
loc_4CF70A: ; CODE XREF: sub_4CF6E0+21j
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CF71E
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4CF71E: ; CODE XREF: sub_4CF6E0+2Fj
|
||
sub edi, 1
|
||
jns short loc_4CF6F2
|
||
pop ebp
|
||
|
||
loc_4CF724: ; CODE XREF: sub_4CF6E0+Bj
|
||
pop edi
|
||
pop esi
|
||
retn 8
|
||
sub_4CF6E0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CF740 proc near ; CODE XREF: sub_4D0770+DFp
|
||
; CEncoder_CodeOneBlock+58Ap ...
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push esi
|
||
push edi
|
||
mov edi, [esp+8+arg_0]
|
||
mov eax, edi
|
||
imul eax, 440h
|
||
mov esi, ecx
|
||
mov edx, [esi+4C08h]
|
||
lea ecx, [eax+esi+808h]
|
||
push ecx
|
||
push edx
|
||
push edi
|
||
mov ecx, esi
|
||
call sub_4CDC00
|
||
mov eax, [esi+4C08h]
|
||
mov [esi+edi*4+4C0Ch], eax
|
||
pop edi
|
||
pop esi
|
||
retn 4
|
||
sub_4CF740 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CF780 proc near ; CODE XREF: CEncoder_SetStreams+7Ep
|
||
; CEncoder_SetStreams+A6p
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push esi
|
||
push edi
|
||
xor edi, edi
|
||
cmp [esp+8+arg_0], edi
|
||
mov esi, ecx
|
||
jbe short loc_4CF7CC
|
||
push ebx
|
||
push ebp
|
||
lea ebx, [esi+4C0Ch]
|
||
lea ebp, [esi+808h]
|
||
lea ebx, [ebx+0]
|
||
|
||
loc_4CF7A0: ; CODE XREF: sub_4CF780+48j
|
||
mov eax, [esi+4C08h]
|
||
push ebp
|
||
push eax
|
||
push edi
|
||
mov ecx, esi
|
||
call sub_4CDC00
|
||
mov ecx, [esi+4C08h]
|
||
mov [ebx], ecx
|
||
add edi, 1
|
||
add ebx, 4
|
||
add ebp, 440h
|
||
cmp edi, [esp+10h+arg_0]
|
||
jb short loc_4CF7A0
|
||
pop ebp
|
||
pop ebx
|
||
|
||
loc_4CF7CC: ; CODE XREF: sub_4CF780+Aj
|
||
pop edi
|
||
pop esi
|
||
retn 4
|
||
sub_4CF780 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
CEncoder_GetOptimum proc near ; CODE XREF: CEncoder_CodeOneBlock+201p
|
||
|
||
var_7D = byte ptr -7Dh
|
||
var_7C = dword ptr -7Ch
|
||
var_78 = dword ptr -78h
|
||
var_74 = dword ptr -74h
|
||
var_70 = dword ptr -70h
|
||
var_6C = dword ptr -6Ch
|
||
var_68 = dword ptr -68h
|
||
var_64 = dword ptr -64h
|
||
var_60 = dword ptr -60h
|
||
var_5C = dword ptr -5Ch
|
||
var_58 = dword ptr -58h
|
||
var_54 = dword ptr -54h
|
||
var_50 = dword ptr -50h
|
||
var_4C = dword ptr -4Ch
|
||
var_48 = dword ptr -48h
|
||
var_44 = dword ptr -44h
|
||
var_40 = dword ptr -40h
|
||
var_3C = dword ptr -3Ch
|
||
var_38 = dword ptr -38h
|
||
var_34 = dword ptr -34h
|
||
var_30 = dword ptr -30h
|
||
var_2C = dword ptr -2Ch
|
||
var_28 = dword ptr -28h
|
||
var_24 = dword ptr -24h
|
||
var_20 = dword ptr -20h
|
||
var_1C = dword ptr -1Ch
|
||
var_18 = dword ptr -18h
|
||
var_14 = dword ptr -14h
|
||
var_10 = dword ptr -10h
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
sub esp, 80h
|
||
push ebp
|
||
mov ebp, ecx
|
||
mov edx, [ebp+32F0Ch]
|
||
cmp [ebp+32F08h], edx
|
||
push esi
|
||
jz short loc_4CE0A5
|
||
mov esi, [esp+88h+arg_4]
|
||
lea eax, [edx+edx*4+1Eh]
|
||
lea ecx, [ebp+eax*8+0]
|
||
mov eax, [ecx+10h]
|
||
sub eax, edx
|
||
mov edx, [ecx+14h]
|
||
mov [esi], edx
|
||
mov ecx, [ecx+10h]
|
||
pop esi
|
||
mov [ebp+32F0Ch], ecx
|
||
pop ebp
|
||
add esp, 80h
|
||
retn 8
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE0A5: ; CODE XREF: CEncoder_GetOptimum+16j
|
||
mov edx, [ebp+80h]
|
||
mov eax, [ebp+70h]
|
||
push ebx
|
||
xor esi, esi
|
||
push edx
|
||
mov [ebp+32F08h], esi
|
||
mov [ebp+32F0Ch], esi
|
||
call eax
|
||
add esp, 4
|
||
cmp byte ptr [ebp+32F10h], 0
|
||
mov ebx, eax
|
||
mov [esp+8Ch+var_60], eax
|
||
jnz short loc_4CE0E4
|
||
lea ecx, [esp+8Ch+var_70]
|
||
push ecx
|
||
mov ecx, ebp
|
||
call sub_4CB3B0
|
||
mov [esp+8Ch+var_68], eax
|
||
jmp short loc_4CE0FF
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE0E4: ; CODE XREF: CEncoder_GetOptimum+70j
|
||
mov edx, [ebp+32EFCh]
|
||
mov eax, [ebp+32F00h]
|
||
mov [esp+8Ch+var_68], edx
|
||
mov [esp+8Ch+var_70], eax
|
||
mov byte ptr [ebp+32F10h], 0
|
||
|
||
loc_4CE0FF: ; CODE XREF: CEncoder_GetOptimum+82j
|
||
mov ecx, [ebp+80h]
|
||
mov edx, [ebp+74h]
|
||
push edi
|
||
push ecx
|
||
call edx
|
||
mov edi, eax
|
||
add esp, 4
|
||
sub edi, 1
|
||
cmp ebx, 2
|
||
jnb short loc_4CE138
|
||
mov eax, [esp+90h+arg_4]
|
||
pop edi
|
||
pop ebx
|
||
pop esi
|
||
mov dword ptr [eax], 0FFFFFFFFh
|
||
mov eax, 1
|
||
pop ebp
|
||
add esp, 80h
|
||
retn 8
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE138: ; CODE XREF: CEncoder_GetOptimum+B7j
|
||
cmp ebx, 111h
|
||
jbe short loc_4CE149
|
||
mov ebx, 111h
|
||
mov [esp+90h+var_60], ebx
|
||
|
||
loc_4CE149: ; CODE XREF: CEncoder_GetOptimum+DEj
|
||
lea ecx, [ebp+14h]
|
||
mov [esp+90h+var_50], esi
|
||
mov [esp+90h+var_64], esi
|
||
xor edx, edx
|
||
mov [esp+90h+var_4C], esi
|
||
mov [esp+90h+var_6C], ecx
|
||
mov edi, edi
|
||
|
||
loc_4CE160: ; CODE XREF: CEncoder_GetOptimum+180j
|
||
mov eax, [esp+90h+var_6C]
|
||
mov eax, [eax]
|
||
mov ecx, edi
|
||
sub ecx, eax
|
||
mov [esp+edx+90h+var_20], eax
|
||
mov al, [edi]
|
||
sub ecx, 1
|
||
cmp al, [ecx]
|
||
jnz short loc_4CE1C9
|
||
mov al, [edi+1]
|
||
cmp al, [ecx+1]
|
||
jnz short loc_4CE1C9
|
||
mov eax, 2
|
||
cmp ebx, eax
|
||
jbe short loc_4CE1A7
|
||
lea esi, [edi+2]
|
||
sub ecx, edi
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CE190: ; CODE XREF: CEncoder_GetOptimum+143j
|
||
mov bl, [esi]
|
||
cmp bl, [ecx+esi]
|
||
mov ebx, [esp+90h+var_60]
|
||
jnz short loc_4CE1A5
|
||
add eax, 1
|
||
add esi, 1
|
||
cmp eax, ebx
|
||
jb short loc_4CE190
|
||
|
||
loc_4CE1A5: ; CODE XREF: CEncoder_GetOptimum+139j
|
||
xor esi, esi
|
||
|
||
loc_4CE1A7: ; CODE XREF: CEncoder_GetOptimum+126j
|
||
mov ecx, [esp+90h+var_4C]
|
||
mov [esp+edx+90h+var_10], eax
|
||
cmp eax, [esp+ecx+90h+var_10]
|
||
jbe short loc_4CE1D0
|
||
mov eax, [esp+90h+var_64]
|
||
mov [esp+90h+var_50], eax
|
||
mov [esp+90h+var_4C], edx
|
||
jmp short loc_4CE1D0
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE1C9: ; CODE XREF: CEncoder_GetOptimum+115j
|
||
; CEncoder_GetOptimum+11Dj
|
||
mov [esp+edx+90h+var_10], esi
|
||
|
||
loc_4CE1D0: ; CODE XREF: CEncoder_GetOptimum+159j
|
||
; CEncoder_GetOptimum+167j
|
||
add [esp+90h+var_64], 1
|
||
add [esp+90h+var_6C], 4
|
||
add edx, 4
|
||
cmp edx, 10h
|
||
jb loc_4CE160
|
||
mov ecx, [esp+90h+var_50]
|
||
mov ebx, [esp+ecx*4+90h+var_10]
|
||
mov eax, [ebp+32EF8h]
|
||
cmp ebx, eax
|
||
mov [esp+90h+var_40], ebx
|
||
jb short loc_4CE234
|
||
mov edx, [esp+90h+arg_4]
|
||
lea eax, [ebx-1]
|
||
cmp eax, esi
|
||
mov [edx], ecx
|
||
jz short loc_4CE225
|
||
add [ebp+32F04h], eax
|
||
mov ecx, [ebp+7Ch]
|
||
push eax
|
||
mov eax, [ebp+80h]
|
||
push eax
|
||
call ecx
|
||
add esp, 8
|
||
|
||
loc_4CE225: ; CODE XREF: CEncoder_GetOptimum+1ADj
|
||
pop edi
|
||
mov eax, ebx
|
||
pop ebx
|
||
pop esi
|
||
pop ebp
|
||
add esp, 80h
|
||
retn 8
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE234: ; CODE XREF: CEncoder_GetOptimum+19Dj
|
||
mov esi, [esp+90h+var_68]
|
||
cmp esi, eax
|
||
jb short loc_4CE27F
|
||
mov edx, [esp+90h+var_70]
|
||
mov eax, [ebp+edx*4+3265Ch]
|
||
mov ecx, [esp+90h+arg_4]
|
||
add eax, 4
|
||
mov [ecx], eax
|
||
lea eax, [esi-1]
|
||
test eax, eax
|
||
jz short loc_4CE270
|
||
mov edx, [ebp+80h]
|
||
add [ebp+32F04h], eax
|
||
push eax
|
||
mov eax, [ebp+7Ch]
|
||
push edx
|
||
call eax
|
||
add esp, 8
|
||
|
||
loc_4CE270: ; CODE XREF: CEncoder_GetOptimum+1F8j
|
||
pop edi
|
||
pop ebx
|
||
mov eax, esi
|
||
pop esi
|
||
pop ebp
|
||
add esp, 80h
|
||
retn 8
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE27F: ; CODE XREF: CEncoder_GetOptimum+1DAj
|
||
mov al, [edi]
|
||
mov esi, [esp+90h+var_20]
|
||
sub edi, esi
|
||
cmp [esp+90h+var_68], 2
|
||
mov cl, [edi-1]
|
||
mov byte ptr [esp+90h+var_4C], al
|
||
mov byte ptr [esp+90h+var_50], cl
|
||
jnb short loc_4CE2C1
|
||
cmp al, cl
|
||
jz short loc_4CE2C1
|
||
cmp ebx, 2
|
||
jnb short loc_4CE2C1
|
||
mov ecx, [esp+90h+arg_4]
|
||
pop edi
|
||
pop ebx
|
||
pop esi
|
||
mov dword ptr [ecx], 0FFFFFFFFh
|
||
mov eax, 1
|
||
pop ebp
|
||
add esp, 80h
|
||
retn 8
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE2C1: ; CODE XREF: CEncoder_GetOptimum+237j
|
||
; CEncoder_GetOptimum+23Bj ...
|
||
mov edx, [esp+90h+var_4C]
|
||
mov bl, [ebp+10h]
|
||
mov edi, [ebp+33B60h]
|
||
and edi, [esp+90h+arg_0]
|
||
mov ecx, [esp+90h+var_50]
|
||
push edx
|
||
cmp bl, 7
|
||
setnb dl
|
||
push ecx
|
||
mov [ebp+0F0h], bl
|
||
mov eax, [ebp+32654h]
|
||
mov ecx, 8
|
||
sub cl, al
|
||
push edx
|
||
movzx edx, byte ptr [ebp+11h]
|
||
shr edx, cl
|
||
mov ecx, [ebp+3265Ch]
|
||
and ecx, [esp+9Ch+arg_0]
|
||
mov [esp+9Ch+var_3C], ecx
|
||
mov ecx, eax
|
||
mov eax, [esp+9Ch+var_3C]
|
||
shl eax, cl
|
||
add edx, eax
|
||
imul edx, 0C00h
|
||
add edx, [ebp+32650h]
|
||
mov ecx, edx
|
||
call sub_4CDAC0
|
||
movzx ecx, bl
|
||
shl ecx, 4
|
||
add ecx, edi
|
||
mov edx, [ebp+ecx*4+280F0h]
|
||
shr edx, 2
|
||
add eax, dword_550998[edx*4]
|
||
mov ebx, 800h
|
||
mov [ebp+124h], eax
|
||
mov dword ptr [ebp+12Ch], 0FFFFFFFFh
|
||
mov byte ptr [ebp+119h], 0
|
||
mov cl, [ebp+10h]
|
||
movzx eax, cl
|
||
mov edx, eax
|
||
shl edx, 4
|
||
add edx, edi
|
||
sub ebx, [ebp+edx*4+280F0h]
|
||
mov edx, 800h
|
||
sub edx, [ebp+eax*4+283F0h]
|
||
mov al, byte ptr [esp+90h+var_4C]
|
||
shr edx, 2
|
||
mov edx, dword_550998[edx*4]
|
||
shr ebx, 2
|
||
mov ebx, dword_550998[ebx*4]
|
||
add edx, ebx
|
||
cmp byte ptr [esp+90h+var_50], al
|
||
mov [esp+90h+var_44], ebx
|
||
mov [esp+90h+var_3C], edx
|
||
jnz short loc_4CE3F3
|
||
movzx eax, cl
|
||
mov ebx, [ebp+eax*4+28420h]
|
||
mov ecx, eax
|
||
shl ecx, 4
|
||
add ecx, edi
|
||
mov ecx, [ebp+ecx*4+284B0h]
|
||
shr ecx, 2
|
||
mov eax, dword_550998[ecx*4]
|
||
shr ebx, 2
|
||
add eax, dword_550998[ebx*4]
|
||
add eax, edx
|
||
cmp eax, [ebp+124h]
|
||
jnb short loc_4CE3F3
|
||
mov [ebp+124h], eax
|
||
mov dword ptr [ebp+12Ch], 0
|
||
mov byte ptr [ebp+119h], 0
|
||
|
||
loc_4CE3F3: ; CODE XREF: CEncoder_GetOptimum+344j
|
||
; CEncoder_GetOptimum+37Aj
|
||
mov eax, [esp+90h+var_68]
|
||
mov ecx, [esp+90h+var_40]
|
||
cmp eax, ecx
|
||
jb short loc_4CE405
|
||
mov [esp+90h+var_7C], eax
|
||
jmp short loc_4CE40B
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE405: ; CODE XREF: CEncoder_GetOptimum+39Dj
|
||
mov [esp+90h+var_7C], ecx
|
||
mov eax, ecx
|
||
|
||
loc_4CE40B: ; CODE XREF: CEncoder_GetOptimum+3A3j
|
||
cmp eax, 2
|
||
jnb short loc_4CE431
|
||
mov edx, [ebp+12Ch]
|
||
mov eax, [esp+90h+arg_4]
|
||
pop edi
|
||
pop ebx
|
||
pop esi
|
||
mov [eax], edx
|
||
mov eax, 1
|
||
pop ebp
|
||
add esp, 80h
|
||
retn 8
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE431: ; CODE XREF: CEncoder_GetOptimum+3AEj
|
||
mov ecx, [esp+90h+var_1C]
|
||
mov edx, [esp+90h+var_18]
|
||
xor ebx, ebx
|
||
mov [ebp+128h], ebx
|
||
mov [ebp+10Ch], ecx
|
||
mov ecx, [esp+90h+var_14]
|
||
mov [ebp+110h], edx
|
||
lea edx, [eax+eax*4]
|
||
mov [ebp+114h], ecx
|
||
mov [ebp+108h], esi
|
||
lea ecx, [ebp+edx*8+0FCh]
|
||
jmp short loc_4CE470
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CE470: ; CODE XREF: CEncoder_GetOptimum+407j
|
||
; CEncoder_GetOptimum+41Fj
|
||
mov dword ptr [ecx], 0FFFFFFFh
|
||
sub eax, 1
|
||
sub ecx, 28h
|
||
cmp eax, 2
|
||
jnb short loc_4CE470
|
||
|
||
loc_4CE481: ; CODE XREF: CEncoder_GetOptimum+48Ej
|
||
mov esi, [esp+ebx*4+90h+var_10]
|
||
cmp esi, 2
|
||
jb short loc_4CE4E8
|
||
movzx eax, byte ptr [ebp+10h]
|
||
push edi
|
||
push eax
|
||
push ebx
|
||
mov ecx, ebp
|
||
call sub_4CD9B0
|
||
add eax, [esp+90h+var_3C]
|
||
mov ecx, edi
|
||
imul ecx, 110h
|
||
add ecx, esi
|
||
mov [esp+90h+var_40], eax
|
||
lea edx, [esi+esi*4]
|
||
lea eax, [ebp+ecx*4+2E204h]
|
||
lea ecx, [ebp+edx*8+0FCh]
|
||
mov edi, edi
|
||
|
||
loc_4CE4C0: ; CODE XREF: CEncoder_GetOptimum+486j
|
||
mov edx, [eax]
|
||
add edx, [esp+90h+var_40]
|
||
cmp edx, [ecx]
|
||
jnb short loc_4CE4DA
|
||
mov [ecx], edx
|
||
mov dword ptr [ecx+4], 0
|
||
mov [ecx+8], ebx
|
||
mov byte ptr [ecx-0Bh], 0
|
||
|
||
loc_4CE4DA: ; CODE XREF: CEncoder_GetOptimum+468j
|
||
sub esi, 1
|
||
sub eax, 4
|
||
sub ecx, 28h
|
||
cmp esi, 2
|
||
jnb short loc_4CE4C0
|
||
|
||
loc_4CE4E8: ; CODE XREF: CEncoder_GetOptimum+42Bj
|
||
add ebx, 1
|
||
cmp ebx, 4
|
||
jb short loc_4CE481
|
||
movzx eax, byte ptr [ebp+10h]
|
||
mov ecx, [ebp+eax*4+283F0h]
|
||
shr ecx, 2
|
||
mov eax, dword_550998[ecx*4]
|
||
add eax, [esp+90h+var_44]
|
||
mov [esp+90h+var_3C], eax
|
||
mov eax, [esp+90h+var_10]
|
||
cmp eax, 2
|
||
lea ebx, [eax+1]
|
||
jnb short loc_4CE521
|
||
mov ebx, 2
|
||
|
||
loc_4CE521: ; CODE XREF: CEncoder_GetOptimum+4BAj
|
||
cmp ebx, [esp+90h+var_68]
|
||
ja loc_4CE5BA
|
||
xor eax, eax
|
||
cmp ebx, [ebp+32660h]
|
||
mov [esp+90h+var_60], eax
|
||
jbe short loc_4CE550
|
||
lea esp, [esp+0]
|
||
|
||
loc_4CE540: ; CODE XREF: CEncoder_GetOptimum+4EAj
|
||
add eax, 2
|
||
cmp ebx, [ebp+eax*4+32660h]
|
||
ja short loc_4CE540
|
||
mov [esp+90h+var_60], eax
|
||
|
||
loc_4CE550: ; CODE XREF: CEncoder_GetOptimum+4D7j
|
||
lea edx, [ebx+ebx*4]
|
||
lea esi, [ebp+edx*8+0FCh]
|
||
lea ebx, [ebx+0]
|
||
|
||
loc_4CE560: ; CODE XREF: CEncoder_GetOptimum+558j
|
||
mov eax, [esp+90h+var_60]
|
||
mov eax, [ebp+eax*4+32664h]
|
||
push edi
|
||
push ebx
|
||
push eax
|
||
mov ecx, ebp
|
||
mov [esp+9Ch+var_40], eax
|
||
call sub_4CAEC0
|
||
add eax, [esp+90h+var_3C]
|
||
cmp eax, [esi]
|
||
jnb short loc_4CE598
|
||
mov ecx, [esp+90h+var_40]
|
||
add ecx, 4
|
||
mov [esi], eax
|
||
mov dword ptr [esi+4], 0
|
||
mov [esi+8], ecx
|
||
mov byte ptr [esi-0Bh], 0
|
||
|
||
loc_4CE598: ; CODE XREF: CEncoder_GetOptimum+51Fj
|
||
mov eax, [esp+90h+var_60]
|
||
cmp ebx, [ebp+eax*4+32660h]
|
||
jnz short loc_4CE5B2
|
||
add eax, 2
|
||
cmp eax, [esp+90h+var_70]
|
||
mov [esp+90h+var_60], eax
|
||
jz short loc_4CE5BA
|
||
|
||
loc_4CE5B2: ; CODE XREF: CEncoder_GetOptimum+543j
|
||
add ebx, 1
|
||
add esi, 28h
|
||
jmp short loc_4CE560
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE5BA: ; CODE XREF: CEncoder_GetOptimum+4C5j
|
||
; CEncoder_GetOptimum+550j
|
||
mov eax, 1
|
||
cmp [esp+90h+var_7C], eax
|
||
mov [esp+90h+var_78], eax
|
||
jz loc_4CF1D0
|
||
mov esi, eax
|
||
jmp short loc_4CE5D5
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE5D1: ; CODE XREF: CEncoder_GetOptimum+116Aj
|
||
mov esi, [esp+90h+var_78]
|
||
|
||
loc_4CE5D5: ; CODE XREF: CEncoder_GetOptimum+56Fj
|
||
mov edx, [ebp+80h]
|
||
mov eax, [ebp+70h]
|
||
push edx
|
||
call eax
|
||
add esp, 4
|
||
lea ecx, [esp+90h+var_4C]
|
||
push ecx
|
||
mov ecx, ebp
|
||
mov [esp+94h+var_60], eax
|
||
call sub_4CB3B0
|
||
cmp eax, [ebp+32EF8h]
|
||
mov [esp+90h+var_28], eax
|
||
jnb loc_4CF1D7
|
||
add [esp+90h+arg_0], 1
|
||
lea edx, [esi+esi*4+1Eh]
|
||
mov bl, [ebp+edx*8+1]
|
||
test bl, bl
|
||
lea eax, [ebp+edx*8+0]
|
||
mov edx, [eax+10h]
|
||
jz short loc_4CE673
|
||
sub edx, 1
|
||
cmp byte ptr [eax+2], 0
|
||
jz short loc_4CE660
|
||
mov ecx, [eax+4]
|
||
add ecx, 6
|
||
cmp dword ptr [eax+8], 4
|
||
lea ecx, [ecx+ecx*4]
|
||
mov cl, [ebp+ecx*8+0]
|
||
movzx ecx, cl
|
||
jnb short loc_4CE64F
|
||
mov cl, ds:kRepNextStates[ecx]
|
||
movzx ecx, cl
|
||
mov cl, ds:kLiteralNextStates[ecx]
|
||
jmp short loc_4CE67B
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE64F: ; CODE XREF: CEncoder_GetOptimum+5DCj
|
||
mov cl, ds:kMatchNextStates[ecx]
|
||
movzx ecx, cl
|
||
mov cl, ds:kLiteralNextStates[ecx]
|
||
jmp short loc_4CE67B
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE660: ; CODE XREF: CEncoder_GetOptimum+5C6j
|
||
lea ecx, [edx+edx*4+1Eh]
|
||
mov cl, [ebp+ecx*8+0]
|
||
movzx ecx, cl
|
||
mov cl, ds:kLiteralNextStates[ecx]
|
||
jmp short loc_4CE67B
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE673: ; CODE XREF: CEncoder_GetOptimum+5BDj
|
||
lea ecx, [edx+edx*4+1Eh]
|
||
mov cl, [ebp+ecx*8+0]
|
||
|
||
loc_4CE67B: ; CODE XREF: CEncoder_GetOptimum+5EDj
|
||
; CEncoder_GetOptimum+5FEj ...
|
||
add esi, 0FFFFFFFFh
|
||
cmp edx, esi
|
||
jnz short loc_4CE6AC
|
||
cmp dword ptr [eax+14h], 0
|
||
jnz short loc_4CE69A
|
||
movzx edx, cl
|
||
mov bl, ds:kShortRepNextStates[edx]
|
||
mov byte ptr [esp+90h+var_64], bl
|
||
jmp loc_4CE754
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE69A: ; CODE XREF: CEncoder_GetOptimum+626j
|
||
movzx ecx, cl
|
||
mov bl, ds:kLiteralNextStates[ecx]
|
||
mov byte ptr [esp+90h+var_64], bl
|
||
jmp loc_4CE754
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE6AC: ; CODE XREF: CEncoder_GetOptimum+620j
|
||
test bl, bl
|
||
jz short loc_4CE6CB
|
||
cmp byte ptr [eax+2], 0
|
||
jz short loc_4CE6CB
|
||
mov edi, [eax+8]
|
||
mov edx, [eax+4]
|
||
movzx ecx, cl
|
||
mov bl, ds:kRepNextStates[ecx]
|
||
mov [esp+90h+var_68], edi
|
||
jmp short loc_4CE6EA
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE6CB: ; CODE XREF: CEncoder_GetOptimum+64Ej
|
||
; CEncoder_GetOptimum+654j
|
||
mov esi, [eax+14h]
|
||
cmp esi, 4
|
||
mov [esp+90h+var_68], esi
|
||
movzx ecx, cl
|
||
mov edi, esi
|
||
jnb short loc_4CE6E4
|
||
mov bl, ds:kRepNextStates[ecx]
|
||
jmp short loc_4CE6EA
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE6E4: ; CODE XREF: CEncoder_GetOptimum+67Aj
|
||
mov bl, ds:kMatchNextStates[ecx]
|
||
|
||
loc_4CE6EA: ; CODE XREF: CEncoder_GetOptimum+669j
|
||
; CEncoder_GetOptimum+682j
|
||
cmp edi, 4
|
||
lea edx, [edx+edx*4+1Eh]
|
||
mov byte ptr [esp+90h+var_64], bl
|
||
lea edx, [ebp+edx*8+0]
|
||
jnb short loc_4CE738
|
||
mov ecx, [edx+edi*4+18h]
|
||
mov esi, 1
|
||
cmp edi, esi
|
||
mov [esp+90h+var_20], ecx
|
||
jb short loc_4CE723
|
||
mov ecx, edi
|
||
lea esi, [edx+18h]
|
||
lea edi, [esp+90h+var_1C]
|
||
rep movsd
|
||
mov esi, [esp+90h+var_68]
|
||
add esi, 1
|
||
cmp esi, 4
|
||
jnb short loc_4CE754
|
||
|
||
loc_4CE723: ; CODE XREF: CEncoder_GetOptimum+6AAj
|
||
lea edx, [edx+esi*4+18h]
|
||
mov ecx, 4
|
||
lea edi, [esp+esi*4+90h+var_20]
|
||
sub ecx, esi
|
||
mov esi, edx
|
||
rep movsd
|
||
jmp short loc_4CE754
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CE738: ; CODE XREF: CEncoder_GetOptimum+699j
|
||
mov ecx, [edx+18h]
|
||
mov [esp+90h+var_1C], ecx
|
||
mov ecx, [edx+1Ch]
|
||
mov edx, [edx+20h]
|
||
add edi, 0FFFFFFFCh
|
||
mov [esp+90h+var_20], edi
|
||
mov [esp+90h+var_18], ecx
|
||
mov [esp+90h+var_14], edx
|
||
|
||
loc_4CE754: ; CODE XREF: CEncoder_GetOptimum+635j
|
||
; CEncoder_GetOptimum+647j ...
|
||
mov ecx, [esp+90h+var_1C]
|
||
mov edx, [esp+90h+var_18]
|
||
mov edi, [esp+90h+var_20]
|
||
mov [eax], bl
|
||
mov [eax+1Ch], ecx
|
||
mov ecx, [esp+90h+var_14]
|
||
mov [eax+18h], edi
|
||
mov [eax+20h], edx
|
||
mov [eax+24h], ecx
|
||
mov esi, [eax+0Ch]
|
||
mov edx, [ebp+80h]
|
||
mov eax, [ebp+74h]
|
||
push edx
|
||
mov [esp+94h+var_3C], esi
|
||
call eax
|
||
movzx ecx, byte ptr [eax-1]
|
||
sub eax, 1
|
||
mov edx, eax
|
||
mov byte ptr [esp+94h+var_5C], cl
|
||
sub edx, edi
|
||
movzx ecx, byte ptr [edx-1]
|
||
lea edi, [edx-1]
|
||
mov edx, [ebp+32654h]
|
||
mov byte ptr [esp+94h+var_58], cl
|
||
mov ecx, [ebp+33B60h]
|
||
and ecx, [esp+94h+arg_0]
|
||
mov [esp+94h+var_40], edi
|
||
movzx edi, bl
|
||
mov [esp+94h+var_54], ecx
|
||
mov [esp+94h+var_68], edi
|
||
add esp, 4
|
||
shl edi, 4
|
||
add edi, ecx
|
||
mov ecx, [esp+90h+var_5C]
|
||
push ecx
|
||
mov ecx, [esp+94h+var_58]
|
||
push ecx
|
||
cmp bl, 7
|
||
mov ebx, [ebp+3265Ch]
|
||
setnb cl
|
||
and ebx, [esp+98h+arg_0]
|
||
mov [esp+98h+var_74], eax
|
||
movzx eax, byte ptr [eax-1]
|
||
push ecx
|
||
mov ecx, 8
|
||
sub cl, dl
|
||
shr eax, cl
|
||
mov ecx, edx
|
||
shl ebx, cl
|
||
add eax, ebx
|
||
imul eax, 0C00h
|
||
add eax, [ebp+32650h]
|
||
mov ecx, eax
|
||
call sub_4CDAC0
|
||
mov ecx, [ebp+edi*4+280F0h]
|
||
shr ecx, 2
|
||
add eax, dword_550998[ecx*4]
|
||
mov ecx, [esp+90h+var_78]
|
||
add eax, esi
|
||
lea edx, [ecx+ecx*4+23h]
|
||
cmp eax, [ebp+edx*8+0Ch]
|
||
lea esi, [ebp+edx*8+0]
|
||
mov [esp+90h+var_7D], 0
|
||
jnb short loc_4CE851
|
||
mov [esi+0Ch], eax
|
||
mov [esi+10h], ecx
|
||
mov dword ptr [esi+14h], 0FFFFFFFFh
|
||
mov byte ptr [esi+1], 0
|
||
mov [esp+90h+var_7D], 1
|
||
|
||
loc_4CE851: ; CODE XREF: CEncoder_GetOptimum+7D9j
|
||
mov ebx, [esp+90h+var_68]
|
||
mov edx, 800h
|
||
sub edx, [ebp+edi*4+280F0h]
|
||
shr edx, 2
|
||
mov ecx, dword_550998[edx*4]
|
||
add ecx, [esp+90h+var_3C]
|
||
mov edx, 800h
|
||
sub edx, [ebp+ebx*4+283F0h]
|
||
mov ebx, [esp+90h+var_78]
|
||
shr edx, 2
|
||
mov edx, dword_550998[edx*4]
|
||
add edx, ecx
|
||
mov [esp+90h+var_24], ecx
|
||
mov cl, byte ptr [esp+90h+var_58]
|
||
cmp cl, byte ptr [esp+90h+var_5C]
|
||
mov [esp+90h+var_38], edx
|
||
jnz short loc_4CE8EB
|
||
cmp [esi+10h], ebx
|
||
jnb short loc_4CE8A8
|
||
cmp dword ptr [esi+14h], 0
|
||
jz short loc_4CE8EB
|
||
|
||
loc_4CE8A8: ; CODE XREF: CEncoder_GetOptimum+840j
|
||
mov ecx, [esp+90h+var_68]
|
||
mov ecx, [ebp+ecx*4+28420h]
|
||
mov edi, [ebp+edi*4+284B0h]
|
||
shr ecx, 2
|
||
mov ecx, dword_550998[ecx*4]
|
||
shr edi, 2
|
||
add ecx, dword_550998[edi*4]
|
||
add ecx, edx
|
||
cmp ecx, [esi+0Ch]
|
||
ja short loc_4CE8EB
|
||
mov [esi+0Ch], ecx
|
||
mov [esi+10h], ebx
|
||
mov dword ptr [esi+14h], 0
|
||
mov byte ptr [esi+1], 0
|
||
mov [esp+90h+var_7D], 1
|
||
|
||
loc_4CE8EB: ; CODE XREF: CEncoder_GetOptimum+83Bj
|
||
; CEncoder_GetOptimum+846j ...
|
||
mov edx, [esp+90h+var_60]
|
||
mov ecx, 0FFFh
|
||
sub ecx, ebx
|
||
cmp ecx, edx
|
||
jnb short loc_4CE900
|
||
mov edx, ecx
|
||
mov [esp+90h+var_60], edx
|
||
|
||
loc_4CE900: ; CODE XREF: CEncoder_GetOptimum+898j
|
||
cmp edx, 2
|
||
mov ebx, edx
|
||
mov [esp+90h+var_6C], ebx
|
||
jb loc_4CF1BB
|
||
mov esi, [ebp+32EF8h]
|
||
mov edi, [esp+90h+var_60]
|
||
cmp edi, esi
|
||
jbe short loc_4CE923
|
||
mov ebx, esi
|
||
mov [esp+90h+var_6C], esi
|
||
|
||
loc_4CE923: ; CODE XREF: CEncoder_GetOptimum+8BBj
|
||
cmp [esp+90h+var_7D], 0
|
||
jnz loc_4CEA90
|
||
mov dl, byte ptr [esp+90h+var_5C]
|
||
cmp byte ptr [esp+90h+var_58], dl
|
||
jz loc_4CEA90
|
||
lea ecx, [esi+1]
|
||
cmp edi, ecx
|
||
jb short loc_4CE945
|
||
mov edi, ecx
|
||
|
||
loc_4CE945: ; CODE XREF: CEncoder_GetOptimum+8E1j
|
||
mov esi, 1
|
||
cmp edi, esi
|
||
jbe short loc_4CE975
|
||
mov ebx, [esp+90h+var_74]
|
||
mov edx, [esp+90h+var_40]
|
||
lea ecx, [ebx+1]
|
||
sub edx, ebx
|
||
jmp short loc_4CE960
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CE960: ; CODE XREF: CEncoder_GetOptimum+8FBj
|
||
; CEncoder_GetOptimum+90Fj
|
||
mov bl, [ecx]
|
||
cmp bl, [edx+ecx]
|
||
jnz short loc_4CE971
|
||
add esi, 1
|
||
add ecx, 1
|
||
cmp esi, edi
|
||
jb short loc_4CE960
|
||
|
||
loc_4CE971: ; CODE XREF: CEncoder_GetOptimum+905j
|
||
mov ebx, [esp+90h+var_6C]
|
||
|
||
loc_4CE975: ; CODE XREF: CEncoder_GetOptimum+8ECj
|
||
add esi, 0FFFFFFFFh
|
||
cmp esi, 2
|
||
mov [esp+90h+var_50], esi
|
||
jb loc_4CEA90
|
||
mov ecx, [esp+90h+var_68]
|
||
mov dl, ds:kLiteralNextStates[ecx]
|
||
mov ecx, [esp+90h+arg_0]
|
||
movzx ebx, dl
|
||
add ecx, 1
|
||
and ecx, [ebp+33B60h]
|
||
mov edx, ebx
|
||
shl edx, 4
|
||
lea esi, [edx+ecx]
|
||
mov edx, 800h
|
||
sub edx, [ebp+ebx*4+283F0h]
|
||
mov edi, 800h
|
||
sub edi, [ebp+esi*4+280F0h]
|
||
shr edx, 2
|
||
mov edx, dword_550998[edx*4]
|
||
shr edi, 2
|
||
add edx, dword_550998[edi*4]
|
||
mov edi, [esp+90h+var_78]
|
||
add edx, eax
|
||
mov eax, [esp+90h+var_50]
|
||
lea edi, [eax+edi+1]
|
||
mov eax, [esp+90h+var_7C]
|
||
cmp eax, edi
|
||
mov [esp+90h+var_40], esi
|
||
jnb short loc_4CEA22
|
||
mov esi, [esp+90h+var_7C]
|
||
lea eax, [eax+eax*4]
|
||
lea eax, [ebp+eax*8+0FCh]
|
||
mov [esp+90h+var_3C], eax
|
||
mov eax, edi
|
||
sub eax, esi
|
||
add esi, eax
|
||
mov [esp+90h+var_7C], esi
|
||
mov esi, [esp+90h+var_3C]
|
||
|
||
loc_4CEA10: ; CODE XREF: CEncoder_GetOptimum+9BCj
|
||
add esi, 28h
|
||
sub eax, 1
|
||
mov dword ptr [esi], 0FFFFFFFh
|
||
jnz short loc_4CEA10
|
||
mov esi, [esp+90h+var_40]
|
||
|
||
loc_4CEA22: ; CODE XREF: CEncoder_GetOptimum+98Ej
|
||
imul ecx, 110h
|
||
add ecx, [esp+90h+var_50]
|
||
mov eax, 800h
|
||
sub eax, [ebp+esi*4+284B0h]
|
||
mov esi, [ebp+ebx*4+28420h]
|
||
mov ebx, [esp+90h+var_6C]
|
||
shr eax, 2
|
||
mov eax, dword_550998[eax*4]
|
||
shr esi, 2
|
||
add eax, dword_550998[esi*4]
|
||
mov esi, [esp+90h+var_7C]
|
||
add eax, [ebp+ecx*4+2E204h]
|
||
lea ecx, [edi+edi*4+1Eh]
|
||
add eax, edx
|
||
cmp eax, [ebp+ecx*8+0Ch]
|
||
lea ecx, [ebp+ecx*8+0]
|
||
jnb short loc_4CEA94
|
||
mov edx, [esp+90h+var_78]
|
||
add edx, 1
|
||
mov [ecx+0Ch], eax
|
||
mov [ecx+10h], edx
|
||
mov dword ptr [ecx+14h], 0
|
||
mov byte ptr [ecx+1], 1
|
||
mov byte ptr [ecx+2], 0
|
||
jmp short loc_4CEA94
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CEA90: ; CODE XREF: CEncoder_GetOptimum+8C8j
|
||
; CEncoder_GetOptimum+8D6j ...
|
||
mov esi, [esp+90h+var_7C]
|
||
|
||
loc_4CEA94: ; CODE XREF: CEncoder_GetOptimum+A10j
|
||
; CEncoder_GetOptimum+A2Ej
|
||
mov [esp+90h+var_70], 0
|
||
mov ecx, [esp+90h+var_70]
|
||
mov [esp+90h+var_40], 2
|
||
jmp short loc_4CEAB8
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CEAB0: ; CODE XREF: CEncoder_GetOptimum+D63j
|
||
mov ebx, [esp+90h+var_6C]
|
||
mov esi, [esp+90h+var_7C]
|
||
|
||
loc_4CEAB8: ; CODE XREF: CEncoder_GetOptimum+A48j
|
||
mov edx, [esp+90h+var_74]
|
||
mov eax, edx
|
||
sub eax, [esp+ecx*4+90h+var_20]
|
||
mov cl, [edx]
|
||
sub eax, 1
|
||
cmp cl, [eax]
|
||
mov [esp+90h+var_48], eax
|
||
jnz loc_4CEDB5
|
||
mov cl, [edx+1]
|
||
cmp cl, [eax+1]
|
||
jnz loc_4CEDB5
|
||
mov edi, 2
|
||
cmp ebx, edi
|
||
jbe short loc_4CEB01
|
||
lea ecx, [edx+2]
|
||
sub eax, edx
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CEAF0: ; CODE XREF: CEncoder_GetOptimum+A9Fj
|
||
mov dl, [ecx]
|
||
cmp dl, [eax+ecx]
|
||
jnz short loc_4CEB01
|
||
add edi, 1
|
||
add ecx, 1
|
||
cmp edi, ebx
|
||
jb short loc_4CEAF0
|
||
|
||
loc_4CEB01: ; CODE XREF: CEncoder_GetOptimum+A86j
|
||
; CEncoder_GetOptimum+A95j
|
||
mov eax, [esp+90h+var_78]
|
||
lea ebx, [edi+eax]
|
||
cmp esi, ebx
|
||
jnb short loc_4CEB2E
|
||
mov eax, ebx
|
||
lea ecx, [esi+esi*4]
|
||
sub eax, esi
|
||
add esi, eax
|
||
lea ecx, [ebp+ecx*8+0FCh]
|
||
mov [esp+90h+var_7C], esi
|
||
|
||
loc_4CEB20: ; CODE XREF: CEncoder_GetOptimum+ACCj
|
||
add ecx, 28h
|
||
sub eax, 1
|
||
mov dword ptr [ecx], 0FFFFFFFh
|
||
jnz short loc_4CEB20
|
||
|
||
loc_4CEB2E: ; CODE XREF: CEncoder_GetOptimum+AAAj
|
||
mov edx, [esp+90h+var_54]
|
||
mov eax, [esp+90h+var_64]
|
||
mov ecx, [esp+90h+var_70]
|
||
push edx
|
||
push eax
|
||
push ecx
|
||
mov ecx, ebp
|
||
mov esi, edi
|
||
call sub_4CD9B0
|
||
add eax, [esp+90h+var_38]
|
||
mov ecx, [esp+90h+var_54]
|
||
imul ecx, 110h
|
||
lea edx, [edi+ecx]
|
||
mov [esp+90h+var_34], ecx
|
||
lea ecx, [ebp+edx*4+2E204h]
|
||
mov [esp+90h+var_50], ecx
|
||
lea edx, [ebx+ebx*4]
|
||
mov ebx, [esp+90h+var_50]
|
||
mov [esp+90h+var_2C], eax
|
||
lea ecx, [ebp+edx*8+0FCh]
|
||
|
||
loc_4CEB78: ; CODE XREF: CEncoder_GetOptimum+B40j
|
||
mov edx, [ebx]
|
||
add edx, eax
|
||
cmp edx, [ecx]
|
||
jnb short loc_4CEB94
|
||
mov [ecx], edx
|
||
mov edx, [esp+90h+var_78]
|
||
mov [ecx+4], edx
|
||
mov edx, [esp+90h+var_70]
|
||
mov [ecx+8], edx
|
||
mov byte ptr [ecx-0Bh], 0
|
||
|
||
loc_4CEB94: ; CODE XREF: CEncoder_GetOptimum+B1Ej
|
||
sub edi, 1
|
||
sub ebx, 4
|
||
sub ecx, 28h
|
||
cmp edi, 2
|
||
jnb short loc_4CEB78
|
||
cmp [esp+90h+var_70], 0
|
||
jnz short loc_4CEBB0
|
||
lea eax, [esi+1]
|
||
mov [esp+90h+var_40], eax
|
||
|
||
loc_4CEBB0: ; CODE XREF: CEncoder_GetOptimum+B47j
|
||
mov ecx, [ebp+32EF8h]
|
||
mov edx, [esp+90h+var_60]
|
||
lea eax, [esi+1]
|
||
add ecx, eax
|
||
cmp edx, ecx
|
||
jnb short loc_4CEBC5
|
||
mov ecx, edx
|
||
|
||
loc_4CEBC5: ; CODE XREF: CEncoder_GetOptimum+B61j
|
||
cmp eax, ecx
|
||
jnb short loc_4CEBE7
|
||
mov ebx, [esp+90h+var_74]
|
||
mov edi, [esp+90h+var_48]
|
||
lea edx, [eax+ebx]
|
||
sub edi, ebx
|
||
|
||
loc_4CEBD6: ; CODE XREF: CEncoder_GetOptimum+B85j
|
||
mov bl, [edx]
|
||
cmp bl, [edx+edi]
|
||
jnz short loc_4CEBE7
|
||
add eax, 1
|
||
add edx, 1
|
||
cmp eax, ecx
|
||
jb short loc_4CEBD6
|
||
|
||
loc_4CEBE7: ; CODE XREF: CEncoder_GetOptimum+B67j
|
||
; CEncoder_GetOptimum+B7Bj
|
||
or ecx, 0FFFFFFFFh
|
||
sub ecx, esi
|
||
add eax, ecx
|
||
cmp eax, 2
|
||
mov [esp+90h+var_44], eax
|
||
jb loc_4CEDB5
|
||
mov edx, [esp+90h+var_68]
|
||
mov cl, ds:kRepNextStates[edx]
|
||
mov eax, [ebp+33B60h]
|
||
mov edi, [esp+90h+arg_0]
|
||
movzx ecx, cl
|
||
mov ebx, eax
|
||
lea edx, [esi+edi]
|
||
and ebx, edx
|
||
mov edx, ecx
|
||
mov cl, ds:kLiteralNextStates[ecx]
|
||
shl edx, 4
|
||
add ebx, edx
|
||
mov edx, [ebp+ebx*4+280F0h]
|
||
movzx ebx, cl
|
||
shr edx, 2
|
||
mov edx, dword_550998[edx*4]
|
||
mov [esp+90h+var_30], edx
|
||
lea edi, [esi+edi+1]
|
||
and edi, eax
|
||
mov eax, [ebp+32654h]
|
||
mov ecx, ebx
|
||
shl ecx, 4
|
||
add ecx, edi
|
||
mov [esp+90h+var_50], ecx
|
||
mov ecx, [esp+90h+var_74]
|
||
movzx edx, byte ptr [esi+ecx]
|
||
push edx
|
||
mov edx, [esp+94h+var_48]
|
||
movzx edx, byte ptr [esi+edx]
|
||
push edx
|
||
movzx edx, byte ptr [ecx+esi-1]
|
||
mov ecx, 8
|
||
sub cl, al
|
||
shr edx, cl
|
||
mov ecx, [esp+98h+arg_0]
|
||
lea eax, [esi+ecx]
|
||
mov ecx, [ebp+3265Ch]
|
||
and ecx, eax
|
||
mov eax, ecx
|
||
mov ecx, [ebp+32654h]
|
||
shl eax, cl
|
||
push 1
|
||
add edx, eax
|
||
imul edx, 0C00h
|
||
add edx, [ebp+32650h]
|
||
mov ecx, edx
|
||
call sub_4CDAC0
|
||
mov ecx, [esp+90h+var_50]
|
||
mov edx, 800h
|
||
sub edx, [ebp+ecx*4+280F0h]
|
||
mov ecx, [esp+90h+var_34]
|
||
shr edx, 2
|
||
add eax, dword_550998[edx*4]
|
||
mov edx, 800h
|
||
sub edx, [ebp+ebx*4+283F0h]
|
||
shr edx, 2
|
||
add eax, dword_550998[edx*4]
|
||
lea edx, [esi+ecx]
|
||
add eax, [ebp+edx*4+2E204h]
|
||
mov ecx, [esp+90h+var_44]
|
||
add eax, [esp+90h+var_30]
|
||
mov edx, [esp+90h+var_78]
|
||
add eax, [esp+90h+var_2C]
|
||
add ecx, esi
|
||
lea ecx, [ecx+edx+1]
|
||
cmp [esp+90h+var_7C], ecx
|
||
mov [esp+90h+var_30], ecx
|
||
jnb short loc_4CED3E
|
||
mov edx, [esp+90h+var_7C]
|
||
lea edx, [edx+edx*4]
|
||
lea edx, [ebp+edx*8+0FCh]
|
||
mov [esp+90h+var_2C], edx
|
||
mov edx, [esp+90h+var_7C]
|
||
sub ecx, edx
|
||
add edx, ecx
|
||
mov [esp+90h+var_7C], edx
|
||
mov edx, [esp+90h+var_2C]
|
||
jmp short loc_4CED30
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CED30: ; CODE XREF: CEncoder_GetOptimum+CCBj
|
||
; CEncoder_GetOptimum+CDCj
|
||
add edx, 28h
|
||
sub ecx, 1
|
||
mov dword ptr [edx], 0FFFFFFFh
|
||
jnz short loc_4CED30
|
||
|
||
loc_4CED3E: ; CODE XREF: CEncoder_GetOptimum+CA7j
|
||
mov edx, [esp+90h+var_50]
|
||
imul edi, 110h
|
||
add edi, [esp+90h+var_44]
|
||
mov ecx, 800h
|
||
sub ecx, [ebp+edx*4+284B0h]
|
||
mov edx, [ebp+ebx*4+28420h]
|
||
shr ecx, 2
|
||
mov ecx, dword_550998[ecx*4]
|
||
shr edx, 2
|
||
add ecx, dword_550998[edx*4]
|
||
add ecx, [ebp+edi*4+2E204h]
|
||
add ecx, eax
|
||
mov eax, [esp+90h+var_30]
|
||
lea eax, [eax+eax*4+1Eh]
|
||
cmp ecx, [ebp+eax*8+0Ch]
|
||
lea eax, [ebp+eax*8+0]
|
||
jnb short loc_4CEDB5
|
||
mov [eax+0Ch], ecx
|
||
mov ecx, [esp+90h+var_78]
|
||
lea edx, [esi+ecx+1]
|
||
mov [eax+4], ecx
|
||
mov ecx, [esp+90h+var_70]
|
||
mov [eax+10h], edx
|
||
mov dword ptr [eax+14h], 0
|
||
mov byte ptr [eax+1], 1
|
||
mov byte ptr [eax+2], 1
|
||
mov [eax+8], ecx
|
||
|
||
loc_4CEDB5: ; CODE XREF: CEncoder_GetOptimum+A6Dj
|
||
; CEncoder_GetOptimum+A79j ...
|
||
mov ecx, [esp+90h+var_70]
|
||
add ecx, 1
|
||
cmp ecx, 4
|
||
mov [esp+90h+var_70], ecx
|
||
jb loc_4CEAB0
|
||
mov edx, [esp+90h+var_28]
|
||
mov ecx, [esp+90h+var_6C]
|
||
cmp edx, ecx
|
||
jbe short loc_4CEDFB
|
||
xor eax, eax
|
||
cmp ecx, [ebp+32660h]
|
||
mov edx, ecx
|
||
jbe short loc_4CEDED
|
||
|
||
loc_4CEDE1: ; CODE XREF: CEncoder_GetOptimum+D8Bj
|
||
add eax, 2
|
||
cmp ecx, [ebp+eax*4+32660h]
|
||
ja short loc_4CEDE1
|
||
|
||
loc_4CEDED: ; CODE XREF: CEncoder_GetOptimum+D7Fj
|
||
mov [ebp+eax*4+32660h], ecx
|
||
add eax, 2
|
||
mov [esp+90h+var_4C], eax
|
||
|
||
loc_4CEDFB: ; CODE XREF: CEncoder_GetOptimum+D73j
|
||
mov esi, [esp+90h+var_40]
|
||
cmp edx, esi
|
||
jb loc_4CF1BB
|
||
mov eax, [esp+90h+var_68]
|
||
mov ecx, [ebp+eax*4+283F0h]
|
||
shr ecx, 2
|
||
mov eax, dword_550998[ecx*4]
|
||
add eax, [esp+90h+var_24]
|
||
mov ecx, [esp+90h+var_7C]
|
||
mov [esp+90h+var_40], eax
|
||
mov eax, [esp+90h+var_78]
|
||
add eax, edx
|
||
cmp ecx, eax
|
||
jnb short loc_4CEE52
|
||
lea edx, [ecx+ecx*4]
|
||
sub eax, ecx
|
||
add ecx, eax
|
||
lea edx, [ebp+edx*8+0FCh]
|
||
mov [esp+90h+var_7C], ecx
|
||
|
||
loc_4CEE44: ; CODE XREF: CEncoder_GetOptimum+DF0j
|
||
add edx, 28h
|
||
sub eax, 1
|
||
mov dword ptr [edx], 0FFFFFFFh
|
||
jnz short loc_4CEE44
|
||
|
||
loc_4CEE52: ; CODE XREF: CEncoder_GetOptimum+DD0j
|
||
xor eax, eax
|
||
cmp esi, [ebp+32660h]
|
||
mov [esp+90h+var_70], eax
|
||
jbe short loc_4CEE70
|
||
|
||
loc_4CEE60: ; CODE XREF: CEncoder_GetOptimum+E0Aj
|
||
add eax, 2
|
||
cmp esi, [ebp+eax*4+32660h]
|
||
ja short loc_4CEE60
|
||
mov [esp+90h+var_70], eax
|
||
|
||
loc_4CEE70: ; CODE XREF: CEncoder_GetOptimum+DFEj
|
||
lea ebx, ds:0[eax*4]
|
||
mov edx, [ebx+ebp+32664h]
|
||
mov ecx, 7FFFFh
|
||
sub ecx, edx
|
||
sar ecx, 1Fh
|
||
and ecx, 0Ch
|
||
add ecx, 6
|
||
mov eax, edx
|
||
shr eax, cl
|
||
mov [esp+90h+var_6C], edx
|
||
lea edi, [esi+1]
|
||
movzx eax, byte ptr dword_551198[eax]
|
||
lea ecx, [eax+ecx*2]
|
||
mov eax, [esp+90h+var_54]
|
||
imul eax, 110h
|
||
add eax, esi
|
||
lea eax, [ebp+eax*4+295B8h]
|
||
mov [esp+90h+var_3C], ecx
|
||
mov ecx, [esp+90h+var_78]
|
||
mov [esp+90h+var_54], eax
|
||
lea eax, [esi+ecx]
|
||
lea eax, [eax+eax*4]
|
||
lea ecx, [ebp+eax*8+0FCh]
|
||
mov [esp+90h+var_50], ecx
|
||
|
||
loc_4CEED3: ; CODE XREF: CEncoder_GetOptimum+1156j
|
||
lea eax, [edi-3]
|
||
cmp eax, 4
|
||
jb short loc_4CEEE0
|
||
mov eax, 3
|
||
|
||
loc_4CEEE0: ; CODE XREF: CEncoder_GetOptimum+E79j
|
||
cmp edx, 80h
|
||
jnb short loc_4CEEF6
|
||
shl eax, 7
|
||
add eax, edx
|
||
mov eax, [ebp+eax*4+33314h]
|
||
jmp short loc_4CEF10
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CEEF6: ; CODE XREF: CEncoder_GetOptimum+E86j
|
||
shl eax, 6
|
||
add eax, [esp+90h+var_3C]
|
||
mov esi, edx
|
||
mov eax, [ebp+eax*4+32F14h]
|
||
and esi, 0Fh
|
||
add eax, [ebp+esi*4+33B14h]
|
||
|
||
loc_4CEF10: ; CODE XREF: CEncoder_GetOptimum+E94j
|
||
add eax, [esp+90h+var_40]
|
||
mov esi, [esp+90h+var_54]
|
||
add eax, [esi]
|
||
cmp eax, [ecx]
|
||
mov [esp+90h+var_2C], eax
|
||
jnb short loc_4CEF35
|
||
mov [ecx], eax
|
||
mov eax, [esp+90h+var_78]
|
||
add edx, 4
|
||
mov [ecx+4], eax
|
||
mov [ecx+8], edx
|
||
mov byte ptr [ecx-0Bh], 0
|
||
|
||
loc_4CEF35: ; CODE XREF: CEncoder_GetOptimum+EC0j
|
||
lea eax, [edi-1]
|
||
cmp eax, [ebx+ebp+32660h]
|
||
jnz loc_4CF1A1
|
||
mov ebx, [esp+90h+var_74]
|
||
mov eax, [ebp+32EF8h]
|
||
mov esi, [esp+90h+var_60]
|
||
mov edx, ebx
|
||
sub edx, [esp+90h+var_6C]
|
||
add eax, edi
|
||
sub edx, 1
|
||
cmp esi, eax
|
||
mov ecx, edi
|
||
jnb short loc_4CEF6C
|
||
mov eax, esi
|
||
mov [esp+90h+var_44], esi
|
||
jmp short loc_4CEF70
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CEF6C: ; CODE XREF: CEncoder_GetOptimum+F02j
|
||
mov [esp+90h+var_44], eax
|
||
|
||
loc_4CEF70: ; CODE XREF: CEncoder_GetOptimum+F0Aj
|
||
cmp edi, eax
|
||
jnb short loc_4CEF93
|
||
lea esi, [edi+edx]
|
||
sub ebx, edx
|
||
lea esp, [esp+0]
|
||
|
||
loc_4CEF80: ; CODE XREF: CEncoder_GetOptimum+F31j
|
||
mov al, [ebx+esi]
|
||
cmp al, [esi]
|
||
jnz short loc_4CEF93
|
||
add ecx, 1
|
||
add esi, 1
|
||
cmp ecx, [esp+90h+var_44]
|
||
jb short loc_4CEF80
|
||
|
||
loc_4CEF93: ; CODE XREF: CEncoder_GetOptimum+F12j
|
||
; CEncoder_GetOptimum+F25j
|
||
or esi, 0FFFFFFFFh
|
||
lea eax, [edi-1]
|
||
sub esi, eax
|
||
add ecx, esi
|
||
cmp ecx, 2
|
||
mov [esp+90h+var_48], ecx
|
||
jb loc_4CF157
|
||
mov ecx, [esp+90h+var_68]
|
||
mov bl, ds:kMatchNextStates[ecx]
|
||
mov ecx, [ebp+33B60h]
|
||
mov eax, [esp+90h+arg_0]
|
||
lea esi, [edi+eax-1]
|
||
mov eax, ecx
|
||
and eax, esi
|
||
movzx esi, bl
|
||
movzx edx, byte ptr [edi+edx-1]
|
||
mov ebx, esi
|
||
shl ebx, 4
|
||
add ebx, eax
|
||
mov ebx, [ebp+ebx*4+280F0h]
|
||
shr ebx, 2
|
||
mov ebx, dword_550998[ebx*4]
|
||
mov [esp+90h+var_28], ebx
|
||
mov bl, ds:kLiteralNextStates[esi]
|
||
lea esi, [eax+1]
|
||
mov eax, [ebp+32654h]
|
||
and esi, ecx
|
||
movzx ebx, bl
|
||
mov ecx, ebx
|
||
shl ecx, 4
|
||
add ecx, esi
|
||
mov [esp+90h+var_44], ecx
|
||
mov ecx, [esp+90h+var_74]
|
||
movzx ecx, byte ptr [ecx+edi-1]
|
||
push ecx
|
||
mov ecx, [esp+94h+var_74]
|
||
push edx
|
||
movzx edx, byte ptr [edi+ecx-2]
|
||
mov ecx, 8
|
||
sub cl, al
|
||
shr edx, cl
|
||
mov ecx, [esp+98h+arg_0]
|
||
lea eax, [edi+ecx-1]
|
||
mov ecx, [ebp+3265Ch]
|
||
and ecx, eax
|
||
mov eax, ecx
|
||
mov ecx, [ebp+32654h]
|
||
shl eax, cl
|
||
push 1
|
||
add edx, eax
|
||
imul edx, 0C00h
|
||
add edx, [ebp+32650h]
|
||
mov ecx, edx
|
||
call sub_4CDAC0
|
||
mov edx, 800h
|
||
sub edx, [ebp+ebx*4+283F0h]
|
||
mov ecx, 800h
|
||
shr edx, 2
|
||
add eax, dword_550998[edx*4]
|
||
mov edx, [esp+90h+var_44]
|
||
sub ecx, [ebp+edx*4+280F0h]
|
||
mov edx, [esp+90h+var_78]
|
||
shr ecx, 2
|
||
add eax, dword_550998[ecx*4]
|
||
mov ecx, [esp+90h+var_48]
|
||
add eax, [esp+90h+var_28]
|
||
add ecx, edx
|
||
add eax, [esp+90h+var_2C]
|
||
add ecx, edi
|
||
cmp [esp+90h+var_7C], ecx
|
||
mov [esp+90h+var_28], ecx
|
||
jnb short loc_4CF0DE
|
||
mov edx, [esp+90h+var_7C]
|
||
lea edx, [edx+edx*4]
|
||
lea edx, [ebp+edx*8+0FCh]
|
||
mov [esp+90h+var_24], edx
|
||
mov edx, [esp+90h+var_7C]
|
||
sub ecx, edx
|
||
add edx, ecx
|
||
mov [esp+90h+var_7C], edx
|
||
mov edx, [esp+90h+var_24]
|
||
lea ecx, [ecx+0]
|
||
|
||
loc_4CF0D0: ; CODE XREF: CEncoder_GetOptimum+107Cj
|
||
add edx, 28h
|
||
sub ecx, 1
|
||
mov dword ptr [edx], 0FFFFFFFh
|
||
jnz short loc_4CF0D0
|
||
|
||
loc_4CF0DE: ; CODE XREF: CEncoder_GetOptimum+1049j
|
||
mov edx, [esp+90h+var_44]
|
||
imul esi, 110h
|
||
add esi, [esp+90h+var_48]
|
||
mov ecx, 800h
|
||
sub ecx, [ebp+edx*4+284B0h]
|
||
mov edx, [ebp+ebx*4+28420h]
|
||
shr ecx, 2
|
||
mov ecx, dword_550998[ecx*4]
|
||
shr edx, 2
|
||
add ecx, dword_550998[edx*4]
|
||
add ecx, [ebp+esi*4+2E204h]
|
||
add ecx, eax
|
||
mov eax, [esp+90h+var_28]
|
||
lea eax, [eax+eax*4+1Eh]
|
||
cmp ecx, [ebp+eax*8+0Ch]
|
||
lea eax, [ebp+eax*8+0]
|
||
jnb short loc_4CF157
|
||
mov [eax+0Ch], ecx
|
||
mov ecx, [esp+90h+var_78]
|
||
lea edx, [ecx+edi]
|
||
mov [eax+4], ecx
|
||
mov ecx, [esp+90h+var_6C]
|
||
add ecx, 4
|
||
mov [eax+10h], edx
|
||
mov dword ptr [eax+14h], 0
|
||
mov byte ptr [eax+1], 1
|
||
mov byte ptr [eax+2], 1
|
||
mov [eax+8], ecx
|
||
|
||
loc_4CF157: ; CODE XREF: CEncoder_GetOptimum+F44j
|
||
; CEncoder_GetOptimum+10CCj
|
||
mov eax, [esp+90h+var_70]
|
||
add eax, 2
|
||
cmp eax, [esp+90h+var_4C]
|
||
mov [esp+90h+var_70], eax
|
||
jz short loc_4CF1BB
|
||
lea ebx, ds:0[eax*4]
|
||
mov eax, [ebx+ebp+32664h]
|
||
cmp eax, 80h
|
||
mov [esp+90h+var_6C], eax
|
||
jb short loc_4CF1A1
|
||
mov ecx, 7FFFFh
|
||
sub ecx, eax
|
||
sar ecx, 1Fh
|
||
and ecx, 0Ch
|
||
add ecx, 6
|
||
shr eax, cl
|
||
movzx edx, byte ptr dword_551198[eax]
|
||
lea eax, [edx+ecx*2]
|
||
mov [esp+90h+var_3C], eax
|
||
|
||
loc_4CF1A1: ; CODE XREF: CEncoder_GetOptimum+EDFj
|
||
; CEncoder_GetOptimum+111Fj
|
||
add [esp+90h+var_50], 28h
|
||
add [esp+90h+var_54], 4
|
||
mov ecx, [esp+90h+var_50]
|
||
mov edx, [esp+90h+var_6C]
|
||
add edi, 1
|
||
jmp loc_4CEED3
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF1BB: ; CODE XREF: CEncoder_GetOptimum+8A9j
|
||
; CEncoder_GetOptimum+DA1j ...
|
||
mov eax, [esp+90h+var_78]
|
||
add eax, 1
|
||
cmp eax, [esp+90h+var_7C]
|
||
mov [esp+90h+var_78], eax
|
||
jnz loc_4CE5D1
|
||
|
||
loc_4CF1D0: ; CODE XREF: CEncoder_GetOptimum+567j
|
||
mov ecx, [esp+90h+var_78]
|
||
push ecx
|
||
jmp short loc_4CF1EF
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF1D7: ; CODE XREF: CEncoder_GetOptimum+59Ej
|
||
mov ecx, [esp+90h+var_4C]
|
||
mov [ebp+32F00h], ecx
|
||
mov [ebp+32EFCh], eax
|
||
mov byte ptr [ebp+32F10h], 1
|
||
push esi
|
||
|
||
loc_4CF1EF: ; CODE XREF: CEncoder_GetOptimum+1175j
|
||
mov edx, [esp+94h+arg_4]
|
||
push edx
|
||
mov ecx, ebp
|
||
call sub_4CB2E0
|
||
pop edi
|
||
pop ebx
|
||
pop esi
|
||
pop ebp
|
||
add esp, 80h
|
||
retn 8
|
||
CEncoder_GetOptimum endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CF210: ; DATA XREF: CEncoder_CodeOneBlock+44o
|
||
mov edx, [esp+10h]
|
||
mov eax, [esp+4]
|
||
mov eax, [eax+4]
|
||
mov ecx, [eax]
|
||
push edx
|
||
mov edx, [esp+10h]
|
||
push edx
|
||
mov edx, [esp+10h]
|
||
push edx
|
||
push eax
|
||
mov eax, [ecx+0Ch]
|
||
call eax
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
CEncoder_FillDistancesPrices proc near ; CODE XREF: CEncoder_SetStreams+4Fp
|
||
; CEncoder_CodeOneBlock+751p
|
||
|
||
var_20C = dword ptr -20Ch
|
||
var_208 = dword ptr -208h
|
||
var_204 = dword ptr -204h
|
||
var_200 = dword ptr -200h
|
||
|
||
sub esp, 20Ch
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
push edi
|
||
mov ebx, ecx
|
||
mov esi, 4
|
||
|
||
loc_4CF241: ; CODE XREF: CEncoder_FillDistancesPrices+80j
|
||
cmp esi, 2000h
|
||
jnb short loc_4CF252
|
||
movzx edx, byte ptr dword_551198[esi]
|
||
jmp short loc_4CF27A
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF252: ; CODE XREF: CEncoder_FillDistancesPrices+17j
|
||
cmp esi, 2000000h
|
||
jnb short loc_4CF26B
|
||
mov eax, esi
|
||
shr eax, 0Ch
|
||
movzx edx, byte ptr dword_551198[eax]
|
||
add edx, 18h
|
||
jmp short loc_4CF27A
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF26B: ; CODE XREF: CEncoder_FillDistancesPrices+28j
|
||
mov ecx, esi
|
||
shr ecx, 18h
|
||
movzx edx, byte ptr dword_551198[ecx]
|
||
add edx, 30h
|
||
|
||
loc_4CF27A: ; CODE XREF: CEncoder_FillDistancesPrices+20j
|
||
; CEncoder_FillDistancesPrices+39j
|
||
mov ecx, edx
|
||
mov eax, edx
|
||
and eax, 1
|
||
shr ecx, 1
|
||
sub ecx, 1
|
||
or eax, 2
|
||
shl eax, cl
|
||
mov edi, esi
|
||
sub edi, eax
|
||
push edi
|
||
sub eax, edx
|
||
push ecx
|
||
lea edx, [ebx+eax*4+28BACh]
|
||
push edx
|
||
call sub_4CD860
|
||
mov [esp+esi*4+228h+var_200], eax
|
||
add esi, 1
|
||
add esp, 0Ch
|
||
cmp esi, 80h
|
||
jb short loc_4CF241
|
||
lea ebp, [esp+21Ch+var_200]
|
||
sub ebp, ebx
|
||
lea esi, [ebx+3331Ch]
|
||
sub ebp, 33314h
|
||
lea edx, [ebx+32F14h]
|
||
mov [esp+21Ch+var_20C], esi
|
||
mov [esp+21Ch+var_208], ebp
|
||
mov [esp+21Ch+var_204], 4
|
||
jmp short loc_4CF2E4
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CF2E0: ; CODE XREF: CEncoder_FillDistancesPrices+1BDj
|
||
mov esi, [esp+21Ch+var_20C]
|
||
|
||
loc_4CF2E4: ; CODE XREF: CEncoder_FillDistancesPrices+AAj
|
||
xor edi, edi
|
||
cmp [ebx+33B58h], edi
|
||
jbe short loc_4CF33F
|
||
mov edi, edi
|
||
|
||
loc_4CF2F0: ; CODE XREF: CEncoder_FillDistancesPrices+109j
|
||
mov ecx, edi
|
||
or ecx, 40h
|
||
xor esi, esi
|
||
cmp ecx, 1
|
||
jz short loc_4CF32D
|
||
lea esp, [esp+0]
|
||
|
||
loc_4CF300: ; CODE XREF: CEncoder_FillDistancesPrices+F7j
|
||
mov eax, ecx
|
||
shr ecx, 1
|
||
mov ebp, [edx+ecx*4-0A764h]
|
||
and eax, 1
|
||
sub ebp, eax
|
||
neg eax
|
||
xor ebp, eax
|
||
shr ebp, 2
|
||
and ebp, 1FFh
|
||
add esi, dword_550998[ebp*4]
|
||
cmp ecx, 1
|
||
jnz short loc_4CF300
|
||
mov ebp, [esp+21Ch+var_208]
|
||
|
||
loc_4CF32D: ; CODE XREF: CEncoder_FillDistancesPrices+CAj
|
||
mov [edx+edi*4], esi
|
||
add edi, 1
|
||
cmp edi, [ebx+33B58h]
|
||
jb short loc_4CF2F0
|
||
mov esi, [esp+21Ch+var_20C]
|
||
|
||
loc_4CF33F: ; CODE XREF: CEncoder_FillDistancesPrices+BCj
|
||
mov eax, 0Eh
|
||
cmp [ebx+33B58h], eax
|
||
jbe short loc_4CF368
|
||
lea esp, [esp+0]
|
||
|
||
loc_4CF350: ; CODE XREF: CEncoder_FillDistancesPrices+136j
|
||
mov ecx, eax
|
||
shr ecx, 1
|
||
sub ecx, 5
|
||
shl ecx, 6
|
||
add [edx+eax*4], ecx
|
||
add eax, 1
|
||
cmp eax, [ebx+33B58h]
|
||
jb short loc_4CF350
|
||
|
||
loc_4CF368: ; CODE XREF: CEncoder_FillDistancesPrices+11Aj
|
||
mov eax, [edx]
|
||
mov [esi-8], eax
|
||
mov ecx, [edx+4]
|
||
mov [esi-4], ecx
|
||
mov eax, [edx+8]
|
||
mov [esi], eax
|
||
mov ecx, [edx+0Ch]
|
||
mov [esi+4], ecx
|
||
mov eax, 4
|
||
add esi, 8
|
||
|
||
loc_4CF386: ; CODE XREF: CEncoder_FillDistancesPrices+19Ej
|
||
cmp eax, 2000h
|
||
jnb short loc_4CF396
|
||
movzx ecx, byte ptr dword_551198[eax]
|
||
jmp short loc_4CF3BB
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF396: ; CODE XREF: CEncoder_FillDistancesPrices+15Bj
|
||
cmp eax, 2000000h
|
||
mov ecx, eax
|
||
jnb short loc_4CF3AE
|
||
shr ecx, 0Ch
|
||
movzx ecx, byte ptr dword_551198[ecx]
|
||
add ecx, 18h
|
||
jmp short loc_4CF3BB
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF3AE: ; CODE XREF: CEncoder_FillDistancesPrices+16Dj
|
||
shr ecx, 18h
|
||
movzx ecx, byte ptr dword_551198[ecx]
|
||
add ecx, 30h
|
||
|
||
loc_4CF3BB: ; CODE XREF: CEncoder_FillDistancesPrices+164j
|
||
; CEncoder_FillDistancesPrices+17Cj
|
||
mov ecx, [edx+ecx*4]
|
||
add ecx, [esi+ebp]
|
||
add eax, 1
|
||
mov [esi], ecx
|
||
add esi, 4
|
||
cmp eax, 80h
|
||
jb short loc_4CF386
|
||
add [esp+21Ch+var_20C], 200h
|
||
sub ebp, 200h
|
||
add edx, 100h
|
||
sub [esp+21Ch+var_204], 1
|
||
mov [esp+21Ch+var_208], ebp
|
||
jnz loc_4CF2E0
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
mov dword ptr [ebx+33B70h], 0
|
||
pop ebx
|
||
add esp, 20Ch
|
||
retn
|
||
CEncoder_FillDistancesPrices endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
CEncoder_FillAlignPrices proc near ; CODE XREF: CEncoder_SetStreams+56p
|
||
; CEncoder_CodeOneBlock+761p
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov ebp, ecx
|
||
push edi
|
||
xor esi, esi
|
||
lea ebx, [ebp+28D78h]
|
||
lea edi, [ebp+33B14h]
|
||
|
||
loc_4CF424: ; CODE XREF: CEncoder_FillAlignPrices+27j
|
||
push esi
|
||
mov ecx, ebx
|
||
call sub_4CD810
|
||
mov [edi], eax
|
||
add esi, 1
|
||
add edi, 4
|
||
cmp esi, 10h
|
||
jb short loc_4CF424
|
||
pop edi
|
||
pop esi
|
||
mov dword ptr [ebp+33B54h], 0
|
||
pop ebp
|
||
pop ebx
|
||
retn
|
||
CEncoder_FillAlignPrices endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CF810 proc near ; CODE XREF: sub_4D0250+3p
|
||
|
||
var_10 = dword ptr -10h
|
||
var_C = dword ptr -0Ch
|
||
var_4 = dword ptr -4
|
||
|
||
push 0FFFFFFFFh
|
||
push offset loc_4DA0C9
|
||
mov eax, dword ptr fs:[0]
|
||
push eax
|
||
push ecx
|
||
push ebx
|
||
push esi
|
||
mov eax, dword_544960
|
||
xor eax, esp
|
||
push eax
|
||
lea eax, [esp+1Ch+var_C]
|
||
mov dword ptr fs:[0], eax
|
||
mov esi, ecx
|
||
mov [esp+1Ch+var_10], esi
|
||
mov dword ptr [esi], offset NCompress_NLZMA_CEncoder_vftable
|
||
mov dword ptr [esi+4], offset NCompress_NLZMA_CEncoder_vftable_ICompressSetOutStream
|
||
mov dword ptr [esi+8], offset NCompress_NLZMA_CEncoder_vftable_ICompressSetCoderProperties
|
||
mov dword ptr [esi+0Ch], offset NCompress_NLZMA_CEncoder_vftable_ICompressWriteCoderProperties
|
||
mov eax, [esi+0A4h]
|
||
push eax ; lpAddress
|
||
mov [esp+20h+var_4], 1
|
||
call off_546E24
|
||
xor ebx, ebx
|
||
add esp, 4
|
||
cmp [esi+0D0h], ebx
|
||
mov [esi+0A4h], ebx
|
||
jnz short loc_4CF892
|
||
mov ecx, [esi+0B4h]
|
||
push ecx ; lpAddress
|
||
call off_546E24
|
||
add esp, 4
|
||
mov [esi+0B4h], ebx
|
||
|
||
loc_4CF892: ; CODE XREF: sub_4CF810+6Aj
|
||
mov eax, [esi+33B8Ch]
|
||
cmp eax, ebx
|
||
jz short loc_4CF8A4
|
||
mov edx, [eax]
|
||
push eax
|
||
mov eax, [edx+8]
|
||
call eax
|
||
|
||
loc_4CF8A4: ; CODE XREF: sub_4CF810+8Aj
|
||
lea ecx, [esi+32650h]
|
||
mov byte ptr [esp+1Ch+var_4], bl
|
||
call sub_4CD8F0
|
||
mov eax, [esi+40h]
|
||
cmp eax, ebx
|
||
mov [esp+1Ch+var_4], 0FFFFFFFFh
|
||
jz short loc_4CF8CF
|
||
push 8000h ; dwFreeType
|
||
push ebx ; dwSize
|
||
push eax ; lpAddress
|
||
call ds:VirtualFree
|
||
|
||
loc_4CF8CF: ; CODE XREF: sub_4CF810+B0j
|
||
mov [esi+40h], ebx
|
||
mov esi, [esi+54h]
|
||
cmp esi, ebx
|
||
jz short loc_4CF8E1
|
||
mov ecx, [esi]
|
||
mov edx, [ecx+8]
|
||
push esi
|
||
call edx
|
||
|
||
loc_4CF8E1: ; CODE XREF: sub_4CF810+C7j
|
||
mov ecx, [esp+1Ch+var_C]
|
||
mov dword ptr fs:[0], ecx
|
||
pop ecx
|
||
pop esi
|
||
pop ebx
|
||
add esp, 10h
|
||
retn
|
||
sub_4CF810 endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
; int __stdcall sub_4CF900(int, void *Buf1, int)
|
||
sub_4CF900 proc near ; CODE XREF: sub_4CFA20+5j
|
||
; ICompressSetCoderProperties_QueryInterface+5j ...
|
||
|
||
arg_0 = dword ptr 4
|
||
Buf1 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
push esi
|
||
mov esi, [esp+4+Buf1]
|
||
push offset dword_512730 ; Buf2
|
||
push esi ; Buf1
|
||
call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit
|
||
add esp, 8
|
||
test eax, eax
|
||
jz short loc_4CF94C
|
||
|
||
loc_4CF917: ; CODE XREF: sub_4CF900+5Cj
|
||
mov eax, [esp+4+arg_0]
|
||
test eax, eax
|
||
jz short loc_4CF936
|
||
mov edx, [esp+4+arg_8]
|
||
lea ecx, [eax+4]
|
||
mov [edx], ecx
|
||
mov ecx, [eax]
|
||
mov edx, [ecx+4]
|
||
push eax
|
||
call edx
|
||
xor eax, eax
|
||
pop esi
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF936: ; CODE XREF: sub_4CF900+1Dj
|
||
; sub_4CF900+76j ...
|
||
mov edx, [esp+4+arg_8]
|
||
xor ecx, ecx
|
||
mov [edx], ecx
|
||
mov ecx, [eax]
|
||
mov edx, [ecx+4]
|
||
push eax
|
||
call edx
|
||
xor eax, eax
|
||
pop esi
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF94C: ; CODE XREF: sub_4CF900+15j
|
||
push offset dword_5535A0 ; Buf2
|
||
push esi ; Buf1
|
||
call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit
|
||
add esp, 8
|
||
test eax, eax
|
||
jnz short loc_4CF917
|
||
push offset dword_5535B0 ; Buf2
|
||
push esi ; Buf1
|
||
call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit
|
||
add esp, 8
|
||
test eax, eax
|
||
jz short loc_4CF98F
|
||
mov eax, [esp+4+arg_0]
|
||
test eax, eax
|
||
jz short loc_4CF936
|
||
mov edx, [esp+4+arg_8]
|
||
lea ecx, [eax+8]
|
||
mov [edx], ecx
|
||
mov ecx, [eax]
|
||
mov edx, [ecx+4]
|
||
push eax
|
||
call edx
|
||
xor eax, eax
|
||
pop esi
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF98F: ; CODE XREF: sub_4CF900+6Ej
|
||
push offset dword_5535C0 ; Buf2
|
||
push esi ; Buf1
|
||
call unknown_libname_324 ; MFC 3.1/4.0/4.2/8.0 32bit
|
||
add esp, 8
|
||
test eax, eax
|
||
jz short loc_4CF9C0
|
||
mov eax, [esp+4+arg_0]
|
||
test eax, eax
|
||
jz short loc_4CF936
|
||
mov edx, [esp+4+arg_8]
|
||
lea ecx, [eax+0Ch]
|
||
mov [edx], ecx
|
||
mov ecx, [eax]
|
||
mov edx, [ecx+4]
|
||
push eax
|
||
call edx
|
||
xor eax, eax
|
||
pop esi
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CF9C0: ; CODE XREF: sub_4CF900+9Fj
|
||
mov eax, 80004002h
|
||
pop esi
|
||
retn 0Ch
|
||
sub_4CF900 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CF9D0 proc near ; CODE XREF: ICompressSetCoderProperties_AddRef+5j
|
||
; sub_4CFA10+5j ...
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
mov eax, [esp+arg_0]
|
||
add dword ptr [eax+24h], 1
|
||
mov eax, [eax+24h]
|
||
retn 4
|
||
sub_4CF9D0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CF9E0 proc near ; CODE XREF: sub_4CFA40+5j
|
||
; ICompressSetCoderProperties_Release+5j ...
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
mov ecx, [esp+arg_0]
|
||
add dword ptr [ecx+24h], 0FFFFFFFFh
|
||
mov eax, [ecx+24h]
|
||
jnz short locret_4CF9F8
|
||
mov eax, [ecx]
|
||
mov edx, [eax+10h]
|
||
push 1
|
||
call edx
|
||
xor eax, eax
|
||
|
||
locret_4CF9F8: ; CODE XREF: sub_4CF9E0+Bj
|
||
retn 4
|
||
sub_4CF9E0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
ICompressSetCoderProperties_AddRef proc near ; DATA XREF: .rdata:00517AD4o
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
sub [esp+arg_0], 8
|
||
jmp sub_4CF9D0
|
||
ICompressSetCoderProperties_AddRef endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFA10 proc near ; DATA XREF: .rdata:00517AC0o
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
sub [esp+arg_0], 0Ch
|
||
jmp sub_4CF9D0
|
||
sub_4CFA10 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFA20 proc near ; DATA XREF: .rdata:NCompress_NLZMA_CEncoder_vftable_ICompressSetOutStreamo
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
sub [esp+arg_0], 4
|
||
jmp sub_4CF900
|
||
sub_4CFA20 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
ICompressSetCoderProperties_QueryInterface proc near ; DATA XREF: .rdata:NCompress_NLZMA_CEncoder_vftable_ICompressSetCoderPropertieso
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
sub [esp+arg_0], 8
|
||
jmp sub_4CF900
|
||
ICompressSetCoderProperties_QueryInterface endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFA40 proc near ; DATA XREF: .rdata:00517AECo
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
sub [esp+arg_0], 4
|
||
jmp sub_4CF9E0
|
||
sub_4CFA40 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFA50 proc near ; DATA XREF: .rdata:NCompress_NLZMA_CEncoder_vftable_ICompressWriteCoderPropertieso
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
sub [esp+arg_0], 0Ch
|
||
jmp sub_4CF900
|
||
sub_4CFA50 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
ICompressSetCoderProperties_Release proc near ; DATA XREF: .rdata:00517AD8o
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
sub [esp+arg_0], 8
|
||
jmp sub_4CF9E0
|
||
ICompressSetCoderProperties_Release endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFA70 proc near ; DATA XREF: .rdata:00517AC4o
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
sub [esp+arg_0], 0Ch
|
||
jmp sub_4CF9E0
|
||
sub_4CFA70 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFA80 proc near ; DATA XREF: .rdata:00517AE8o
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
sub [esp+arg_0], 4
|
||
jmp sub_4CF9D0
|
||
sub_4CFA80 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFA90 proc near ; DATA XREF: .rdata:00517AF0o
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push esi
|
||
mov esi, [esp+4+arg_4]
|
||
test esi, esi
|
||
push edi
|
||
mov edi, [esp+8+arg_0]
|
||
jz short loc_4CFAA6
|
||
mov eax, [esi]
|
||
mov ecx, [eax+4]
|
||
push esi
|
||
call ecx
|
||
|
||
loc_4CFAA6: ; CODE XREF: sub_4CFA90+Cj
|
||
mov eax, [edi+50h]
|
||
test eax, eax
|
||
jz short loc_4CFAB5
|
||
mov edx, [eax]
|
||
push eax
|
||
mov eax, [edx+8]
|
||
call eax
|
||
|
||
loc_4CFAB5: ; CODE XREF: sub_4CFA90+1Bj
|
||
mov [edi+50h], esi
|
||
pop edi
|
||
xor eax, eax
|
||
pop esi
|
||
retn 8
|
||
sub_4CFA90 endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CFAC0 proc near ; CODE XREF: CEncoder_CodeOneBlock+42Ap
|
||
; CEncoder_CodeOneBlock+517p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
mov eax, [esp+arg_0]
|
||
push esi
|
||
mov esi, [eax+10h]
|
||
mov edx, esi
|
||
shr edx, 0Bh
|
||
imul edx, [ecx]
|
||
cmp [esp+4+arg_4], 0
|
||
jnz short loc_4CFAEC
|
||
mov [eax+10h], edx
|
||
mov edx, [ecx]
|
||
mov esi, 800h
|
||
sub esi, edx
|
||
shr esi, 5
|
||
add esi, edx
|
||
mov [ecx], esi
|
||
jmp short loc_4CFB03
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFAEC: ; CODE XREF: sub_4CFAC0+15j
|
||
add [eax+8], edx
|
||
adc dword ptr [eax+0Ch], 0
|
||
sub esi, edx
|
||
mov [eax+10h], esi
|
||
mov edx, [ecx]
|
||
mov esi, edx
|
||
shr esi, 5
|
||
sub edx, esi
|
||
mov [ecx], edx
|
||
|
||
loc_4CFB03: ; CODE XREF: sub_4CFAC0+2Aj
|
||
mov ecx, [eax+10h]
|
||
cmp ecx, 1000000h
|
||
pop esi
|
||
jnb short locret_4CFB1C
|
||
shl ecx, 8
|
||
mov [eax+10h], ecx
|
||
mov ecx, eax
|
||
call loc_4CF640
|
||
|
||
locret_4CFB1C: ; CODE XREF: sub_4CFAC0+4Dj
|
||
retn 8
|
||
sub_4CFAC0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFB20 proc near ; CODE XREF: sub_4D0020+52p
|
||
; sub_4D0020+E4p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
push edi
|
||
mov ebp, ecx
|
||
mov ebx, 1
|
||
mov edx, 3
|
||
|
||
loc_4CFB34: ; CODE XREF: sub_4CFB20+8Cj
|
||
mov edi, [esp+10h+arg_4]
|
||
sub edx, 1
|
||
mov ecx, edx
|
||
shr edi, cl
|
||
mov ecx, [esi+10h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [ebp+ebx*4+0]
|
||
and edi, 1
|
||
test edi, edi
|
||
mov [esp+10h+arg_0], edx
|
||
jnz short loc_4CFB70
|
||
mov [esi+10h], eax
|
||
mov eax, [ebp+ebx*4+0]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
shr ecx, 5
|
||
add ecx, eax
|
||
mov [ebp+ebx*4+0], ecx
|
||
jmp short loc_4CFB8B
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFB70: ; CODE XREF: sub_4CFB20+35j
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [ebp+ebx*4+0]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [ebp+ebx*4+0], eax
|
||
|
||
loc_4CFB8B: ; CODE XREF: sub_4CFB20+4Ej
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CFBA6
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
mov edx, [esp+10h+arg_0]
|
||
|
||
loc_4CFBA6: ; CODE XREF: sub_4CFB20+73j
|
||
add ebx, ebx
|
||
or ebx, edi
|
||
test edx, edx
|
||
jnz short loc_4CFB34
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn 8
|
||
sub_4CFB20 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFBC0 proc near ; CODE XREF: sub_4D0020+136p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
push edi
|
||
mov ebp, ecx
|
||
mov ebx, 1
|
||
mov edx, 8
|
||
|
||
loc_4CFBD4: ; CODE XREF: sub_4CFBC0+8Cj
|
||
mov edi, [esp+10h+arg_4]
|
||
sub edx, 1
|
||
mov ecx, edx
|
||
shr edi, cl
|
||
mov ecx, [esi+10h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [ebp+ebx*4+0]
|
||
and edi, 1
|
||
test edi, edi
|
||
mov [esp+10h+arg_0], edx
|
||
jnz short loc_4CFC10
|
||
mov [esi+10h], eax
|
||
mov eax, [ebp+ebx*4+0]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
shr ecx, 5
|
||
add ecx, eax
|
||
mov [ebp+ebx*4+0], ecx
|
||
jmp short loc_4CFC2B
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFC10: ; CODE XREF: sub_4CFBC0+35j
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [ebp+ebx*4+0]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [ebp+ebx*4+0], eax
|
||
|
||
loc_4CFC2B: ; CODE XREF: sub_4CFBC0+4Ej
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CFC46
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
mov edx, [esp+10h+arg_0]
|
||
|
||
loc_4CFC46: ; CODE XREF: sub_4CFBC0+73j
|
||
add ebx, ebx
|
||
or ebx, edi
|
||
test edx, edx
|
||
jnz short loc_4CFBD4
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn 8
|
||
sub_4CFBC0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFC60 proc near ; CODE XREF: sub_4D0770+EDp
|
||
; CEncoder_CodeOneBlock+67Cp
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
push edi
|
||
mov ebp, ecx
|
||
mov ebx, 1
|
||
mov edx, 6
|
||
|
||
loc_4CFC74: ; CODE XREF: sub_4CFC60+8Cj
|
||
mov edi, [esp+10h+arg_4]
|
||
sub edx, 1
|
||
mov ecx, edx
|
||
shr edi, cl
|
||
mov ecx, [esi+10h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [ebp+ebx*4+0]
|
||
and edi, 1
|
||
test edi, edi
|
||
mov [esp+10h+arg_0], edx
|
||
jnz short loc_4CFCB0
|
||
mov [esi+10h], eax
|
||
mov eax, [ebp+ebx*4+0]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
shr ecx, 5
|
||
add ecx, eax
|
||
mov [ebp+ebx*4+0], ecx
|
||
jmp short loc_4CFCCB
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFCB0: ; CODE XREF: sub_4CFC60+35j
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [ebp+ebx*4+0]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [ebp+ebx*4+0], eax
|
||
|
||
loc_4CFCCB: ; CODE XREF: sub_4CFC60+4Ej
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CFCE6
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
mov edx, [esp+10h+arg_0]
|
||
|
||
loc_4CFCE6: ; CODE XREF: sub_4CFC60+73j
|
||
add ebx, ebx
|
||
or ebx, edi
|
||
test edx, edx
|
||
jnz short loc_4CFC74
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn 8
|
||
sub_4CFC60 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFD00 proc near ; CODE XREF: sub_4D0770+109p
|
||
; CEncoder_CodeOneBlock+6D5p
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
push edi
|
||
mov ebp, ecx
|
||
mov edi, 1
|
||
mov [esp+10h+arg_0], 4
|
||
|
||
loc_4CFD17: ; CODE XREF: sub_4CFD00+87j
|
||
mov ecx, [esi+10h]
|
||
mov ebx, [esp+10h+arg_4]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [ebp+edi*4+0]
|
||
and ebx, 1
|
||
test ebx, ebx
|
||
jnz short loc_4CFD48
|
||
mov [esi+10h], eax
|
||
mov eax, [ebp+edi*4+0]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
shr ecx, 5
|
||
add ecx, eax
|
||
mov [ebp+edi*4+0], ecx
|
||
jmp short loc_4CFD63
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFD48: ; CODE XREF: sub_4CFD00+2Dj
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [ebp+edi*4+0]
|
||
mov edx, eax
|
||
shr edx, 5
|
||
sub eax, edx
|
||
mov [ebp+edi*4+0], eax
|
||
|
||
loc_4CFD63: ; CODE XREF: sub_4CFD00+46j
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CFD7A
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4CFD7A: ; CODE XREF: sub_4CFD00+6Bj
|
||
shr [esp+10h+arg_4], 1
|
||
add edi, edi
|
||
or edi, ebx
|
||
sub [esp+10h+arg_0], 1
|
||
jnz short loc_4CFD17
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn 8
|
||
sub_4CFD00 endp
|
||
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFD90 proc near ; CODE XREF: CEncoder_CodeOneBlock+6AFp
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
arg_C = dword ptr 10h
|
||
|
||
mov eax, [esp+arg_8]
|
||
test eax, eax
|
||
push edi
|
||
mov edi, 1
|
||
jle loc_4CFE26
|
||
push ebx
|
||
push ebp
|
||
mov ebp, [esp+0Ch+arg_0]
|
||
push esi
|
||
mov esi, [esp+10h+arg_4]
|
||
mov [esp+10h+arg_8], eax
|
||
|
||
loc_4CFDB1: ; CODE XREF: sub_4CFD90+91j
|
||
mov ecx, [esi+10h]
|
||
mov ebx, [esp+10h+arg_C]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [ebp+edi*4+0]
|
||
and ebx, 1
|
||
test ebx, ebx
|
||
jnz short loc_4CFDE2
|
||
mov [esi+10h], eax
|
||
mov eax, [ebp+edi*4+0]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
shr ecx, 5
|
||
add ecx, eax
|
||
mov [ebp+edi*4+0], ecx
|
||
jmp short loc_4CFDFD
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFDE2: ; CODE XREF: sub_4CFD90+37j
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [ebp+edi*4+0]
|
||
mov edx, eax
|
||
shr edx, 5
|
||
sub eax, edx
|
||
mov [ebp+edi*4+0], eax
|
||
|
||
loc_4CFDFD: ; CODE XREF: sub_4CFD90+50j
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CFE14
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4CFE14: ; CODE XREF: sub_4CFD90+75j
|
||
shr [esp+10h+arg_C], 1
|
||
add edi, edi
|
||
or edi, ebx
|
||
sub [esp+10h+arg_8], 1
|
||
jnz short loc_4CFDB1
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
|
||
loc_4CFE26: ; CODE XREF: sub_4CFD90+Cj
|
||
pop edi
|
||
retn
|
||
sub_4CFD90 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
|
||
sub_4CFE30 proc near ; CODE XREF: CEncoder_CodeOneBlock+190p
|
||
; CEncoder_CodeOneBlock+2CCp
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = byte ptr 8
|
||
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+0Ch+arg_0]
|
||
push edi
|
||
mov ebx, ecx
|
||
mov ebp, 1
|
||
mov edx, 8
|
||
|
||
loc_4CFE44: ; CODE XREF: sub_4CFE30+88j
|
||
movzx edi, [esp+10h+arg_4]
|
||
sub edx, 1
|
||
mov cl, dl
|
||
shr edi, cl
|
||
mov ecx, [esi+10h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [ebx+ebp*4]
|
||
and edi, 1
|
||
test edi, edi
|
||
mov [esp+10h+arg_0], edx
|
||
jnz short loc_4CFE7E
|
||
mov [esi+10h], eax
|
||
mov eax, [ebx+ebp*4]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
shr ecx, 5
|
||
add ecx, eax
|
||
mov [ebx+ebp*4], ecx
|
||
jmp short loc_4CFE97
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFE7E: ; CODE XREF: sub_4CFE30+35j
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [ebx+ebp*4]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [ebx+ebp*4], eax
|
||
|
||
loc_4CFE97: ; CODE XREF: sub_4CFE30+4Cj
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CFEB2
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
mov edx, [esp+10h+arg_0]
|
||
|
||
loc_4CFEB2: ; CODE XREF: sub_4CFE30+6Fj
|
||
add ebp, ebp
|
||
or ebp, edi
|
||
test edx, edx
|
||
jnz short loc_4CFE44
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
retn 8
|
||
sub_4CFE30 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4CFED0 proc near ; CODE XREF: CEncoder_CodeOneBlock+300p
|
||
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = byte ptr 8
|
||
arg_8 = byte ptr 0Ch
|
||
|
||
push ecx
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
mov esi, [esp+10h+arg_0]
|
||
push edi
|
||
mov [esp+14h+var_4], ecx
|
||
mov ebx, 1
|
||
mov edx, 8
|
||
jmp short loc_4CFEF0
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4CFEF0: ; CODE XREF: sub_4CFED0+17j
|
||
; sub_4CFED0+ADj
|
||
movzx ebp, [esp+14h+arg_4]
|
||
movzx edi, [esp+14h+arg_8]
|
||
sub edx, 1
|
||
movzx ecx, dl
|
||
shr ebp, cl
|
||
shr edi, cl
|
||
mov ecx, [esp+14h+var_4]
|
||
mov [esp+14h+arg_0], edx
|
||
mov edx, [esi+10h]
|
||
and ebp, 1
|
||
lea eax, [ebp+1]
|
||
shl eax, 8
|
||
add eax, ebx
|
||
lea ecx, [ecx+eax*4]
|
||
mov eax, edx
|
||
shr eax, 0Bh
|
||
imul eax, [ecx]
|
||
and edi, 1
|
||
test edi, edi
|
||
jnz short loc_4CFF41
|
||
mov [esi+10h], eax
|
||
mov eax, [ecx]
|
||
mov edx, 800h
|
||
sub edx, eax
|
||
shr edx, 5
|
||
add edx, eax
|
||
mov [ecx], edx
|
||
jmp short loc_4CFF58
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFF41: ; CODE XREF: sub_4CFED0+5Aj
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub edx, eax
|
||
mov [esi+10h], edx
|
||
mov eax, [ecx]
|
||
mov edx, eax
|
||
shr edx, 5
|
||
sub eax, edx
|
||
mov [ecx], eax
|
||
|
||
loc_4CFF58: ; CODE XREF: sub_4CFED0+6Fj
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4CFF6F
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4CFF6F: ; CODE XREF: sub_4CFED0+90j
|
||
mov edx, [esp+14h+arg_0]
|
||
add ebx, ebx
|
||
or ebx, edi
|
||
cmp ebp, edi
|
||
jnz short loc_4CFF8B
|
||
test edx, edx
|
||
jnz loc_4CFEF0
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
pop ecx
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFF8B: ; CODE XREF: sub_4CFED0+A9j
|
||
test edx, edx
|
||
jz loc_4D0012
|
||
|
||
loc_4CFF93: ; CODE XREF: sub_4CFED0+140j
|
||
movzx edi, [esp+14h+arg_8]
|
||
mov ebp, [esp+14h+var_4]
|
||
sub edx, 1
|
||
mov cl, dl
|
||
shr edi, cl
|
||
mov ecx, [esi+10h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [ebp+ebx*4+0]
|
||
and edi, 1
|
||
test edi, edi
|
||
mov [esp+14h+arg_0], edx
|
||
jnz short loc_4CFFD4
|
||
mov [esi+10h], eax
|
||
mov eax, [ebp+ebx*4+0]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
shr ecx, 5
|
||
add ecx, eax
|
||
mov [ebp+ebx*4+0], ecx
|
||
jmp short loc_4CFFEF
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4CFFD4: ; CODE XREF: sub_4CFED0+E9j
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [ebp+ebx*4+0]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [ebp+ebx*4+0], eax
|
||
|
||
loc_4CFFEF: ; CODE XREF: sub_4CFED0+102j
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D000A
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
mov edx, [esp+14h+arg_0]
|
||
|
||
loc_4D000A: ; CODE XREF: sub_4CFED0+127j
|
||
add ebx, ebx
|
||
or ebx, edi
|
||
test edx, edx
|
||
jnz short loc_4CFF93
|
||
|
||
loc_4D0012: ; CODE XREF: sub_4CFED0+BDj
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
pop ecx
|
||
retn 0Ch
|
||
sub_4CFED0 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4D0020 proc near ; CODE XREF: sub_4D0770+C6p
|
||
; CEncoder_CodeOneBlock+56Dp ...
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
push ebp
|
||
mov ebp, [esp+4+arg_4]
|
||
cmp ebp, 8
|
||
push esi
|
||
mov esi, [esp+8+arg_0]
|
||
push edi
|
||
mov edi, ecx
|
||
jnb short loc_4D007D
|
||
mov eax, [esi+10h]
|
||
shr eax, 0Bh
|
||
imul eax, [edi]
|
||
mov [esi+10h], eax
|
||
mov eax, [edi]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
|
||
loc_4D0047: ; DATA XREF: .rdata:0050C3BCo
|
||
shr ecx, 5
|
||
add ecx, eax
|
||
mov [edi], ecx
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0065
|
||
shl eax, 8
|
||
|
||
loc_4D005B: ; DATA XREF: .rdata:005064B0o
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0065: ; CODE XREF: sub_4D0020+36j
|
||
mov edx, [esp+0Ch+arg_8]
|
||
push ebp
|
||
shl edx, 5
|
||
push esi
|
||
lea ecx, [edx+edi+8]
|
||
call sub_4CFB20
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D007D: ; CODE XREF: sub_4D0020+10j
|
||
mov ecx, [esi+10h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [edi]
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [edi]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [edi], eax
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D00B6
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D00B6: ; CODE XREF: sub_4D0020+87j
|
||
cmp ebp, 10h
|
||
jnb short loc_4D010F
|
||
mov edx, [esi+10h]
|
||
shr edx, 0Bh
|
||
imul edx, [edi+4]
|
||
mov [esi+10h], edx
|
||
mov eax, [edi+4]
|
||
mov ecx, 800h
|
||
sub ecx, eax
|
||
shr ecx, 5
|
||
add ecx, eax
|
||
mov [edi+4], ecx
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D00F1
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D00F1: ; CODE XREF: sub_4D0020+C2j
|
||
mov edx, [esp+0Ch+arg_8]
|
||
add ebp, 0FFFFFFF8h
|
||
push ebp
|
||
shl edx, 5
|
||
push esi
|
||
lea ecx, [edx+edi+208h]
|
||
call sub_4CFB20
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D010F: ; CODE XREF: sub_4D0020+99j
|
||
mov ecx, [esi+10h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [edi+4]
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [edi+4]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [edi+4], eax
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D014B
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D014B: ; CODE XREF: sub_4D0020+11Cj
|
||
add ebp, 0FFFFFFF0h
|
||
push ebp
|
||
push esi
|
||
lea ecx, [edi+408h]
|
||
call sub_4CFBC0
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
retn 0Ch
|
||
sub_4D0020 endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
NCompress_NLZMA_CEncoder_CEncoder proc near ; CODE XREF: Compress_lzma_internal+149p
|
||
mov eax, ecx
|
||
mov dword ptr [eax+4], offset ICompressSetOutStream_vftable
|
||
mov dword ptr [eax+8], offset ICompressSetCoderProperties_vftable
|
||
mov dword ptr [eax+0Ch], offset ICompressWriteCoderProperties_vftable
|
||
xor ecx, ecx
|
||
mov [eax+24h], ecx
|
||
mov dword ptr [eax], offset NCompress_NLZMA_CEncoder_vftable
|
||
mov dword ptr [eax+4], offset NCompress_NLZMA_CEncoder_vftable_ICompressSetOutStream
|
||
mov dword ptr [eax+8], offset NCompress_NLZMA_CEncoder_vftable_ICompressSetCoderProperties
|
||
mov dword ptr [eax+0Ch], offset NCompress_NLZMA_CEncoder_vftable_ICompressWriteCoderProperties
|
||
mov [eax+40h], ecx
|
||
mov [eax+44h], ecx
|
||
mov [eax+54h], ecx
|
||
mov [eax+60h], ecx
|
||
mov [eax+32650h], ecx
|
||
mov dword ptr [eax+32EF8h], 20h
|
||
mov dword ptr [eax+33B58h], 2Ch
|
||
mov dword ptr [eax+33B5Ch], 2
|
||
mov [eax+33B64h], ecx
|
||
mov dword ptr [eax+33B6Ch], 00400000h
|
||
mov edx, 3
|
||
mov [eax+33B60h], edx
|
||
mov [eax+33B68h], edx
|
||
mov [eax+33B8Ch], ecx
|
||
mov [eax+33B90h], ecx
|
||
mov [eax+33B94h], cl
|
||
mov [eax+0B4h], ecx
|
||
mov [eax+0A4h], ecx
|
||
mov dword ptr [eax+0B0h], 20h
|
||
mov dword ptr [eax+0D4h], 1
|
||
mov dword ptr [eax+0CCh], 4
|
||
mov [eax+0D0h], ecx
|
||
mov [eax+0D8h], ecx
|
||
mov [eax+32EF4h], cl
|
||
retn
|
||
NCompress_NLZMA_CEncoder_CEncoder endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
; int __thiscall sub_4D0250(void *Memory, char)
|
||
sub_4D0250 proc near ; DATA XREF: .rdata:00517B0Co
|
||
|
||
arg_0 = byte ptr 4
|
||
|
||
push esi
|
||
mov esi, ecx
|
||
call sub_4CF810
|
||
test [esp+4+arg_0], 1
|
||
jz short loc_4D0268
|
||
push esi ; Memory
|
||
call j__free
|
||
add esp, 4
|
||
|
||
loc_4D0268: ; CODE XREF: sub_4D0250+Dj
|
||
mov eax, esi
|
||
pop esi
|
||
retn 4
|
||
sub_4D0250 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4D0270 proc near ; CODE XREF: CEncoder_SetStreams+14p
|
||
push esi
|
||
mov esi, ecx
|
||
mov eax, [esi+40h]
|
||
test eax, eax
|
||
push edi
|
||
mov edi, 100000h
|
||
jz short loc_4D0297
|
||
cmp [esi+50h], edi
|
||
jz short loc_4D02C5
|
||
test eax, eax
|
||
jz short loc_4D0297
|
||
push 8000h ; dwFreeType
|
||
push 0 ; dwSize
|
||
push eax ; lpAddress
|
||
call ds:VirtualFree
|
||
|
||
loc_4D0297: ; CODE XREF: sub_4D0270+Ej
|
||
; sub_4D0270+17j
|
||
push 4 ; flProtect
|
||
push 1000h ; flAllocationType
|
||
push edi ; dwSize
|
||
push 0 ; lpAddress
|
||
mov dword ptr [esi+40h], 0
|
||
mov [esi+50h], edi
|
||
call ds:VirtualAlloc
|
||
test eax, eax
|
||
mov [esi+40h], eax
|
||
setnz al
|
||
test al, al
|
||
jnz short loc_4D02C5
|
||
pop edi
|
||
mov eax, 8007000Eh
|
||
pop esi
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D02C5: ; CODE XREF: sub_4D0270+13j
|
||
; sub_4D0270+4Bj
|
||
mov eax, [esi+33B68h]
|
||
mov ecx, [esi+33B64h]
|
||
cmp dword ptr [esi+0D4h], 0
|
||
push ebx
|
||
push eax
|
||
push ecx
|
||
lea ecx, [esi+32650h]
|
||
setnz bl
|
||
call sub_4CD940
|
||
test al, al
|
||
jz short loc_4D034F
|
||
mov ecx, [esi+33B6Ch]
|
||
mov edx, 1000000h
|
||
cmp edx, ecx
|
||
sbb eax, eax
|
||
neg eax
|
||
push ebp
|
||
mov ebp, [esi+32EF8h]
|
||
mov [esi+0D8h], eax
|
||
mov eax, ebp
|
||
shr eax, 1
|
||
add eax, 10h
|
||
test bl, bl
|
||
jnz short loc_4D0318
|
||
shr eax, 1
|
||
|
||
loc_4D0318: ; CODE XREF: sub_4D0270+A4j
|
||
mov edx, [esi+33B90h]
|
||
test edx, edx
|
||
jz short loc_4D0324
|
||
mov eax, edx
|
||
|
||
loc_4D0324: ; CODE XREF: sub_4D0270+B0j
|
||
push offset off_546E20
|
||
push 111h
|
||
push ebp
|
||
push 1000h
|
||
push ecx
|
||
lea edi, [esi+84h]
|
||
push edi
|
||
mov [esi+0B0h], eax
|
||
call sub_4CBA60
|
||
add esp, 18h
|
||
test eax, eax
|
||
pop ebp
|
||
jnz short loc_4D0358
|
||
|
||
loc_4D034F: ; CODE XREF: sub_4D0270+7Bj
|
||
pop ebx
|
||
pop edi
|
||
mov eax, 8007000Eh
|
||
pop esi
|
||
retn
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0358: ; CODE XREF: sub_4D0270+DDj
|
||
mov [esi+80h], edi
|
||
add esi, 68h
|
||
push esi
|
||
push edi
|
||
call sub_4CCAA0
|
||
add esp, 8
|
||
pop ebx
|
||
pop edi
|
||
xor eax, eax
|
||
pop esi
|
||
retn
|
||
sub_4D0270 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
CEncoder_SetStreams proc near ; CODE XREF: CEncoder_CodeReal+4Ap
|
||
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
|
||
mov eax, [esp+arg_0]
|
||
push esi
|
||
mov esi, ecx
|
||
mov [esi+33B84h], eax
|
||
mov byte ptr [esi+33B80h], 0
|
||
call sub_4D0270
|
||
test eax, eax
|
||
jnz loc_4D0441
|
||
mov edx, [esp+4+arg_4]
|
||
mov ecx, [esi+4]
|
||
lea eax, [esi+4]
|
||
push edx
|
||
push eax
|
||
mov eax, [ecx+0Ch]
|
||
call eax
|
||
test eax, eax
|
||
jnz loc_4D0441
|
||
mov ecx, esi
|
||
call sub_4CDEA0
|
||
test eax, eax
|
||
jnz short loc_4D0441
|
||
cmp [esi+32EF4h], al
|
||
jnz short loc_4D03DB
|
||
mov ecx, esi
|
||
call CEncoder_FillDistancesPrices
|
||
mov ecx, esi
|
||
call CEncoder_FillAlignPrices
|
||
|
||
loc_4D03DB: ; CODE XREF: CEncoder_SetStreams+4Bj
|
||
mov ecx, [esi+32EF8h]
|
||
sub ecx, 1
|
||
mov [esi+2D9C0h], ecx
|
||
mov ecx, [esi+33B5Ch]
|
||
mov edx, 1
|
||
shl edx, cl
|
||
lea ecx, [esi+28DB8h]
|
||
push edx
|
||
call sub_4CF780
|
||
mov ecx, [esi+33B5Ch]
|
||
mov eax, [esi+32EF8h]
|
||
mov edx, 1
|
||
shl edx, cl
|
||
sub eax, 1
|
||
lea ecx, [esi+2DA04h]
|
||
mov [esi+3260Ch], eax
|
||
push edx
|
||
call sub_4CF780
|
||
mov dword ptr [esi+33B78h], 0
|
||
mov dword ptr [esi+33B7Ch], 0
|
||
xor eax, eax
|
||
|
||
loc_4D0441: ; CODE XREF: CEncoder_SetStreams+1Bj
|
||
; CEncoder_SetStreams+34j ...
|
||
pop esi
|
||
retn 10h
|
||
CEncoder_SetStreams endp
|
||
|
||
;Compress_lzma_internal proc near ; CODE XREF: Compress_lzma+34p
|
||
_starcraft_compress_lzma proc near ; CODE XREF: Compress_lzma+34p
|
||
; sub_4D0450
|
||
|
||
var_58 = dword ptr -58h
|
||
var_54 = dword ptr -54h
|
||
var_50 = dword ptr -50h
|
||
var_4C = dword ptr -4Ch
|
||
var_48 = dword ptr -48h
|
||
var_44 = dword ptr -44h
|
||
var_40 = dword ptr -40h
|
||
var_3C = word ptr -3Ch
|
||
var_34 = dword ptr -34h
|
||
var_2C = word ptr -2Ch
|
||
var_24 = dword ptr -24h
|
||
var_1C = dword ptr -1Ch
|
||
var_14 = dword ptr -14h
|
||
var_C = dword ptr -0Ch
|
||
var_4 = dword ptr -4
|
||
pbInBuffer = dword ptr 4
|
||
cbInBuffer = dword ptr 8
|
||
pcbInBuffer = dword ptr 0Ch
|
||
pbOutBuffer = dword ptr 10h
|
||
cbOutBuffer = dword ptr 14h
|
||
dummy = dword ptr 18h
|
||
pcbOutBuffer = dword ptr 1Ch
|
||
pfnAllocateMemory= dword ptr 20h
|
||
pfnFreeMemory = dword ptr 24h
|
||
pfnGiveData = dword ptr 28h
|
||
|
||
push 0FFFFFFFFh
|
||
push offset loc_4DA0FB
|
||
mov eax, dword ptr fs:[0]
|
||
push eax
|
||
sub esp, 4Ch
|
||
push ebx
|
||
push ebp
|
||
push esi
|
||
push edi
|
||
mov eax, dword_544960
|
||
xor eax, esp
|
||
push eax
|
||
lea eax, [esp+6Ch+var_C]
|
||
mov dword ptr fs:[0], eax
|
||
mov eax, dword_553598
|
||
xor ebx, ebx
|
||
cmp eax, ebx
|
||
jnz short loc_4D04A1
|
||
push 0Ch ; Size
|
||
call _operator_new ; operator new(uint)
|
||
add esp, 4
|
||
cmp eax, ebx
|
||
jz short loc_4D049A
|
||
mov [eax], ebx
|
||
mov [eax+4], ebx
|
||
mov [eax+8], ebx
|
||
jmp short loc_4D049C
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D049A: ; CODE XREF: Compress_lzma_internal+3Ej
|
||
xor eax, eax
|
||
|
||
loc_4D049C: ; CODE XREF: Compress_lzma_internal+48j
|
||
mov dword ptr dword_553598, eax
|
||
|
||
loc_4D04A1: ; CODE XREF: Compress_lzma_internal+30j
|
||
cmp [eax], ebx
|
||
jnz short loc_4D04B3
|
||
mov ecx, [esp+6Ch+pfnAllocateMemory]
|
||
mov [eax], ecx
|
||
mov eax, dword_553598
|
||
|
||
loc_4D04B3: ; CODE XREF: Compress_lzma_internal+53j
|
||
cmp eax, ebx
|
||
jnz short loc_4D04D6
|
||
push 0Ch ; Size
|
||
call _operator_new ; operator new(uint)
|
||
add esp, 4
|
||
cmp eax, ebx
|
||
jz short loc_4D04CF
|
||
mov [eax], ebx
|
||
mov [eax+4], ebx
|
||
mov [eax+8], ebx
|
||
jmp short loc_4D04D1
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D04CF: ; CODE XREF: Compress_lzma_internal+73j
|
||
xor eax, eax
|
||
|
||
loc_4D04D1: ; CODE XREF: Compress_lzma_internal+7Dj
|
||
mov dword_553598, eax
|
||
|
||
loc_4D04D6: ; CODE XREF: Compress_lzma_internal+65j
|
||
cmp [eax+4], ebx
|
||
jnz short loc_4D04EA
|
||
mov edx, [esp+6Ch+pfnFreeMemory]
|
||
mov [eax+4], edx
|
||
mov eax, dword_553598
|
||
|
||
loc_4D04EA: ; CODE XREF: Compress_lzma_internal+89j
|
||
cmp [eax+8], ebx
|
||
jnz short loc_4D04F9
|
||
mov ecx, [esp+6Ch+pfnGiveData]
|
||
mov [eax+8], ecx
|
||
|
||
loc_4D04F9: ; CODE XREF: Compress_lzma_internal+9Dj
|
||
mov edx, [esp+6Ch+pcbOutBuffer]
|
||
mov ebp, [esp+6Ch+pcbInBuffer]
|
||
cmp ebp, ebx
|
||
mov esi, [esp+6Ch+cbInBuffer]
|
||
mov [edx], ebx
|
||
mov edx, 1
|
||
mov eax, esi
|
||
mov ecx, ebp
|
||
ja short loc_4D0520
|
||
cmp esi, ebx
|
||
jbe short loc_4D053A
|
||
jmp short loc_4D0520
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4D0520: ; CODE XREF: Compress_lzma_internal+C5j
|
||
; Compress_lzma_internal+CBj ...
|
||
shrd eax, ecx, 1
|
||
add edx, edx
|
||
shr ecx, 1
|
||
cmp edx, 2000000h
|
||
ja short loc_4D053A
|
||
cmp ecx, ebx
|
||
ja short loc_4D0520
|
||
jb short loc_4D053A
|
||
cmp eax, ebx
|
||
ja short loc_4D0520
|
||
|
||
loc_4D053A: ; CODE XREF: Compress_lzma_internal+C9j
|
||
; Compress_lzma_internal+DEj ...
|
||
mov eax, 13h
|
||
push 33B98h ; Size
|
||
mov [esp+70h+var_48], 470h
|
||
mov [esp+70h+var_44], 400h
|
||
mov [esp+70h+var_40], 450h
|
||
mov [esp+70h+var_3C], ax
|
||
mov [esp+70h+var_2C], ax
|
||
mov word ptr [esp+70h+var_1C], ax
|
||
mov [esp+70h+var_34], 2
|
||
mov [esp+70h+var_24], edx
|
||
mov [esp+70h+var_14], 40h
|
||
mov [esp+70h+var_58], ebx
|
||
call _operator_new ; operator new(uint)
|
||
add esp, 4
|
||
mov [esp+6Ch+var_4C], eax
|
||
cmp eax, ebx
|
||
mov [esp+6Ch+var_4], ebx
|
||
jz short loc_4D05A4
|
||
mov ecx, eax
|
||
call NCompress_NLZMA_CEncoder_CEncoder
|
||
mov [esp+6Ch+var_54], eax
|
||
jmp short loc_4D05AA
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D05A4: ; CODE XREF: Compress_lzma_internal+145j
|
||
mov [esp+6Ch+var_54], ebx
|
||
mov eax, ebx
|
||
|
||
loc_4D05AA: ; CODE XREF: Compress_lzma_internal+152j
|
||
or edi, 0FFFFFFFFh
|
||
cmp eax, ebx
|
||
mov [esp+6Ch+var_4], edi
|
||
jz short loc_4D05D1
|
||
mov ecx, [eax+8]
|
||
push 3
|
||
lea edx, [esp+70h+var_3C]
|
||
push edx
|
||
add eax, 8
|
||
lea edx, [esp+74h+var_48]
|
||
push edx
|
||
push eax
|
||
mov eax, [ecx+0Ch]
|
||
call eax ; ICompressSetCodeProperties::SetCoderProperties
|
||
test eax, eax
|
||
jz short loc_4D05D5
|
||
|
||
loc_4D05D1: ; CODE XREF: Compress_lzma_internal+163j
|
||
mov [esp+6Ch+var_58], edi
|
||
|
||
loc_4D05D5: ; CODE XREF: Compress_lzma_internal+17Fj
|
||
push 28h ; Size
|
||
call _operator_new ; operator new(uint)
|
||
add esp, 4
|
||
cmp eax, ebx
|
||
jz short loc_4D060E
|
||
mov ecx, [esp+6Ch+pbInBuffer]
|
||
mov [eax+4], ebx
|
||
add dword ptr [eax+4], 1
|
||
mov dword ptr [eax], offset off_517A90
|
||
mov [eax+8], ecx
|
||
mov [eax+10h], esi
|
||
mov [eax+14h], ebp
|
||
mov [eax+18h], ebx
|
||
mov [eax+1Ch], ebx
|
||
mov [eax+20h], bl
|
||
mov edi, eax ; EDI = pInStreamMemory
|
||
mov [esp+6Ch+var_50], eax
|
||
jmp short loc_4D0614
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D060E: ; CODE XREF: Compress_lzma_internal+191j
|
||
xor edi, edi
|
||
mov [esp+6Ch+var_50], edi
|
||
|
||
loc_4D0614: ; CODE XREF: Compress_lzma_internal+1BCj
|
||
push 28h ; Size
|
||
call _operator_new ; operator new(uint)
|
||
add esp, 4
|
||
cmp eax, ebx
|
||
jz short loc_4D0657
|
||
mov edx, [esp+6Ch+pbOutBuffer]
|
||
mov ecx, [esp+6Ch+cbOutBuffer]
|
||
mov [eax+4], ebx
|
||
add dword ptr [eax+4], 1
|
||
mov [eax+8], edx
|
||
mov edx, [esp+6Ch+dummy]
|
||
mov dword ptr [eax], offset off_517AA4
|
||
mov [eax+10h], ecx
|
||
mov [eax+14h], edx
|
||
mov [eax+18h], ebx
|
||
mov [eax+1Ch], ebx
|
||
mov [eax+20h], bl
|
||
mov esi, eax ; ESI = pOutStreamMemory
|
||
jmp short loc_4D0659
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0657: ; CODE XREF: Compress_lzma_internal+1D0j
|
||
xor esi, esi
|
||
|
||
loc_4D0659: ; CODE XREF: Compress_lzma_internal+205j
|
||
cmp edi, ebx
|
||
jz short loc_4D0661
|
||
cmp esi, ebx
|
||
jnz short loc_4D0669
|
||
|
||
loc_4D0661: ; CODE XREF: Compress_lzma_internal+20Bj
|
||
mov [esp+6Ch+var_58], 0FFFFFFFFh
|
||
|
||
loc_4D0669: ; CODE XREF: Compress_lzma_internal+20Fj
|
||
mov eax, [esi] ; EAX = pOutStreamMemory->vftable
|
||
mov ecx, [eax+10h] ; ECX =
|
||
push ebx
|
||
mov edi, 1
|
||
push edi
|
||
push ebx
|
||
push esi
|
||
call ecx
|
||
test eax, eax
|
||
jz short loc_4D0681
|
||
mov [esp+6Ch+var_58], edi
|
||
|
||
loc_4D0681: ; CODE XREF: Compress_lzma_internal+22Bj
|
||
mov eax, [esp+6Ch+var_54]
|
||
mov edx, [eax+0Ch]
|
||
add eax, 0Ch
|
||
push esi
|
||
push eax
|
||
mov eax, [edx+0Ch]
|
||
call eax
|
||
test eax, eax
|
||
jz short loc_4D069A
|
||
mov [esp+6Ch+var_58], edi
|
||
|
||
loc_4D069A: ; CODE XREF: Compress_lzma_internal+244j
|
||
xor edi, edi
|
||
jmp short loc_4D06A4
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4D06A0: ; CODE XREF: Compress_lzma_internal+27Fj
|
||
mov ebp, [esp+6Ch+pcbInBuffer]
|
||
|
||
loc_4D06A4: ; CODE XREF: Compress_lzma_internal+24Cj
|
||
mov eax, [esp+6Ch+cbInBuffer]
|
||
push ebx
|
||
push 1
|
||
mov edx, ebp
|
||
mov ecx, edi
|
||
call __allshr ; Microsoft VisualC 2-8/net runtime
|
||
push eax
|
||
mov eax, [esi]
|
||
mov ecx, [eax+10h]
|
||
push esi
|
||
call ecx
|
||
test eax, eax
|
||
jz short loc_4D06C9
|
||
mov [esp+6Ch+var_58], 1
|
||
|
||
loc_4D06C9: ; CODE XREF: Compress_lzma_internal+26Fj
|
||
add edi, 8
|
||
cmp edi, 40h
|
||
jl short loc_4D06A0
|
||
mov ebp, [esp+6Ch+var_54]
|
||
xor edi, edi
|
||
cmp [esp+6Ch+var_58], ebx
|
||
jnz short loc_4D0723
|
||
mov eax, [esp+6Ch+var_50]
|
||
mov edx, [ebp+0]
|
||
mov ecx, [edx+0Ch]
|
||
push ebx
|
||
push ebx
|
||
push ebx
|
||
push esi
|
||
push eax
|
||
push ebp
|
||
call ecx
|
||
mov ecx, [esi+18h]
|
||
mov edi, eax
|
||
mov eax, [esi+1Ch]
|
||
cmp eax, ebx
|
||
ja short loc_4D0700
|
||
cmp ecx, 0FFFFFFFFh
|
||
jbe short loc_4D0709
|
||
|
||
loc_4D0700: ; CODE XREF: Compress_lzma_internal+2A9j
|
||
or ecx, 0FFFFFFFFh
|
||
mov [esp+6Ch+pcbInBuffer], ebx
|
||
jmp short loc_4D070D
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0709: ; CODE XREF: Compress_lzma_internal+2AEj
|
||
mov [esp+6Ch+pcbInBuffer], eax
|
||
|
||
loc_4D070D: ; CODE XREF: Compress_lzma_internal+2B7j
|
||
mov edx, [esp+6Ch+pcbOutBuffer]
|
||
mov [edx], ecx
|
||
cmp [esi+20h], bl
|
||
jz short loc_4D0723
|
||
mov [esp+6Ch+var_58], 1
|
||
|
||
loc_4D0723: ; CODE XREF: Compress_lzma_internal+28Bj
|
||
; Compress_lzma_internal+2C9j
|
||
mov eax, [esp+6Ch+var_50]
|
||
cmp eax, ebx
|
||
jz short loc_4D0733
|
||
mov ecx, [eax]
|
||
mov edx, [ecx+8]
|
||
push eax
|
||
call edx
|
||
|
||
loc_4D0733: ; CODE XREF: Compress_lzma_internal+2D9j
|
||
mov eax, [esi]
|
||
mov ecx, [eax+8]
|
||
push esi
|
||
call ecx
|
||
mov edx, [ebp+0]
|
||
mov eax, [edx+10h]
|
||
push 1
|
||
mov ecx, ebp
|
||
call eax
|
||
mov eax, [esp+6Ch+var_58]
|
||
cmp eax, ebx
|
||
jnz short loc_4D0755
|
||
neg edi
|
||
sbb edi, edi
|
||
mov eax, edi
|
||
|
||
loc_4D0755: ; CODE XREF: Compress_lzma_internal+2FDj
|
||
mov ecx, [esp+6Ch+var_C]
|
||
mov dword ptr fs:[0], ecx
|
||
pop ecx
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
add esp, 58h
|
||
retn
|
||
_starcraft_compress_lzma endp
|
||
;Compress_lzma_internal endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
Compress_lzma proc near ; DATA XREF: .rdata:00509684o
|
||
|
||
pbOutBuffer = dword ptr 4
|
||
pcbOutBuffer = dword ptr 8
|
||
pbInBuffer = dword ptr 0Ch
|
||
cbInBuffer = dword ptr 10h
|
||
|
||
push esi
|
||
push edi
|
||
; call sub_47F198
|
||
mov esi, [esp+8+pcbOutBuffer] ; ESI = pcbOutBuffer
|
||
mov edi, [esp+8+cbInBuffer] ; EDI = cbInBuffer
|
||
; push offset GiveDataToCompress
|
||
; push offset FreeMemory_47F3AB
|
||
; push offset AllocateMemory_47F396
|
||
push esi ; pcbOutBuffer
|
||
push 0
|
||
mov [eax+493E0h], eax
|
||
push dword ptr [esi] ; cbOutBuffer
|
||
push [esp+20h+pbOutBuffer] ; pbOutBuffer
|
||
push 0
|
||
push edi ; cbInBuffer
|
||
push [esp+2Ch+pbInBuffer] ; pbInBuffer
|
||
; call Compress_lzma_internal
|
||
add esp, 28h
|
||
sub eax, 0
|
||
jz short loc_47F401
|
||
mov [esi], edi
|
||
dec eax
|
||
|
||
loc_47F401: ; CODE XREF: Compress_lzma+3Fj
|
||
pop edi
|
||
pop esi
|
||
retn
|
||
Compress_lzma endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
sub_4D0770 proc near ; CODE XREF: CEncoder_Flush+1Ap
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push edi
|
||
mov edi, ecx
|
||
cmp byte ptr [edi+33B94h], 0
|
||
jz loc_4D0881
|
||
movzx eax, byte ptr [edi+10h]
|
||
mov ecx, [edi+38h]
|
||
shl eax, 4
|
||
push ebx
|
||
mov ebx, [esp+8+arg_0]
|
||
add eax, ebx
|
||
lea edx, [edi+eax*4+280F0h]
|
||
push ebp
|
||
push esi
|
||
lea esi, [edi+28h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [edx]
|
||
add [esi+8], eax
|
||
adc dword ptr [esi+0Ch], 0
|
||
sub ecx, eax
|
||
mov [esi+10h], ecx
|
||
mov eax, [edx]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [edx], eax
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D07D3
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D07D3: ; CODE XREF: sub_4D0770+54j
|
||
movzx edx, byte ptr [edi+10h]
|
||
mov ecx, [esi+10h]
|
||
lea eax, [edi+edx*4+283F0h]
|
||
shr ecx, 0Bh
|
||
imul ecx, [eax]
|
||
mov [esi+10h], ecx
|
||
mov ecx, [eax]
|
||
mov edx, 800h
|
||
sub edx, ecx
|
||
shr edx, 5
|
||
add edx, ecx
|
||
mov [eax], edx
|
||
mov eax, [esi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0811
|
||
shl eax, 8
|
||
mov ecx, esi
|
||
mov [esi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0811: ; CODE XREF: sub_4D0770+92j
|
||
movzx eax, byte ptr [edi+10h]
|
||
mov cl, ds:kMatchNextStates[eax]
|
||
push ebx
|
||
mov [edi+10h], cl
|
||
cmp byte ptr [edi+32EF4h], 0
|
||
push 0
|
||
lea ebp, [edi+28DB8h]
|
||
push esi
|
||
mov ecx, ebp
|
||
setz byte ptr [esp+1Ch+arg_0]
|
||
call sub_4D0020
|
||
cmp byte ptr [esp+10h+arg_0], 0
|
||
jz short loc_4D0854
|
||
add dword ptr [ebp+ebx*4+4C0Ch], 0FFFFFFFFh
|
||
jnz short loc_4D0854
|
||
push ebx
|
||
mov ecx, ebp
|
||
call sub_4CF740
|
||
|
||
loc_4D0854: ; CODE XREF: sub_4D0770+D0j
|
||
; sub_4D0770+DAj
|
||
push 3Fh
|
||
push esi
|
||
lea ecx, [edi+287B0h]
|
||
call sub_4CFC60
|
||
push 1Ah
|
||
push 3FFFFFFh
|
||
mov ecx, esi
|
||
call sub_4CF6E0
|
||
push 0Fh
|
||
push esi
|
||
lea ecx, [edi+28D78h]
|
||
call sub_4CFD00
|
||
pop esi
|
||
pop ebp
|
||
pop ebx
|
||
|
||
loc_4D0881: ; CODE XREF: sub_4D0770+Aj
|
||
pop edi
|
||
retn 4
|
||
sub_4D0770 endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
CEncoder_Flush proc near ; CODE XREF: CEncoder_CodeOneBlock+BAp
|
||
; CEncoder_CodeOneBlock+1D0p ...
|
||
|
||
arg_0 = dword ptr 4
|
||
|
||
push esi
|
||
mov esi, ecx
|
||
mov eax, [esi+0ECh]
|
||
test eax, eax
|
||
jnz short loc_4D08E5
|
||
mov eax, [esi+33B60h]
|
||
and eax, [esp+4+arg_0]
|
||
push ebx
|
||
push edi
|
||
push eax
|
||
call sub_4D0770
|
||
lea ebx, [esi+28h]
|
||
mov edi, 5
|
||
|
||
loc_4D08B7: ; CODE XREF: CEncoder_Flush+31j
|
||
mov ecx, ebx
|
||
call loc_4CF640
|
||
sub edi, 1
|
||
jnz short loc_4D08B7
|
||
mov ecx, [esi+4Ch]
|
||
add esi, 40h
|
||
cmp ecx, [esi+4]
|
||
pop edi
|
||
pop ebx
|
||
jz short loc_4D08E3
|
||
|
||
loc_4D08D0: ; CODE XREF: CEncoder_Flush+51j
|
||
mov ecx, esi
|
||
call sub_4CF450
|
||
test eax, eax
|
||
jnz short loc_4D08E5
|
||
mov edx, [esi+0Ch]
|
||
cmp edx, [esi+4]
|
||
jnz short loc_4D08D0
|
||
|
||
loc_4D08E3: ; CODE XREF: CEncoder_Flush+3Ej
|
||
xor eax, eax
|
||
|
||
loc_4D08E5: ; CODE XREF: CEncoder_Flush+Bj
|
||
; CEncoder_Flush+49j
|
||
pop esi
|
||
retn 4
|
||
CEncoder_Flush endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
; =============== S U B R O U T I N E =======================================
|
||
|
||
CEncoder_CodeOneBlock proc near ; CODE XREF: CEncoder_CodeReal+B1p
|
||
; CEncoder_CodeReal+F5p
|
||
|
||
var_20 = byte ptr -20h
|
||
var_1C = dword ptr -1Ch
|
||
var_18 = dword ptr -18h
|
||
var_14 = dword ptr -14h
|
||
var_10 = dword ptr -10h
|
||
var_C = dword ptr -0Ch
|
||
var_8 = dword ptr -8
|
||
var_4 = dword ptr -4
|
||
arg_0 = dword ptr 4
|
||
arg_4 = dword ptr 8
|
||
arg_8 = dword ptr 0Ch
|
||
|
||
sub esp, 20h
|
||
push ebp
|
||
push esi
|
||
mov esi, ecx
|
||
push edi
|
||
mov edi, [esi+33B84h]
|
||
xor ebp, ebp
|
||
cmp edi, ebp
|
||
jz short loc_4D0952
|
||
mov eax, [edi]
|
||
mov ecx, [eax+4]
|
||
push edi
|
||
call ecx
|
||
mov eax, [esi+33B8Ch]
|
||
cmp eax, ebp
|
||
jz short loc_4D091E
|
||
mov edx, [eax]
|
||
push eax
|
||
mov eax, [edx+8]
|
||
call eax
|
||
|
||
loc_4D091E: ; CODE XREF: CEncoder_CodeOneBlock+24j
|
||
mov [esi+33B8Ch], edi
|
||
mov ecx, [esi+80h]
|
||
mov edx, [esi+68h]
|
||
lea eax, [esi+33B88h]
|
||
push ecx
|
||
mov dword ptr [eax], offset loc_4CF210
|
||
mov [esi+0B8h], eax
|
||
call edx
|
||
add esp, 4
|
||
mov byte ptr [esi+33B95h], 1
|
||
mov [esi+33B84h], ebp
|
||
|
||
loc_4D0952: ; CODE XREF: CEncoder_CodeOneBlock+12j
|
||
mov eax, [esp+2Ch+arg_8]
|
||
mov dword ptr [eax], 1
|
||
cmp byte ptr [esi+33B80h], 0
|
||
jz short loc_4D0974
|
||
mov eax, [esi+0ECh]
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
add esp, 20h
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0974: ; CODE XREF: CEncoder_CodeOneBlock+73j
|
||
mov ecx, [esi+33B78h]
|
||
or ecx, [esi+33B7Ch]
|
||
push ebx
|
||
mov byte ptr [esi+33B80h], 1
|
||
jnz loc_4D0A9C
|
||
mov edx, [esi+80h]
|
||
mov eax, [esi+70h]
|
||
push edx
|
||
call eax
|
||
add esp, 4
|
||
test eax, eax
|
||
jnz short loc_4D09B9
|
||
mov ecx, [esi+33B78h]
|
||
push ecx
|
||
mov ecx, esi
|
||
call CEncoder_Flush
|
||
pop ebx
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
add esp, 20h
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D09B9: ; CODE XREF: CEncoder_CodeOneBlock+AFj
|
||
lea edx, [esp+30h+var_4]
|
||
push edx
|
||
mov ecx, esi
|
||
call sub_4CB3B0
|
||
movzx ecx, byte ptr [esi+10h]
|
||
mov eax, [esi+33B60h]
|
||
and eax, [esi+33B78h]
|
||
mov edx, [esi+38h]
|
||
lea edi, [esi+28h]
|
||
shl ecx, 4
|
||
add eax, ecx
|
||
shr edx, 0Bh
|
||
imul edx, [esi+eax*4+280F0h]
|
||
lea eax, [esi+eax*4+280F0h]
|
||
mov [edi+10h], edx
|
||
mov ecx, [eax]
|
||
mov edx, 800h
|
||
sub edx, ecx
|
||
shr edx, 5
|
||
add edx, ecx
|
||
mov [eax], edx
|
||
mov eax, [edi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0A1C
|
||
shl eax, 8
|
||
mov ecx, edi
|
||
mov [edi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0A1C: ; CODE XREF: CEncoder_CodeOneBlock+11Dj
|
||
movzx eax, byte ptr [esi+10h]
|
||
mov cl, ds:kLiteralNextStates[eax]
|
||
mov [esi+10h], cl
|
||
mov edx, [esi+32F04h]
|
||
mov eax, [esi+80h]
|
||
mov ecx, [esi+6Ch]
|
||
neg edx
|
||
push edx
|
||
push eax
|
||
call ecx
|
||
mov bl, al
|
||
mov eax, [esi+32654h]
|
||
add esp, 8
|
||
mov byte ptr [esp+30h+var_10], bl
|
||
mov edx, [esp+30h+var_10]
|
||
push edx
|
||
movzx edx, byte ptr [esi+11h]
|
||
push edi
|
||
mov edi, [esi+3265Ch]
|
||
and edi, [esi+33B78h]
|
||
mov ecx, 8
|
||
sub cl, al
|
||
shr edx, cl
|
||
mov ecx, eax
|
||
shl edi, cl
|
||
add edx, edi
|
||
imul edx, 0C00h
|
||
add edx, [esi+32650h]
|
||
mov ecx, edx
|
||
call sub_4CFE30
|
||
add dword ptr [esi+32F04h], 0FFFFFFFFh
|
||
add dword ptr [esi+33B78h], 1
|
||
mov [esi+11h], bl
|
||
adc [esi+33B7Ch], ebp
|
||
|
||
loc_4D0A9C: ; CODE XREF: CEncoder_CodeOneBlock+98j
|
||
mov edi, [esi+33B78h]
|
||
mov eax, [esi+80h]
|
||
mov ecx, [esi+70h]
|
||
push eax
|
||
mov [esp+34h+var_14], edi
|
||
mov [esp+34h+var_4], edi
|
||
call ecx
|
||
add esp, 4
|
||
test eax, eax
|
||
jnz short loc_4D0AD4
|
||
push edi
|
||
mov ecx, esi
|
||
call CEncoder_Flush
|
||
pop ebx
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
add esp, 20h
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
|
||
loc_4D0AD0: ; CODE XREF: CEncoder_CodeOneBlock+735j
|
||
; CEncoder_CodeOneBlock+78Bj
|
||
mov edi, [esp+30h+var_14]
|
||
|
||
loc_4D0AD4: ; CODE XREF: CEncoder_CodeOneBlock+1CBj
|
||
cmp byte ptr [esi+32EF4h], 0
|
||
mov ecx, esi
|
||
jz short loc_4D0AEB
|
||
lea edx, [esp+30h+var_1C]
|
||
push edx
|
||
call CEncoder_GetOptimumFast
|
||
jmp short loc_4D0AF6
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0AEB: ; CODE XREF: CEncoder_CodeOneBlock+1EDj
|
||
lea eax, [esp+30h+var_1C]
|
||
push eax
|
||
push edi
|
||
call CEncoder_GetOptimum
|
||
|
||
loc_4D0AF6: ; CODE XREF: CEncoder_CodeOneBlock+1F9j
|
||
mov ebx, [esi+33B60h]
|
||
and ebx, edi
|
||
cmp eax, 1
|
||
mov [esp+30h+var_18], eax
|
||
jnz loc_4D0C0E
|
||
cmp [esp+30h+var_1C], 0FFFFFFFFh
|
||
jnz loc_4D0C0E
|
||
movzx ecx, byte ptr [esi+10h]
|
||
mov edx, [esi+38h]
|
||
lea ebp, [esi+28h]
|
||
shl ecx, 4
|
||
shr edx, 0Bh
|
||
add ecx, ebx
|
||
imul edx, [esi+ecx*4+280F0h]
|
||
lea eax, [esi+ecx*4+280F0h]
|
||
mov [ebp+10h], edx
|
||
mov ecx, [eax]
|
||
mov edx, 800h
|
||
sub edx, ecx
|
||
shr edx, 5
|
||
add edx, ecx
|
||
mov [eax], edx
|
||
mov eax, [ebp+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0B61
|
||
shl eax, 8
|
||
mov ecx, ebp
|
||
mov [ebp+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0B61: ; CODE XREF: CEncoder_CodeOneBlock+262j
|
||
mov eax, [esi+32F04h]
|
||
mov ecx, [esi+80h]
|
||
mov edx, [esi+6Ch]
|
||
neg eax
|
||
push eax
|
||
push ecx
|
||
call edx
|
||
movzx edi, byte ptr [esi+11h]
|
||
mov edx, [esi+3265Ch]
|
||
and edx, [esp+38h+var_14]
|
||
mov bl, al
|
||
mov eax, [esi+32654h]
|
||
mov ecx, 8
|
||
sub cl, al
|
||
shr edi, cl
|
||
mov ecx, eax
|
||
shl edx, cl
|
||
add esp, 8
|
||
mov byte ptr [esp+30h+var_10], bl
|
||
add edi, edx
|
||
imul edi, 0C00h
|
||
add edi, [esi+32650h]
|
||
cmp byte ptr [esi+10h], 7
|
||
jnb short loc_4D0BC3
|
||
mov eax, [esp+30h+var_10]
|
||
push eax
|
||
push ebp
|
||
mov ecx, edi
|
||
call sub_4CFE30
|
||
jmp short loc_4D0BF5
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0BC3: ; CODE XREF: CEncoder_CodeOneBlock+2C2j
|
||
mov edx, [esi+80h]
|
||
mov eax, [esi+6Ch]
|
||
or ecx, 0FFFFFFFFh
|
||
sub ecx, [esi+14h]
|
||
sub ecx, [esi+32F04h]
|
||
push ecx
|
||
push edx
|
||
call eax
|
||
mov ecx, [esp+38h+var_10]
|
||
add esp, 8
|
||
mov byte ptr [esp+30h+var_C], al
|
||
mov edx, [esp+30h+var_C]
|
||
push ecx
|
||
push edx
|
||
push ebp
|
||
mov ecx, edi
|
||
call sub_4CFED0
|
||
|
||
loc_4D0BF5: ; CODE XREF: CEncoder_CodeOneBlock+2D1j
|
||
movzx eax, byte ptr [esi+10h]
|
||
mov cl, ds:kLiteralNextStates[eax]
|
||
mov ebp, [esp+30h+var_18]
|
||
mov [esi+10h], cl
|
||
mov [esi+11h], bl
|
||
jmp loc_4D1013
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0C0E: ; CODE XREF: CEncoder_CodeOneBlock+215j
|
||
; CEncoder_CodeOneBlock+220j
|
||
movzx edx, byte ptr [esi+10h]
|
||
mov ecx, [esi+38h]
|
||
lea edi, [esi+28h]
|
||
shl edx, 4
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
add edx, ebx
|
||
imul eax, [esi+edx*4+280F0h]
|
||
add [edi+8], eax
|
||
lea edx, [esi+edx*4+280F0h]
|
||
mov ebp, 0
|
||
adc [edi+0Ch], ebp
|
||
sub ecx, eax
|
||
mov [edi+10h], ecx
|
||
mov eax, [edx]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [edx], eax
|
||
mov eax, [edi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0C63
|
||
shl eax, 8
|
||
mov ecx, edi
|
||
mov [edi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0C63: ; CODE XREF: CEncoder_CodeOneBlock+364j
|
||
cmp [esp+30h+var_1C], 4
|
||
movzx edx, byte ptr [esi+10h]
|
||
mov ecx, [edi+10h]
|
||
jnb loc_4D0E91
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [esi+edx*4+283F0h]
|
||
add [edi+8], eax
|
||
lea edx, [esi+edx*4+283F0h]
|
||
adc [edi+0Ch], ebp
|
||
sub ecx, eax
|
||
mov [edi+10h], ecx
|
||
mov eax, [edx]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [edx], eax
|
||
mov eax, [edi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0CB6
|
||
shl eax, 8
|
||
mov ecx, edi
|
||
mov [edi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0CB6: ; CODE XREF: CEncoder_CodeOneBlock+3B7j
|
||
mov eax, [esp+30h+var_1C]
|
||
cmp eax, ebp
|
||
mov ecx, [edi+10h]
|
||
jnz short loc_4D0D24
|
||
movzx edx, byte ptr [esi+10h]
|
||
lea eax, [esi+edx*4+28420h]
|
||
shr ecx, 0Bh
|
||
imul ecx, [eax]
|
||
mov [edi+10h], ecx
|
||
mov ecx, [eax]
|
||
mov edx, 800h
|
||
sub edx, ecx
|
||
shr edx, 5
|
||
add edx, ecx
|
||
mov [eax], edx
|
||
mov eax, [edi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0CFC
|
||
shl eax, 8
|
||
mov ecx, edi
|
||
mov [edi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0CFC: ; CODE XREF: CEncoder_CodeOneBlock+3FDj
|
||
mov ebp, [esp+30h+var_18]
|
||
movzx ecx, byte ptr [esi+10h]
|
||
xor eax, eax
|
||
cmp ebp, 1
|
||
setnz al
|
||
shl ecx, 4
|
||
add ecx, ebx
|
||
lea ecx, [esi+ecx*4+284B0h]
|
||
push eax
|
||
push edi
|
||
call sub_4CFAC0
|
||
jmp loc_4D0E2E
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0D24: ; CODE XREF: CEncoder_CodeOneBlock+3CFj
|
||
mov edx, [esi+eax*4+14h]
|
||
movzx eax, byte ptr [esi+10h]
|
||
mov [esp+30h+var_8], edx
|
||
lea edx, [esi+eax*4+28420h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [edx]
|
||
add [edi+8], eax
|
||
adc [edi+0Ch], ebp
|
||
sub ecx, eax
|
||
mov [edi+10h], ecx
|
||
mov eax, [edx]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [edx], eax
|
||
mov eax, [edi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0D6C
|
||
shl eax, 8
|
||
mov ecx, edi
|
||
mov [edi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0D6C: ; CODE XREF: CEncoder_CodeOneBlock+46Dj
|
||
cmp [esp+30h+var_1C], 1
|
||
mov ecx, [edi+10h]
|
||
jnz short loc_4D0DB3
|
||
movzx edx, byte ptr [esi+10h]
|
||
lea eax, [esi+edx*4+28450h]
|
||
shr ecx, 0Bh
|
||
imul ecx, [eax]
|
||
mov [edi+10h], ecx
|
||
mov ecx, [eax]
|
||
mov edx, 800h
|
||
sub edx, ecx
|
||
shr edx, 5
|
||
add edx, ecx
|
||
mov [eax], edx
|
||
mov eax, [edi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0E1D
|
||
shl eax, 8
|
||
mov ecx, edi
|
||
mov [edi+10h], eax
|
||
call loc_4CF640
|
||
jmp short loc_4D0E1D
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0DB3: ; CODE XREF: CEncoder_CodeOneBlock+484j
|
||
movzx eax, byte ptr [esi+10h]
|
||
lea edx, [esi+eax*4+28450h]
|
||
mov eax, ecx
|
||
shr eax, 0Bh
|
||
imul eax, [edx]
|
||
add [edi+8], eax
|
||
adc [edi+0Ch], ebp
|
||
sub ecx, eax
|
||
mov [edi+10h], ecx
|
||
mov eax, [edx]
|
||
mov ecx, eax
|
||
shr ecx, 5
|
||
sub eax, ecx
|
||
mov [edx], eax
|
||
mov eax, [edi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0DF3
|
||
shl eax, 8
|
||
mov ecx, edi
|
||
mov [edi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0DF3: ; CODE XREF: CEncoder_CodeOneBlock+4F4j
|
||
mov ebp, [esp+30h+var_1C]
|
||
movzx eax, byte ptr [esi+10h]
|
||
lea edx, [ebp-2]
|
||
push edx
|
||
push edi
|
||
lea ecx, [esi+eax*4+28480h]
|
||
call sub_4CFAC0
|
||
cmp ebp, 3
|
||
jnz short loc_4D0E17
|
||
mov ecx, [esi+1Ch]
|
||
mov [esi+20h], ecx
|
||
|
||
loc_4D0E17: ; CODE XREF: CEncoder_CodeOneBlock+51Fj
|
||
mov edx, [esi+18h]
|
||
mov [esi+1Ch], edx
|
||
|
||
loc_4D0E1D: ; CODE XREF: CEncoder_CodeOneBlock+4B2j
|
||
; CEncoder_CodeOneBlock+4C1j
|
||
mov eax, [esi+14h]
|
||
mov ecx, [esp+30h+var_8]
|
||
mov ebp, [esp+30h+var_18]
|
||
mov [esi+18h], eax
|
||
mov [esi+14h], ecx
|
||
|
||
loc_4D0E2E: ; CODE XREF: CEncoder_CodeOneBlock+42Fj
|
||
cmp ebp, 1
|
||
jnz short loc_4D0E45
|
||
movzx edx, byte ptr [esi+10h]
|
||
mov al, ds:kShortRepNextStates[edx]
|
||
mov [esi+10h], al
|
||
jmp loc_4D0FF5
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0E45: ; CODE XREF: CEncoder_CodeOneBlock+541j
|
||
cmp byte ptr [esi+32EF4h], 0
|
||
push ebx
|
||
lea edx, [ebp-2]
|
||
push edx
|
||
lea ecx, [esi+2DA04h]
|
||
push edi
|
||
setz [esp+3Ch+var_20]
|
||
call sub_4D0020
|
||
cmp [esp+30h+var_20], 0
|
||
jz short loc_4D0E7F
|
||
add dword ptr [esi+ebx*4+32610h], 0FFFFFFFFh
|
||
lea ecx, [esi+2DA04h]
|
||
jnz short loc_4D0E7F
|
||
push ebx
|
||
call sub_4CF740
|
||
|
||
loc_4D0E7F: ; CODE XREF: CEncoder_CodeOneBlock+577j
|
||
; CEncoder_CodeOneBlock+587j
|
||
movzx eax, byte ptr [esi+10h]
|
||
mov cl, ds:kRepNextStates[eax]
|
||
mov [esi+10h], cl
|
||
jmp loc_4D0FF5
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0E91: ; CODE XREF: CEncoder_CodeOneBlock+37Fj
|
||
lea eax, [esi+edx*4+283F0h]
|
||
shr ecx, 0Bh
|
||
imul ecx, [eax]
|
||
mov [edi+10h], ecx
|
||
mov ecx, [eax]
|
||
mov edx, 800h
|
||
sub edx, ecx
|
||
shr edx, 5
|
||
add edx, ecx
|
||
mov [eax], edx
|
||
mov eax, [edi+10h]
|
||
cmp eax, 1000000h
|
||
jnb short loc_4D0EC8
|
||
shl eax, 8
|
||
mov ecx, edi
|
||
mov [edi+10h], eax
|
||
call loc_4CF640
|
||
|
||
loc_4D0EC8: ; CODE XREF: CEncoder_CodeOneBlock+5C9j
|
||
movzx eax, byte ptr [esi+10h]
|
||
mov cl, ds:kMatchNextStates[eax]
|
||
mov eax, [esp+30h+var_18]
|
||
mov [esi+10h], cl
|
||
cmp byte ptr [esi+32EF4h], 0
|
||
push ebx
|
||
setz [esp+34h+var_20]
|
||
add eax, 0FFFFFFFEh
|
||
push eax
|
||
lea ebp, [esi+28DB8h]
|
||
push edi
|
||
mov ecx, ebp
|
||
call sub_4D0020
|
||
cmp [esp+30h+var_20], 0
|
||
jz short loc_4D0F11
|
||
add dword ptr [ebp+ebx*4+4C0Ch], 0FFFFFFFFh
|
||
jnz short loc_4D0F11
|
||
push ebx
|
||
mov ecx, ebp
|
||
call sub_4CF740
|
||
|
||
loc_4D0F11: ; CODE XREF: CEncoder_CodeOneBlock+60Dj
|
||
; CEncoder_CodeOneBlock+617j
|
||
mov eax, [esp+30h+var_1C]
|
||
sub eax, 4
|
||
cmp eax, 2000h
|
||
mov [esp+30h+var_1C], eax
|
||
jnb short loc_4D0F2C
|
||
movzx ebp, byte ptr dword_551198[eax]
|
||
jmp short loc_4D0F4F
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0F2C: ; CODE XREF: CEncoder_CodeOneBlock+631j
|
||
cmp eax, 2000000h
|
||
jnb short loc_4D0F42
|
||
shr eax, 0Ch
|
||
movzx ebp, byte ptr dword_551198[eax]
|
||
add ebp, 18h
|
||
jmp short loc_4D0F4F
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0F42: ; CODE XREF: CEncoder_CodeOneBlock+641j
|
||
shr eax, 18h
|
||
movzx ebp, byte ptr dword_551198[eax]
|
||
add ebp, 30h
|
||
|
||
loc_4D0F4F: ; CODE XREF: CEncoder_CodeOneBlock+63Aj
|
||
; CEncoder_CodeOneBlock+650j
|
||
mov eax, [esp+30h+var_18]
|
||
add eax, 0FFFFFFFEh
|
||
cmp eax, 4
|
||
jb short loc_4D0F60
|
||
mov eax, 3
|
||
|
||
loc_4D0F60: ; CODE XREF: CEncoder_CodeOneBlock+669j
|
||
push ebp
|
||
shl eax, 8
|
||
push edi
|
||
lea ecx, [eax+esi+287B0h]
|
||
call sub_4CFC60
|
||
cmp ebp, 4
|
||
jb short loc_4D0FD1
|
||
mov ebx, [esp+30h+var_1C]
|
||
mov ecx, ebp
|
||
mov eax, ebp
|
||
and eax, 1
|
||
shr ecx, 1
|
||
sub ecx, 1
|
||
or eax, 2
|
||
shl eax, cl
|
||
sub ebx, eax
|
||
cmp ebp, 0Eh
|
||
jnb short loc_4D0FA9
|
||
push ebx
|
||
push ecx
|
||
sub eax, ebp
|
||
lea edx, [esi+eax*4+28BACh]
|
||
push edi
|
||
push edx
|
||
call sub_4CFD90
|
||
add esp, 10h
|
||
jmp short loc_4D0FD1
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D0FA9: ; CODE XREF: CEncoder_CodeOneBlock+6A0j
|
||
add ecx, 0FFFFFFFCh
|
||
push ecx
|
||
mov eax, ebx
|
||
shr eax, 4
|
||
push eax
|
||
mov ecx, edi
|
||
call sub_4CF6E0
|
||
and ebx, 0Fh
|
||
push ebx
|
||
push edi
|
||
lea ecx, [esi+28D78h]
|
||
call sub_4CFD00
|
||
add dword ptr [esi+33B54h], 1
|
||
|
||
loc_4D0FD1: ; CODE XREF: CEncoder_CodeOneBlock+684j
|
||
; CEncoder_CodeOneBlock+6B7j
|
||
mov ecx, [esi+1Ch]
|
||
mov edx, [esi+18h]
|
||
mov eax, [esi+14h]
|
||
add dword ptr [esi+33B70h], 1
|
||
mov ebp, [esp+30h+var_18]
|
||
mov [esi+20h], ecx
|
||
mov ecx, [esp+30h+var_1C]
|
||
mov [esi+1Ch], edx
|
||
mov [esi+18h], eax
|
||
mov [esi+14h], ecx
|
||
|
||
loc_4D0FF5: ; CODE XREF: CEncoder_CodeOneBlock+550j
|
||
; CEncoder_CodeOneBlock+59Cj
|
||
mov eax, [esi+80h]
|
||
mov ecx, [esi+6Ch]
|
||
mov edx, ebp
|
||
sub edx, [esi+32F04h]
|
||
sub edx, 1
|
||
push edx
|
||
push eax
|
||
call ecx
|
||
add esp, 8
|
||
mov [esi+11h], al
|
||
|
||
loc_4D1013: ; CODE XREF: CEncoder_CodeOneBlock+319j
|
||
sub [esi+32F04h], ebp
|
||
mov eax, [esi+32F04h]
|
||
add [esp+30h+var_14], ebp
|
||
test eax, eax
|
||
jnz loc_4D0AD0
|
||
cmp [esi+32EF4h], al
|
||
jnz short loc_4D1056
|
||
cmp dword ptr [esi+33B70h], 80h
|
||
jb short loc_4D1046
|
||
mov ecx, esi
|
||
call CEncoder_FillDistancesPrices
|
||
|
||
loc_4D1046: ; CODE XREF: CEncoder_CodeOneBlock+74Dj
|
||
cmp dword ptr [esi+33B54h], 10h
|
||
jb short loc_4D1056
|
||
mov ecx, esi
|
||
call CEncoder_FillAlignPrices
|
||
|
||
loc_4D1056: ; CODE XREF: CEncoder_CodeOneBlock+741j
|
||
; CEncoder_CodeOneBlock+75Dj
|
||
mov edx, [esi+80h]
|
||
mov eax, [esi+70h]
|
||
push edx
|
||
call eax
|
||
add esp, 4
|
||
test eax, eax
|
||
mov eax, [esp+30h+var_14]
|
||
jz short loc_4D10D7
|
||
mov ecx, [esp+30h+var_4]
|
||
mov edx, eax
|
||
sub edx, ecx
|
||
cmp edx, 4000h
|
||
jb loc_4D0AD0
|
||
sub eax, ecx
|
||
add [esi+33B78h], eax
|
||
mov ecx, [esi+33B78h]
|
||
mov eax, [esp+30h+arg_0]
|
||
adc dword ptr [esi+33B7Ch], 0
|
||
mov [eax], ecx
|
||
mov edx, [esi+33B7Ch]
|
||
lea ecx, [esi+28h]
|
||
mov [eax+4], edx
|
||
call sub_4CD8B0
|
||
mov ecx, [esp+30h+arg_4]
|
||
mov [ecx], eax
|
||
mov eax, [esp+30h+arg_8]
|
||
mov [ecx+4], edx
|
||
pop ebx
|
||
mov byte ptr [esi+33B80h], 0
|
||
pop edi
|
||
mov dword ptr [eax], 0
|
||
mov eax, [esi+0ECh]
|
||
pop esi
|
||
pop ebp
|
||
add esp, 20h
|
||
retn 0Ch
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D10D7: ; CODE XREF: CEncoder_CodeOneBlock+77Bj
|
||
push eax
|
||
mov ecx, esi
|
||
call CEncoder_Flush
|
||
pop ebx
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
add esp, 20h
|
||
retn 0Ch
|
||
CEncoder_CodeOneBlock endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
align 10h
|
||
CEncoder_CodeReal proc near ; CODE XREF: CEncoder_Code+49p
|
||
|
||
var_20 = dword ptr -20h
|
||
processedOutSize= byte ptr -1Ch
|
||
processedInSize = byte ptr -14h
|
||
var_C = dword ptr -0Ch
|
||
var_4 = dword ptr -4
|
||
inStream = dword ptr 4
|
||
outStream = dword ptr 8
|
||
inSize = dword ptr 0Ch
|
||
outSize = dword ptr 10h
|
||
progress = dword ptr 14h
|
||
|
||
push 0FFFFFFFFh
|
||
push offset loc_4DA128
|
||
mov eax, dword ptr fs:[0]
|
||
push eax
|
||
sub esp, 14h
|
||
push ebp
|
||
push esi
|
||
push edi
|
||
mov eax, dword_544960
|
||
xor eax, esp
|
||
push eax
|
||
lea eax, [esp+30h+var_C]
|
||
mov dword ptr fs:[0], eax
|
||
mov esi, ecx
|
||
mov [esp+30h+var_20], esi
|
||
mov eax, [esp+30h+outSize]
|
||
mov ecx, [esp+30h+inSize]
|
||
mov edx, [esp+30h+outStream]
|
||
push eax
|
||
mov eax, [esp+34h+inStream]
|
||
push ecx
|
||
push edx
|
||
push eax
|
||
mov ecx, esi
|
||
mov [esp+40h+var_4], 0
|
||
call CEncoder_SetStreams
|
||
mov edi, eax
|
||
test edi, edi
|
||
jz short loc_4D1190
|
||
cmp dword ptr [esi+80h], 0
|
||
mov [esp+30h+var_4], 0FFFFFFFFh
|
||
jz short loc_4D1166
|
||
cmp byte ptr [esi+33B95h], 0
|
||
jz short loc_4D1166
|
||
mov byte ptr [esi+33B95h], 0
|
||
|
||
loc_4D1166: ; CODE XREF: CEncoder_CodeReal+64j
|
||
; CEncoder_CodeReal+6Dj
|
||
mov eax, [esi+33B8Ch]
|
||
test eax, eax
|
||
jz short loc_4D1182
|
||
mov ecx, [eax]
|
||
mov edx, [ecx+8]
|
||
push eax
|
||
call edx
|
||
mov dword ptr [esi+33B8Ch], 0
|
||
|
||
loc_4D1182: ; CODE XREF: CEncoder_CodeReal+7Ej
|
||
mov ecx, [esi+4]
|
||
mov edx, [ecx+10h]
|
||
lea eax, [esi+4]
|
||
push eax
|
||
call edx
|
||
jmp short loc_4D1201
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D1190: ; CODE XREF: CEncoder_CodeReal+53j
|
||
lea eax, [esp+30h+outSize]
|
||
push eax
|
||
lea ecx, [esp+34h+processedOutSize]
|
||
push ecx
|
||
lea edx, [esp+38h+processedInSize]
|
||
push edx
|
||
mov ecx, esi
|
||
call CEncoder_CodeOneBlock
|
||
mov edi, eax
|
||
test edi, edi
|
||
jnz short loc_4D11F0
|
||
mov ebp, [esp+30h+progress]
|
||
|
||
loc_4D11B0: ; CODE XREF: CEncoder_CodeReal+FEj
|
||
cmp [esp+30h+outSize], 0
|
||
jnz short loc_4D1218
|
||
test ebp, ebp
|
||
jz short loc_4D11D4
|
||
mov eax, [ebp+0]
|
||
mov eax, [eax+0Ch]
|
||
lea ecx, [esp+30h+processedOutSize]
|
||
push ecx
|
||
lea edx, [esp+34h+processedInSize]
|
||
push edx
|
||
push ebp
|
||
call eax ; SetRatioInfo
|
||
mov edi, eax
|
||
test edi, edi
|
||
jnz short loc_4D11F0
|
||
|
||
loc_4D11D4: ; CODE XREF: CEncoder_CodeReal+C9j
|
||
lea ecx, [esp+30h+outSize]
|
||
push ecx
|
||
lea edx, [esp+34h+processedOutSize]
|
||
push edx
|
||
lea eax, [esp+38h+processedInSize]
|
||
push eax
|
||
mov ecx, esi
|
||
call CEncoder_CodeOneBlock
|
||
mov edi, eax
|
||
test edi, edi
|
||
jz short loc_4D11B0
|
||
|
||
loc_4D11F0: ; CODE XREF: CEncoder_CodeReal+BAj
|
||
; CEncoder_CodeReal+E2j
|
||
lea ecx, [esp+30h+var_20]
|
||
mov [esp+30h+var_4], 0FFFFFFFFh
|
||
call sub_4CDA70
|
||
|
||
loc_4D1201: ; CODE XREF: CEncoder_CodeReal+9Ej
|
||
mov eax, edi
|
||
mov ecx, [esp+30h+var_C]
|
||
mov dword ptr fs:[0], ecx
|
||
pop ecx
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
add esp, 20h
|
||
retn 14h
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4D1218: ; CODE XREF: CEncoder_CodeReal+C5j
|
||
lea ecx, [esp+30h+var_20]
|
||
mov [esp+30h+var_4], 0FFFFFFFFh
|
||
call sub_4CDA70
|
||
xor eax, eax
|
||
mov ecx, [esp+30h+var_C]
|
||
mov dword ptr fs:[0], ecx
|
||
pop ecx
|
||
pop edi
|
||
pop esi
|
||
pop ebp
|
||
add esp, 20h
|
||
retn 14h
|
||
CEncoder_CodeReal endp
|
||
|
||
; =============== S U B R O U T I N E =======================================
|
||
; Attributes: bp-based frame
|
||
|
||
CEncoder_Code proc near ; DATA XREF: .rdata:00517B08o
|
||
; sub_4D1240
|
||
|
||
var_10 = dword ptr -10h
|
||
var_C = dword ptr -0Ch
|
||
var_4 = dword ptr -4
|
||
pThis = dword ptr 8
|
||
pInStream = dword ptr 0Ch
|
||
pOutStream = dword ptr 10h
|
||
pInSize = dword ptr 14h
|
||
pOutSize = dword ptr 18h
|
||
progress = dword ptr 1Ch
|
||
|
||
push ebp
|
||
mov ebp, esp
|
||
push 0FFFFFFFFh
|
||
push offset loc_4DA150
|
||
mov eax, dword ptr fs:[0]
|
||
push eax
|
||
sub esp, 8
|
||
push ebx
|
||
push esi
|
||
push edi
|
||
mov eax, dword_544960
|
||
xor eax, ebp
|
||
push eax
|
||
lea eax, [ebp+var_C]
|
||
mov dword ptr fs:[0], eax
|
||
mov [ebp+var_10], esp
|
||
mov eax, [ebp+progress]
|
||
mov ecx, [ebp+pOutSize]
|
||
mov edx, [ebp+pInSize]
|
||
push eax
|
||
mov eax, [ebp+pOutStream]
|
||
push ecx
|
||
mov ecx, [ebp+pInStream]
|
||
push edx
|
||
push eax
|
||
push ecx
|
||
mov ecx, [ebp+pThis]
|
||
mov [ebp+var_4], 0
|
||
call CEncoder_CodeReal
|
||
mov ecx, [ebp+var_C]
|
||
mov dword ptr fs:[0], ecx
|
||
pop ecx
|
||
pop edi
|
||
pop esi
|
||
pop ebx
|
||
mov esp, ebp
|
||
pop ebp
|
||
retn 18h
|
||
CEncoder_Code endp
|
||
|
||
; ---------------------------------------------------------------------------
|
||
|
||
loc_4DA0FB: ; DATA XREF: Compress_lzma_internal+2o
|
||
mov edx, [esp+8]
|
||
lea eax, [edx-5Ch]
|
||
mov ecx, [edx-60h]
|
||
xor ecx, eax
|
||
call sub_4A0686
|
||
mov eax, 0 ; offset dword_526E44
|
||
int 3;
|
||
; jmp ___CxxFrameHandler3
|
||
|
||
loc_4DA0C9: ; DATA XREF: sub_4CF810+2o
|
||
mov edx, [esp+8]
|
||
lea eax, [edx-0Ch]
|
||
mov ecx, [edx-10h]
|
||
xor ecx, eax
|
||
call sub_4A0686
|
||
mov eax, 0 ; offset dword_526E18
|
||
int 3;
|
||
; jmp ___CxxFrameHandler3
|
||
|
||
loc_4DA128: ; DATA XREF: CEncoder_CodeReal+2o
|
||
mov edx, [esp+8]
|
||
lea eax, [edx-20h]
|
||
mov ecx, [edx-24h]
|
||
xor ecx, eax
|
||
call sub_4A0686
|
||
mov eax, 0 ; offset unk_526E70
|
||
int 3;
|
||
; jmp ___CxxFrameHandler3
|
||
|
||
loc_4DA150: ; DATA XREF: CEncoder_Code+5o
|
||
mov edx, [esp+8]
|
||
lea eax, [edx+0Ch]
|
||
mov ecx, [edx-18h]
|
||
xor ecx, eax
|
||
call sub_4A0686
|
||
mov eax, 0 ; offset unk_526ED8
|
||
int 3;
|
||
; jmp ___CxxFrameHandler3
|
||
|
||
END
|