home *** CD-ROM | disk | FTP | other *** search
- ;;
- ;; PECompact v2 LZMA CODEC
- ;; Copyright (C) 2004 Joergen Ibsen (www.ibsensoftware.com)
- ;;
- ;; This library is free software; you can redistribute it and/or
- ;; modify it under the terms of the GNU Lesser General Public
- ;; License as published by the Free Software Foundation; either
- ;; version 2.1 of the License, or (at your option) any later version.
- ;;
- ;; This library is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ;; Lesser General Public License for more details.
- ;;
- ;; You should have received a copy of the GNU Lesser General Public
- ;; License along with this library; if not, write to the Free Software
- ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- ;;
-
- .386
- include listing.inc
- .model flat
-
- option casemap:none
- option proc:private
-
- public _GetDecodeSmallFuncSize@0
- public _DecodeSmall@12
-
- _TEXT segment
-
- _GetDecodeSmallFuncSize@0:
-
- mov eax, _DecodeSmall@12_end - _DecodeSmall@12
- ret
-
- align 4
-
- _DecodeSmall@12:
-
- _src$ = 4 + 4*4
- _dst$ = 4 + 4*4 + 4
- _ext$ = 4 + 4*4 + 8
-
- push esi
- push edi
- push ebx
- push ebp
-
- ; header format:
- ;
- ; DWORD lzmaInternalSize
- ; DWORD orgSize
- ; DWORD cmpSize
- ; BYTE pb
- ; BYTE lp
- ; BYTE lc
- ; <compressed lzma data>
-
- mov ebx, [esp + _ext$]
-
- test ebx, ebx
- jz _ret_failure
-
- call @F
- db "kernel32.dll",0
- @@:
- call dword ptr [ebx]
-
- test eax, eax
- jz _ret_failure
-
- mov esi, eax ; esi = hKernel32
-
- call @F
- db "VirtualFree",0
- @@:
- push esi
- call dword ptr [ebx + 4]
-
- test eax, eax
- jz _ret_failure
-
- mov ebp, eax ; ebp -> VirtualFree
-
- call @F
- db "VirtualAlloc",0
- @@:
- push esi
- call dword ptr [ebx + 4]
-
- test eax, eax
- jz _ret_failure
-
- mov esi, [esp + _src$] ; esi -> lpvSource
- mov edi, [esp + _dst$] ; edi -> lpvDestination
-
- push 4 ; PAGE_READWRITE
- push 4096 ; MEM_COMMIT
- push dword ptr [esi] ; lzmaInternalSize
- push 0 ; NULL
- call eax ; VirtualAlloc
-
- test eax, eax
- jz _ret_failure
-
- mov ebx, eax ; ebx -> lzmaInternalData
-
- ; LzmaDecode(lzmaInternalData, lzmaInternalSize,
- ; lc, lp, pb,
- ; (unsigned char *)lpvSource + 8 + 13, cmpSize - 13,
- ; lpvDest, orgSize,
- ; &outSizeProcessed);
-
- push eax ; &outSizeProcessed
- push esp ;
- push dword ptr [esi + 4] ; orgSize
- push edi ; lpvDest
- push dword ptr [esi + 8] ; cmpSize
- lea eax, [esi + 15] ; lpvSource
- push eax ;
- movzx eax, byte ptr [esi + 12] ; pb
- push eax ;
- movzx eax, byte ptr [esi + 13] ; lp
- push eax ;
- movzx eax, byte ptr [esi + 14] ; lc
- push eax ;
- push dword ptr [esi] ; lzmaInternalSize
- push ebx ; lzmaInternalData
- call _LzmaDecode
- add esp, 10*4
-
- test eax, eax
-
- pop eax ; eax = outSizeProcessed
-
- jz @F
-
- xor eax, eax
- dec eax
-
- @@:
- push eax
-
- push 16384 ; MEM_DECOMMIT
- push dword ptr [esi] ; lzmaInternalSize
- push ebx ; lzmaInternalData
- call ebp ; VirtualFree
-
- pop eax
-
- jmp _ret_eax
-
- _ret_failure:
- xor eax, eax
- dec eax
-
- _ret_eax:
- pop ebp
- pop ebx
- pop edi
- pop esi
-
- ret 12
-
- ; =================================================================
-
- ; LzmaDecode.c
- ; LZMA Decoder
- ; LZMA SDK 4.01 Copyright (c) 1999-2004 Igor Pavlov (2004-02-15)
-
- ; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.3052
-
- _RangeDecoderReadByte PROC NEAR ; COMDAT
- ; _rd$ = edx
- ; Line 136
- mov ecx, DWORD PTR [edx]
- cmp ecx, DWORD PTR [edx+4]
- jne SHORT $L73231
- ; Line 145
- mov DWORD PTR [edx+16], 1
- ; Line 146
- or al, 255 ; 000000ffH
- ; Line 150
- ret 0
- $L73231:
- ; Line 149
- mov al, BYTE PTR [ecx]
- inc ecx
- mov DWORD PTR [edx], ecx
- ; Line 150
- ret 0
- _RangeDecoderReadByte ENDP
- ; Function compile flags: /Ogsy
- _RangeDecoderInit PROC NEAR ; COMDAT
- ; _rd$ = edx
- ; _stream$ = eax
- ; _bufferSize$ = ecx
- ; Line 171
- and DWORD PTR [edx+16], 0
- ; Line 172
- and DWORD PTR [edx+12], 0
- push esi
- mov DWORD PTR [edx], eax
- add eax, ecx
- ; Line 173
- or DWORD PTR [edx+8], -1
- push 5
- mov DWORD PTR [edx+4], eax
- pop esi
- $L73241:
- ; Line 175
- call _RangeDecoderReadByte
- mov ecx, DWORD PTR [edx+12]
- movzx eax, al
- shl ecx, 8
- or eax, ecx
- dec esi
- mov DWORD PTR [edx+12], eax
- jne SHORT $L73241
- pop esi
- ; Line 176
- ret 0
- _RangeDecoderInit ENDP
- ; Function compile flags: /Ogsy
- tv83 = -4 ; size = 4
- _RangeDecoderDecodeDirectBits PROC NEAR ; COMDAT
- ; _rd$ = edx
- ; _numTotalBits$ = eax
- ; Line 183
- push ebp
- mov ebp, esp
- push ecx
- push ebx
- push esi
- ; Line 184
- mov esi, DWORD PTR [edx+8]
- ; Line 185
- xor ebx, ebx
- ; Line 187
- test eax, eax
- push edi
- mov edi, DWORD PTR [edx+12]
- jle SHORT $L73256
- ; Line 184
- mov DWORD PTR tv83[ebp], eax
- $L73254:
- ; Line 190
- shr esi, 1
- ; Line 192
- shl ebx, 1
- ; Line 193
- cmp edi, esi
- jb SHORT $L73257
- ; Line 195
- sub edi, esi
- ; Line 196
- or ebx, 1
- $L73257:
- ; Line 204
- cmp esi, 16777216 ; 01000000H
- jae SHORT $L73255
- shl esi, 8
- call _RangeDecoderReadByte
- movzx eax, al
- shl edi, 8
- or edi, eax
- $L73255:
- ; Line 187
- dec DWORD PTR tv83[ebp]
- jne SHORT $L73254
- $L73256:
- ; Line 206
- mov DWORD PTR [edx+12], edi
- pop edi
- mov DWORD PTR [edx+8], esi
- pop esi
- ; Line 207
- mov eax, ebx
- pop ebx
- ; Line 208
- leave
- ret 0
- _RangeDecoderDecodeDirectBits ENDP
- ; Function compile flags: /Ogsy
- _RangeDecoderBitDecode PROC NEAR ; COMDAT
- ; _prob$ = ecx
- ; _rd$ = edx
- ; Line 212
- mov eax, DWORD PTR [edx+8]
- push esi
- movzx esi, WORD PTR [ecx]
- push edi
- mov edi, eax
- shr edi, 11 ; 0000000bH
- imul edi, esi
- ; Line 213
- mov esi, DWORD PTR [edx+12]
- cmp esi, edi
- jae SHORT $L73267
- ; Line 215
- mov DWORD PTR [edx+8], edi
- ; Line 216
- xor eax, eax
- mov ax, WORD PTR [ecx]
- movzx esi, ax
- mov edi, 2048 ; 00000800H
- sub edi, esi
- sar edi, 5
- add edi, eax
- mov WORD PTR [ecx], di
- ; Line 217
- cmp DWORD PTR [edx+8], 16777216 ; 01000000H
- jae SHORT $L73269
- ; Line 219
- call _RangeDecoderReadByte
- mov ecx, DWORD PTR [edx+12]
- movzx eax, al
- shl ecx, 8
- or eax, ecx
- ; Line 220
- shl DWORD PTR [edx+8], 8
- mov DWORD PTR [edx+12], eax
- $L73269:
- ; Line 222
- xor eax, eax
- jmp SHORT $L73270
- $L73267:
- ; Line 226
- sub eax, edi
- ; Line 227
- sub esi, edi
- mov DWORD PTR [edx+8], eax
- mov DWORD PTR [edx+12], esi
- ; Line 228
- xor eax, eax
- mov ax, WORD PTR [ecx]
- xor esi, esi
- mov si, ax
- shr si, 5
- sub eax, esi
- mov WORD PTR [ecx], ax
- ; Line 229
- cmp DWORD PTR [edx+8], 16777216 ; 01000000H
- jae SHORT $L73272
- ; Line 231
- call _RangeDecoderReadByte
- mov ecx, DWORD PTR [edx+12]
- movzx eax, al
- shl ecx, 8
- or eax, ecx
- ; Line 232
- shl DWORD PTR [edx+8], 8
- mov DWORD PTR [edx+12], eax
- $L73272:
- ; Line 234
- xor eax, eax
- inc eax
- $L73270:
- pop edi
- pop esi
- ; Line 236
- ret 0
- _RangeDecoderBitDecode ENDP
- ; Function compile flags: /Ogsy
- _probs$ = 8 ; size = 4
- _numLevels$ = 12 ; size = 4
- _rd$ = 16 ; size = 4
- _RangeDecoderBitTreeDecode PROC NEAR ; COMDAT
- ; Line 249
- push ebp
- mov ebp, esp
- ; Line 250
- xor eax, eax
- inc eax
- ; Line 255
- cmp DWORD PTR _numLevels$[ebp], 0
- jle SHORT $L73285
- push esi
- push edi
- mov edi, DWORD PTR _numLevels$[ebp]
- $L73283:
- ; Line 261
- mov edx, DWORD PTR _rd$[ebp]
- lea esi, DWORD PTR [eax+eax]
- mov eax, DWORD PTR _probs$[ebp]
- lea ecx, DWORD PTR [esi+eax]
- call _RangeDecoderBitDecode
- add eax, esi
- dec edi
- jne SHORT $L73283
- pop edi
- pop esi
- $L73285:
- ; Line 267
- mov ecx, DWORD PTR _numLevels$[ebp]
- xor edx, edx
- inc edx
- shl edx, cl
- sub eax, edx
- ; Line 268
- pop ebp
- ret 0
- _RangeDecoderBitTreeDecode ENDP
- ; Function compile flags: /Ogsy
- _probs$ = 8 ; size = 4
- _numLevels$ = 12 ; size = 4
- _rd$ = 16 ; size = 4
- _RangeDecoderReverseBitTreeDecode PROC NEAR ; COMDAT
- ; Line 271
- push ebx
- ; Line 272
- xor edx, edx
- push edi
- ; Line 274
- xor ebx, ebx
- inc edx
- ; Line 278
- xor edi, edi
- cmp DWORD PTR _numLevels$[esp+4], ebx
- jle SHORT $L73299
- push esi
- $L73297:
- ; Line 284
- mov eax, DWORD PTR _probs$[esp+8]
- lea esi, DWORD PTR [edx+edx]
- mov edx, DWORD PTR _rd$[esp+8]
- lea ecx, DWORD PTR [esi+eax]
- call _RangeDecoderBitDecode
- ; Line 286
- mov ecx, edi
- lea edx, DWORD PTR [esi+eax]
- shl eax, cl
- or ebx, eax
- inc edi
- cmp edi, DWORD PTR _numLevels$[esp+8]
- jl SHORT $L73297
- pop esi
- $L73299:
- pop edi
- ; Line 292
- mov eax, ebx
- pop ebx
- ; Line 293
- ret 0
- _RangeDecoderReverseBitTreeDecode ENDP
- ; Function compile flags: /Ogsy
- _probs$ = 8 ; size = 4
- _rd$ = 12 ; size = 4
- _LzmaLiteralDecode PROC NEAR ; COMDAT
- ; Line 297
- xor eax, eax
- inc eax
- push esi
- $L73308:
- ; Line 307
- mov edx, DWORD PTR _rd$[esp]
- lea esi, DWORD PTR [eax+eax]
- mov eax, DWORD PTR _probs$[esp]
- lea ecx, DWORD PTR [esi+eax]
- call _RangeDecoderBitDecode
- or eax, esi
- ; Line 310
- cmp eax, 256 ; 00000100H
- jl SHORT $L73308
- pop esi
- ; Line 315
- ret 0
- _LzmaLiteralDecode ENDP
- ; Function compile flags: /Ogsy
- _probs$ = 8 ; size = 4
- _matchByte$ = 12 ; size = 1
- _LzmaLiteralDecodeMatch PROC NEAR ; COMDAT
- ; _rd$ = edx
- ; Line 318
- push ebx
- push esi
- ; Line 319
- xor ebx, ebx
- push edi
- inc ebx
- mov edi, 256 ; 00000100H
- $L73320:
- ; Line 326
- movzx esi, BYTE PTR _matchByte$[esp+8]
- ; Line 334
- mov ecx, DWORD PTR _probs$[esp+8]
- shl BYTE PTR _matchByte$[esp+8], 1
- shr esi, 7
- lea eax, DWORD PTR [esi+1]
- shl eax, 8
- add eax, ebx
- lea ecx, DWORD PTR [ecx+eax*2]
- call _RangeDecoderBitDecode
- ; Line 335
- add ebx, ebx
- or ebx, eax
- ; Line 337
- cmp esi, eax
- jne SHORT $L73465
- ; Line 351
- cmp ebx, edi
- jl SHORT $L73320
- jmp SHORT $L73322
- $L73327:
- ; Line 345
- mov eax, DWORD PTR _probs$[esp+8]
- lea esi, DWORD PTR [ebx+ebx]
- lea ecx, DWORD PTR [esi+eax]
- call _RangeDecoderBitDecode
- or eax, esi
- mov ebx, eax
- $L73465:
- ; Line 339
- cmp ebx, edi
- jl SHORT $L73327
- $L73322:
- pop edi
- pop esi
- ; Line 355
- mov al, bl
- pop ebx
- ; Line 356
- ret 0
- _LzmaLiteralDecodeMatch ENDP
- ; Function compile flags: /Ogsy
- _LzmaLenDecode PROC NEAR ; COMDAT
- ; _p$ = ecx
- ; _rd$ = edx
- ; _posState$ = eax
- ; Line 376
- push esi
- push edi
- mov esi, eax
- mov edi, ecx
- ; Line 377
- call _RangeDecoderBitDecode
- test eax, eax
- jne SHORT $L73337
- ; Line 379
- push edx
- shl esi, 4
- lea eax, DWORD PTR [esi+edi+4]
- push 3
- push eax
- call _RangeDecoderBitTreeDecode
- add esp, 12 ; 0000000cH
- jmp SHORT $L73336
- $L73337:
- ; Line 380
- lea ecx, DWORD PTR [edi+2]
- call _RangeDecoderBitDecode
- test eax, eax
- ; Line 382
- push edx
- jne SHORT $L73338
- shl esi, 4
- lea eax, DWORD PTR [esi+edi+260]
- push 3
- push eax
- call _RangeDecoderBitTreeDecode
- add esp, 12 ; 0000000cH
- add eax, 8
- jmp SHORT $L73336
- $L73338:
- ; Line 384
- push 8
- add edi, 516 ; 00000204H
- push edi
- call _RangeDecoderBitTreeDecode
- add esp, 12 ; 0000000cH
- add eax, 16 ; 00000010H
- $L73336:
- pop edi
- pop esi
- ; Line 385
- ret 0
- _LzmaLenDecode ENDP
- _rd$ = -56 ; size = 20
- _literalPosMask$ = -36 ; size = 4
- _posStateMask$ = -32 ; size = 4
- _rep3$ = -28 ; size = 4
- _previousIsMatch$ = -24 ; size = 4
- _rep1$ = -20 ; size = 4
- _rep2$ = -16 ; size = 4
- _state$ = -12 ; size = 4
- _nowPos$ = -8 ; size = 4
- _rep0$ = -4 ; size = 4
- _buffer$ = 8 ; size = 4
- _len$ = 12 ; size = 4
- _bufferSize$ = 12 ; size = 4
- _lc$ = 16 ; size = 4
- _code$73502 = 20 ; size = 4
- tv176 = 20 ; size = 4
- _posState$73385 = 20 ; size = 4
- _lp$ = 20 ; size = 4
- $T73491 = 23 ; size = 1
- tv329 = 24 ; size = 4
- _pb$ = 24 ; size = 4
- _inStream$ = 28 ; size = 4
- _inSize$ = 32 ; size = 4
- _outStream$ = 36 ; size = 4
- _outSize$ = 40 ; size = 4
- _outSizeProcessed$ = 44 ; size = 4
- _LzmaDecode PROC NEAR ; COMDAT
- ; Line 531
- push ebp
- mov ebp, esp
- sub esp, 56 ; 00000038H
- ; Line 532
- mov edx, DWORD PTR _lp$[ebp]
- mov eax, DWORD PTR _lc$[ebp]
- push ebx
- push esi
- ; Line 539
- xor esi, esi
- inc esi
- lea ecx, DWORD PTR [eax+edx]
- mov DWORD PTR _rep0$[ebp], esi
- mov DWORD PTR _rep1$[ebp], esi
- mov DWORD PTR _rep2$[ebp], esi
- mov DWORD PTR _rep3$[ebp], esi
- mov eax, 768 ; 00000300H
- shl eax, cl
- ; Line 541
- mov ecx, DWORD PTR _pb$[ebp]
- shl esi, cl
- xor bl, bl
- add eax, 1846 ; 00000736H
- push edi
- xor edi, edi
- dec esi
- mov DWORD PTR _posStateMask$[ebp], esi
- ; Line 542
- xor esi, esi
- inc esi
- mov ecx, edx
- shl esi, cl
- ; Line 544
- lea ecx, DWORD PTR [eax+eax]
- mov DWORD PTR _state$[ebp], edi
- mov DWORD PTR _previousIsMatch$[ebp], edi
- dec esi
- cmp DWORD PTR _bufferSize$[ebp], ecx
- mov DWORD PTR _nowPos$[ebp], edi
- mov DWORD PTR _literalPosMask$[ebp], esi
- jae SHORT $L73378
- ; Line 545
- push 2
- pop eax
- jmp SHORT $L73359
- $L73378:
- ; Line 546
- test eax, eax
- mov esi, DWORD PTR _buffer$[ebp]
- jbe SHORT $L73379
- mov ecx, eax
- shr ecx, 1
- mov eax, 67109888 ; 04000400H
- mov edi, esi
- rep stosd
- adc ecx, ecx
- rep stosw
- mov edi, DWORD PTR _state$[ebp]
- $L73379:
- ; Line 554
- mov eax, DWORD PTR _inStream$[ebp]
- mov ecx, DWORD PTR _inSize$[ebp]
- and DWORD PTR _rd$[ebp+16], 0
- and DWORD PTR _rd$[ebp+12], 0
- mov DWORD PTR _rd$[ebp], eax
- add eax, ecx
- or DWORD PTR _rd$[ebp+8], -1
- mov DWORD PTR _rd$[ebp+4], eax
- mov DWORD PTR tv176[ebp], 5
- $L73475:
- lea edx, DWORD PTR _rd$[ebp]
- call _RangeDecoderReadByte
- mov ecx, DWORD PTR _rd$[ebp+12]
- movzx eax, al
- shl ecx, 8
- or eax, ecx
- dec DWORD PTR tv176[ebp]
- mov DWORD PTR _rd$[ebp+12], eax
- jne SHORT $L73475
- ; Line 557
- mov eax, DWORD PTR _outSizeProcessed$[ebp]
- and DWORD PTR [eax], 0
- ; Line 558
- cmp DWORD PTR _outSize$[ebp], 0
- ja SHORT $L73383
- $L73531:
- ; Line 747
- mov eax, DWORD PTR _nowPos$[ebp]
- mov ecx, DWORD PTR _outSizeProcessed$[ebp]
- mov DWORD PTR [ecx], eax
- ; Line 748
- xor eax, eax
- $L73359:
- pop edi
- pop esi
- pop ebx
- ; Line 749
- leave
- ret 0
- $L73529:
- ; Line 558
- mov edi, DWORD PTR _state$[ebp]
- $L73383:
- ; Line 566
- mov eax, DWORD PTR _posStateMask$[ebp]
- and eax, DWORD PTR _nowPos$[ebp]
- ; Line 571
- cmp DWORD PTR _rd$[ebp+16], 0
- mov DWORD PTR _posState$73385[ebp], eax
- jne $L73520
- ; Line 573
- mov ecx, edi
- shl ecx, 4
- add ecx, eax
- lea ecx, DWORD PTR [esi+ecx*2]
- lea edx, DWORD PTR _rd$[ebp]
- call _RangeDecoderBitDecode
- test eax, eax
- jne $L73388
- ; Line 582
- mov edx, DWORD PTR _literalPosMask$[ebp]
- and edx, DWORD PTR _nowPos$[ebp]
- xor ecx, ecx
- mov cl, 8
- sub cl, BYTE PTR _lc$[ebp]
- movzx eax, bl
- shr eax, cl
- mov ecx, DWORD PTR _lc$[ebp]
- shl edx, cl
- add eax, edx
- lea eax, DWORD PTR [eax+eax*2]
- shl eax, 9
- ; Line 584
- cmp DWORD PTR _state$[ebp], 4
- lea esi, DWORD PTR [eax+esi+3692]
- jge SHORT $L73390
- and DWORD PTR _state$[ebp], 0
- ; Line 585
- jmp SHORT $L73393
- $L73390:
- cmp DWORD PTR _state$[ebp], 10 ; 0000000aH
- jge SHORT $L73392
- sub DWORD PTR _state$[ebp], 3
- ; Line 586
- jmp SHORT $L73393
- $L73392:
- sub DWORD PTR _state$[ebp], 6
- $L73393:
- ; Line 598
- xor ebx, ebx
- cmp DWORD PTR _previousIsMatch$[ebp], ebx
- je SHORT $L73394
- mov eax, DWORD PTR _nowPos$[ebp]
- sub eax, DWORD PTR _rep0$[ebp]
- mov ecx, DWORD PTR _outStream$[ebp]
- mov al, BYTE PTR [eax+ecx]
- mov BYTE PTR $T73491[ebp], al
- inc ebx
- $L73482:
- movzx edi, BYTE PTR $T73491[ebp]
- shl BYTE PTR $T73491[ebp], 1
- shr edi, 7
- lea eax, DWORD PTR [edi+1]
- shl eax, 8
- add eax, ebx
- lea ecx, DWORD PTR [esi+eax*2]
- lea edx, DWORD PTR _rd$[ebp]
- call _RangeDecoderBitDecode
- add ebx, ebx
- or ebx, eax
- cmp edi, eax
- jne SHORT $L73533
- cmp ebx, 256 ; 00000100H
- jl SHORT $L73482
- jmp SHORT $L73484
- $L73488:
- lea edi, DWORD PTR [ebx+ebx]
- lea ecx, DWORD PTR [edi+esi]
- lea edx, DWORD PTR _rd$[ebp]
- call _RangeDecoderBitDecode
- or eax, edi
- mov ebx, eax
- $L73533:
- cmp ebx, 256 ; 00000100H
- jl SHORT $L73488
- $L73484:
- ; Line 599
- and DWORD PTR _previousIsMatch$[ebp], 0
- ; Line 601
- jmp SHORT $L73396
- $L73394:
- ; Line 602
- inc ebx
- $L73495:
- lea edi, DWORD PTR [ebx+ebx]
- lea ecx, DWORD PTR [edi+esi]
- lea edx, DWORD PTR _rd$[ebp]
- call _RangeDecoderBitDecode
- or eax, edi
- mov ebx, eax
- cmp ebx, 256 ; 00000100H
- jl SHORT $L73495
- $L73396:
- ; Line 603
- mov ecx, DWORD PTR _nowPos$[ebp]
- mov eax, DWORD PTR _outStream$[ebp]
- inc DWORD PTR _nowPos$[ebp]
- ; Line 610
- mov esi, DWORD PTR _buffer$[ebp]
- mov BYTE PTR [ecx+eax], bl
- jmp $L73421
- $L73388:
- ; Line 612
- xor ebx, ebx
- inc ebx
- ; Line 613
- lea ecx, DWORD PTR [esi+edi*2+384]
- lea edx, DWORD PTR _rd$[ebp]
- mov DWORD PTR _previousIsMatch$[ebp], ebx
- call _RangeDecoderBitDecode
- cmp eax, ebx
- jne $L73398
- ; Line 615
- lea ecx, DWORD PTR [esi+edi*2+408]
- call _RangeDecoderBitDecode
- test eax, eax
- jne SHORT $L73399
- ; Line 617
- lea eax, DWORD PTR [edi+15]
- shl eax, 4
- add eax, DWORD PTR _posState$73385[ebp]
- lea ecx, DWORD PTR [esi+eax*2]
- call _RangeDecoderBitDecode
- test eax, eax
- jne SHORT $L73530
- ; Line 628
- cmp DWORD PTR _nowPos$[ebp], eax
- je $L73523
- ; Line 640
- mov ecx, DWORD PTR _nowPos$[ebp]
- cmp edi, 7
- setge al
- sub ecx, DWORD PTR _rep0$[ebp]
- lea eax, DWORD PTR [eax+eax+9]
- mov DWORD PTR _state$[ebp], eax
- mov eax, DWORD PTR _outStream$[ebp]
- mov bl, BYTE PTR [ecx+eax]
- ; Line 642
- mov ecx, DWORD PTR _nowPos$[ebp]
- inc DWORD PTR _nowPos$[ebp]
- mov BYTE PTR [ecx+eax], bl
- ; Line 643
- jmp $L73421
- $L73399:
- ; Line 649
- lea ecx, DWORD PTR [esi+edi*2+432]
- call _RangeDecoderBitDecode
- test eax, eax
- jne SHORT $L73404
- ; Line 650
- mov eax, DWORD PTR _rep1$[ebp]
- ; Line 651
- jmp SHORT $L73405
- $L73404:
- ; Line 653
- lea ecx, DWORD PTR [esi+edi*2+456]
- lea edx, DWORD PTR _rd$[ebp]
- call _RangeDecoderBitDecode
- test eax, eax
- jne SHORT $L73406
- ; Line 654
- mov eax, DWORD PTR _rep2$[ebp]
- ; Line 655
- jmp SHORT $L73407
- $L73406:
- ; Line 658
- mov ecx, DWORD PTR _rep2$[ebp]
- mov eax, DWORD PTR _rep3$[ebp]
- mov DWORD PTR _rep3$[ebp], ecx
- $L73407:
- ; Line 660
- mov ecx, DWORD PTR _rep1$[ebp]
- mov DWORD PTR _rep2$[ebp], ecx
- $L73405:
- ; Line 662
- mov ecx, DWORD PTR _rep0$[ebp]
- mov DWORD PTR _rep1$[ebp], ecx
- ; Line 663
- mov DWORD PTR _rep0$[ebp], eax
- $L73530:
- ; Line 665
- mov eax, DWORD PTR _posState$73385[ebp]
- lea ecx, DWORD PTR [esi+2664]
- lea edx, DWORD PTR _rd$[ebp]
- call _LzmaLenDecode
- mov edx, eax
- ; Line 666
- xor eax, eax
- cmp edi, 7
- setge al
- dec eax
- and eax, -3 ; fffffffdH
- add eax, 11 ; 0000000bH
- mov DWORD PTR _state$[ebp], eax
- ; Line 668
- jmp $L73408
- $L73398:
- ; Line 671
- mov eax, DWORD PTR _rep2$[ebp]
- mov DWORD PTR _rep3$[ebp], eax
- ; Line 672
- mov eax, DWORD PTR _rep1$[ebp]
- mov DWORD PTR _rep2$[ebp], eax
- ; Line 673
- mov eax, DWORD PTR _rep0$[ebp]
- mov DWORD PTR _rep1$[ebp], eax
- ; Line 674
- xor eax, eax
- cmp edi, 7
- setge al
- ; Line 675
- lea ecx, DWORD PTR [esi+1636]
- dec eax
- and eax, -3 ; fffffffdH
- add eax, 10 ; 0000000aH
- mov DWORD PTR _state$[ebp], eax
- mov eax, DWORD PTR _posState$73385[ebp]
- call _LzmaLenDecode
- ; Line 678
- cmp eax, 4
- mov DWORD PTR _len$[ebp], eax
- jl SHORT $L73471
- push 3
- pop eax
- $L73471:
- lea ecx, DWORD PTR _rd$[ebp]
- push ecx
- shl eax, 7
- lea eax, DWORD PTR [eax+esi+864]
- push 6
- push eax
- call _RangeDecoderBitTreeDecode
- add esp, 12 ; 0000000cH
- ; Line 679
- cmp eax, 4
- jl $L73410
- ; Line 681
- mov ecx, eax
- ; Line 682
- mov edi, eax
- and edi, ebx
- sar ecx, 1
- dec ecx
- or edi, 2
- shl edi, cl
- ; Line 683
- cmp eax, 14 ; 0000000eH
- mov DWORD PTR _rep0$[ebp], edi
- jge SHORT $L73413
- ; Line 686
- lea edx, DWORD PTR _rd$[ebp]
- push edx
- push ecx
- mov ecx, edi
- sub ecx, eax
- lea eax, DWORD PTR [esi+ecx*2+1374]
- push eax
- call _RangeDecoderReverseBitTreeDecode
- add esp, 12 ; 0000000cH
- add edi, eax
- mov DWORD PTR _rep0$[ebp], edi
- ; Line 688
- jmp SHORT $L73415
- $L73413:
- ; Line 691
- mov eax, DWORD PTR _rd$[ebp+12]
- mov ebx, DWORD PTR _rd$[ebp+8]
- add ecx, -4 ; fffffffcH
- xor edi, edi
- test ecx, ecx
- mov DWORD PTR _code$73502[ebp], eax
- jle SHORT $L73507
- mov DWORD PTR tv329[ebp], ecx
- $L73532:
- shr ebx, 1
- shl edi, 1
- cmp DWORD PTR _code$73502[ebp], ebx
- jb SHORT $L73508
- sub DWORD PTR _code$73502[ebp], ebx
- or edi, 1
- $L73508:
- cmp ebx, 16777216 ; 01000000H
- jae SHORT $L73506
- lea edx, DWORD PTR _rd$[ebp]
- shl ebx, 8
- call _RangeDecoderReadByte
- mov ecx, DWORD PTR _code$73502[ebp]
- movzx eax, al
- shl ecx, 8
- or eax, ecx
- mov DWORD PTR _code$73502[ebp], eax
- $L73506:
- dec DWORD PTR tv329[ebp]
- jne SHORT $L73532
- $L73507:
- mov eax, DWORD PTR _code$73502[ebp]
- mov DWORD PTR _rd$[ebp+12], eax
- ; Line 692
- lea eax, DWORD PTR _rd$[ebp]
- push eax
- lea eax, DWORD PTR [esi+1604]
- push 4
- push eax
- mov DWORD PTR _rd$[ebp+8], ebx
- call _RangeDecoderReverseBitTreeDecode
- shl edi, 4
- add edi, DWORD PTR _rep0$[ebp]
- ; Line 695
- xor ebx, ebx
- add edi, eax
- add esp, 12 ; 0000000cH
- mov DWORD PTR _rep0$[ebp], edi
- inc ebx
- jmp SHORT $L73415
- $L73410:
- ; Line 696
- mov DWORD PTR _rep0$[ebp], eax
- $L73415:
- ; Line 697
- inc DWORD PTR _rep0$[ebp]
- mov edx, DWORD PTR _len$[ebp]
- $L73408:
- ; Line 699
- cmp DWORD PTR _rep0$[ebp], 0
- je $L73531
- ; Line 709
- mov ecx, DWORD PTR _nowPos$[ebp]
- cmp DWORD PTR _rep0$[ebp], ecx
- ja SHORT $L73523
- ; Line 713
- mov edi, DWORD PTR _outStream$[ebp]
- mov eax, ecx
- sub eax, DWORD PTR _rep0$[ebp]
- inc edx
- inc edx
- add eax, edi
- $L73419:
- ; Line 725
- mov bl, BYTE PTR [eax]
- ; Line 727
- mov BYTE PTR [ecx+edi], bl
- inc ecx
- inc eax
- ; Line 728
- dec edx
- ; Line 730
- test edx, edx
- mov DWORD PTR _nowPos$[ebp], ecx
- jle SHORT $L73421
- cmp ecx, DWORD PTR _outSize$[ebp]
- jb SHORT $L73419
- $L73421:
- ; Line 558
- mov eax, DWORD PTR _nowPos$[ebp]
- cmp eax, DWORD PTR _outSize$[ebp]
- jb $L73529
- ; Line 709
- jmp $L73531
- $L73520:
- ; Line 572
- xor eax, eax
- inc eax
- jmp $L73359
- $L73523:
- ; Line 711
- mov eax, ebx
- jmp $L73359
- _LzmaDecode ENDP
-
- ; =================================================================
-
- _DecodeSmall@12_end:
-
- _TEXT ENDS
-
- END
-