📄 deflate.cod
字号:
00417 8b 4f 30 mov ecx, DWORD PTR [edi+48]
0041a 2b c2 sub eax, edx
0041c 50 push eax
0041d 8b 46 08 mov eax, DWORD PTR [esi+8]
00420 03 c2 add eax, edx
00422 50 push eax
00423 51 push ecx
00424 e8 00 00 00 00 call _crc32@12
00429 89 47 30 mov DWORD PTR [edi+48], eax
$LN43@deflate:
; 690 : flush_pending(strm);
0042c 8b c7 mov eax, edi
0042e e8 00 00 00 00 call _flush_pending
; 691 : beg = s->pending;
00433 8b 46 14 mov eax, DWORD PTR [esi+20]
; 692 : if (s->pending == s->pending_buf_size) {
00436 3b 46 0c cmp eax, DWORD PTR [esi+12]
00439 8b d0 mov edx, eax
0043b 74 21 je SHORT $LN96@deflate
$LN42@deflate:
; 694 : break;
; 695 : }
; 696 : }
; 697 : val = s->gzhead->name[s->gzindex++];
0043d 8b 4e 20 mov ecx, DWORD PTR [esi+32]
00440 8b 5e 1c mov ebx, DWORD PTR [esi+28]
00443 8b 5b 1c mov ebx, DWORD PTR [ebx+28]
00446 0f b6 1c 0b movzx ebx, BYTE PTR [ebx+ecx]
0044a 03 cd add ecx, ebp
0044c 89 4e 20 mov DWORD PTR [esi+32], ecx
; 698 : put_byte(s, val);
0044f 8b 4e 08 mov ecx, DWORD PTR [esi+8]
00452 88 1c 08 mov BYTE PTR [eax+ecx], bl
00455 01 6e 14 add DWORD PTR [esi+20], ebp
; 699 : } while (val != 0);
00458 85 db test ebx, ebx
0045a 75 a6 jne SHORT $LL47@deflate
0045c eb 02 jmp SHORT $LN45@deflate
$LN96@deflate:
; 693 : val = 1;
0045e 8b dd mov ebx, ebp
$LN45@deflate:
; 700 : if (s->gzhead->hcrc && s->pending > beg)
00460 8b 46 1c mov eax, DWORD PTR [esi+28]
00463 83 78 2c 00 cmp DWORD PTR [eax+44], 0
00467 74 1c je SHORT $LN41@deflate
00469 8b 46 14 mov eax, DWORD PTR [esi+20]
0046c 3b c2 cmp eax, edx
0046e 76 15 jbe SHORT $LN41@deflate
; 701 : strm->adler = crc32(strm->adler, s->pending_buf + beg,
; 702 : s->pending - beg);
00470 8b 4e 08 mov ecx, DWORD PTR [esi+8]
00473 2b c2 sub eax, edx
00475 50 push eax
00476 03 ca add ecx, edx
00478 8b 57 30 mov edx, DWORD PTR [edi+48]
0047b 51 push ecx
0047c 52 push edx
0047d e8 00 00 00 00 call _crc32@12
00482 89 47 30 mov DWORD PTR [edi+48], eax
$LN41@deflate:
; 703 : if (val == 0) {
00485 85 db test ebx, ebx
00487 75 0a jne SHORT $LN39@deflate
; 704 : s->gzindex = 0;
00489 89 5e 20 mov DWORD PTR [esi+32], ebx
$LN48@deflate:
; 705 : s->status = COMMENT_STATE;
0048c c7 46 04 5b 00
00 00 mov DWORD PTR [esi+4], 91 ; 0000005bH
$LN39@deflate:
; 706 : }
; 707 : }
; 708 : else
; 709 : s->status = COMMENT_STATE;
; 710 : }
; 711 : if (s->status == COMMENT_STATE) {
00493 83 7e 04 5b cmp DWORD PTR [esi+4], 91 ; 0000005bH
00497 0f 85 a2 00 00
00 jne $LN28@deflate
; 712 : if (s->gzhead->comment != NULL) {
0049d 8b 46 1c mov eax, DWORD PTR [esi+28]
004a0 83 78 24 00 cmp DWORD PTR [eax+36], 0
004a4 0f 84 8e 00 00
00 je $LN37@deflate
; 713 : uInt beg = s->pending; /* start of bytes to update crc */
004aa 8b 56 14 mov edx, DWORD PTR [esi+20]
004ad 8d 49 00 npad 3
$LL36@deflate:
; 714 : int val;
; 715 :
; 716 : do {
; 717 : if (s->pending == s->pending_buf_size) {
004b0 8b 46 14 mov eax, DWORD PTR [esi+20]
004b3 3b 46 0c cmp eax, DWORD PTR [esi+12]
004b6 75 33 jne SHORT $LN31@deflate
; 718 : if (s->gzhead->hcrc && s->pending > beg)
004b8 8b 4e 1c mov ecx, DWORD PTR [esi+28]
004bb 83 79 2c 00 cmp DWORD PTR [ecx+44], 0
004bf 74 19 je SHORT $LN32@deflate
004c1 3b c2 cmp eax, edx
004c3 76 15 jbe SHORT $LN32@deflate
; 719 : strm->adler = crc32(strm->adler, s->pending_buf + beg,
; 720 : s->pending - beg);
004c5 8b 4f 30 mov ecx, DWORD PTR [edi+48]
004c8 2b c2 sub eax, edx
004ca 50 push eax
004cb 8b 46 08 mov eax, DWORD PTR [esi+8]
004ce 03 c2 add eax, edx
004d0 50 push eax
004d1 51 push ecx
004d2 e8 00 00 00 00 call _crc32@12
004d7 89 47 30 mov DWORD PTR [edi+48], eax
$LN32@deflate:
; 721 : flush_pending(strm);
004da 8b c7 mov eax, edi
004dc e8 00 00 00 00 call _flush_pending
; 722 : beg = s->pending;
004e1 8b 46 14 mov eax, DWORD PTR [esi+20]
; 723 : if (s->pending == s->pending_buf_size) {
004e4 3b 46 0c cmp eax, DWORD PTR [esi+12]
004e7 8b d0 mov edx, eax
004e9 74 22 je SHORT $LN97@deflate
$LN31@deflate:
; 725 : break;
; 726 : }
; 727 : }
; 728 : val = s->gzhead->comment[s->gzindex++];
004eb 8b 4e 20 mov ecx, DWORD PTR [esi+32]
004ee 8b 5e 1c mov ebx, DWORD PTR [esi+28]
004f1 8b 5b 24 mov ebx, DWORD PTR [ebx+36]
004f4 0f b6 1c 0b movzx ebx, BYTE PTR [ebx+ecx]
004f8 83 c1 01 add ecx, 1
004fb 89 4e 20 mov DWORD PTR [esi+32], ecx
; 729 : put_byte(s, val);
004fe 8b 4e 08 mov ecx, DWORD PTR [esi+8]
00501 88 1c 08 mov BYTE PTR [eax+ecx], bl
00504 01 6e 14 add DWORD PTR [esi+20], ebp
; 730 : } while (val != 0);
00507 85 db test ebx, ebx
00509 75 a5 jne SHORT $LL36@deflate
0050b eb 02 jmp SHORT $LN34@deflate
$LN97@deflate:
; 724 : val = 1;
0050d 8b dd mov ebx, ebp
$LN34@deflate:
; 731 : if (s->gzhead->hcrc && s->pending > beg)
0050f 8b 46 1c mov eax, DWORD PTR [esi+28]
00512 83 78 2c 00 cmp DWORD PTR [eax+44], 0
00516 74 1c je SHORT $LN30@deflate
00518 8b 46 14 mov eax, DWORD PTR [esi+20]
0051b 3b c2 cmp eax, edx
0051d 76 15 jbe SHORT $LN30@deflate
; 732 : strm->adler = crc32(strm->adler, s->pending_buf + beg,
; 733 : s->pending - beg);
0051f 8b 4e 08 mov ecx, DWORD PTR [esi+8]
00522 2b c2 sub eax, edx
00524 50 push eax
00525 03 ca add ecx, edx
00527 8b 57 30 mov edx, DWORD PTR [edi+48]
0052a 51 push ecx
0052b 52 push edx
0052c e8 00 00 00 00 call _crc32@12
00531 89 47 30 mov DWORD PTR [edi+48], eax
$LN30@deflate:
; 734 : if (val == 0)
00534 85 db test ebx, ebx
00536 75 07 jne SHORT $LN28@deflate
$LN37@deflate:
; 735 : s->status = HCRC_STATE;
; 736 : }
; 737 : else
; 738 : s->status = HCRC_STATE;
00538 c7 46 04 67 00
00 00 mov DWORD PTR [esi+4], 103 ; 00000067H
$LN28@deflate:
; 739 : }
; 740 : if (s->status == HCRC_STATE) {
0053f 83 7e 04 67 cmp DWORD PTR [esi+4], 103 ; 00000067H
00543 75 58 jne SHORT $LN101@deflate
; 741 : if (s->gzhead->hcrc) {
00545 8b 46 1c mov eax, DWORD PTR [esi+28]
00548 83 78 2c 00 cmp DWORD PTR [eax+44], 0
0054c 74 48 je SHORT $LN26@deflate
; 742 : if (s->pending + 2 > s->pending_buf_size)
0054e 8b 4e 14 mov ecx, DWORD PTR [esi+20]
00551 83 c1 02 add ecx, 2
00554 3b 4e 0c cmp ecx, DWORD PTR [esi+12]
00557 76 07 jbe SHORT $LN25@deflate
; 743 : flush_pending(strm);
00559 8b c7 mov eax, edi
0055b e8 00 00 00 00 call _flush_pending
$LN25@deflate:
; 744 : if (s->pending + 2 <= s->pending_buf_size) {
00560 8b 46 14 mov eax, DWORD PTR [esi+20]
00563 8d 50 02 lea edx, DWORD PTR [eax+2]
00566 3b 56 0c cmp edx, DWORD PTR [esi+12]
00569 77 32 ja SHORT $LN101@deflate
; 745 : put_byte(s, (Byte)(strm->adler & 0xff));
0056b 0f b6 57 30 movzx edx, BYTE PTR [edi+48]
0056f 8b 4e 08 mov ecx, DWORD PTR [esi+8]
00572 88 14 08 mov BYTE PTR [eax+ecx], dl
00575 01 6e 14 add DWORD PTR [esi+20], ebp
; 746 : put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
00578 0f b6 57 31 movzx edx, BYTE PTR [edi+49]
0057c 8b 46 14 mov eax, DWORD PTR [esi+20]
0057f 8b 4e 08 mov ecx, DWORD PTR [esi+8]
; 747 : strm->adler = crc32(0L, Z_NULL, 0);
00582 6a 00 push 0
00584 6a 00 push 0
00586 88 14 08 mov BYTE PTR [eax+ecx], dl
00589 01 6e 14 add DWORD PTR [esi+20], ebp
0058c 6a 00 push 0
0058e e8 00 00 00 00 call _crc32@12
00593 89 47 30 mov DWORD PTR [edi+48], eax
$LN26@deflate:
; 748 : s->status = BUSY_STATE;
; 749 : }
; 750 : }
; 751 : else
; 752 : s->status = BUSY_STATE;
00596 c7 46 04 71 00
00 00 mov DWORD PTR [esi+4], 113 ; 00000071H
$LN101@deflate:
; 753 : }
; 754 : #endif
; 755 :
; 756 : /* Flush as much pending output as possible */
; 757 : if (s->pending != 0) {
0059d 83 7e 14 00 cmp DWORD PTR [esi+20], 0
005a1 74 1d je SHORT $LN22@deflate
; 758 : flush_pending(strm);
005a3 8b c7 mov eax, edi
005a5 e8 00 00 00 00 call _flush_pending
; 759 : if (strm->avail_out == 0) {
005aa 83 7f 10 00 cmp DWORD PTR [edi+16], 0
005ae 75 38 jne SHORT $LN104@deflate
$LN111@deflate:
; 760 : /* Since avail_out is 0, deflate will be called again with
; 761 : * more output space, but possibly with both pending and
; 762 : * avail_in equal to zero. There won't be anything to do,
; 763 : * but this is not an error situation so make sure we
; 764 : * return OK instead of BUF_ERROR at next call of deflate:
; 765 : */
; 766 : s->last_flush = -1;
005b0 c7 46 28 ff ff
ff ff mov DWORD PTR [esi+40], -1
$LN11@deflate:
005b7 5d pop ebp
005b8 5b pop ebx
005b9 5f pop edi
; 767 : return Z_OK;
005ba 33 c0 xor eax, eax
005bc 5e pop esi
; 856 : }
005bd c2 08 00 ret 8
$LN22@deflate:
; 768 : }
; 769 :
; 770 : /* Make sure there is something to do and avoid duplicate consecutive
; 771 : * flushes. For repeated and useless calls with Z_FINISH, we keep
; 772 : * returning Z_STREAM_END instead of Z_BUF_ERROR.
; 773 : */
; 774 : } else if (strm->avail_in == 0 && flush <= old_flush &&
; 775 : flush != Z_FINISH) {
005c0 83 7f 04 00 cmp DWORD PTR [edi+4], 0
005c4 8b 5c 24 18 mov ebx, DWORD PTR _flush$[esp+12]
005c8 75 22 jne SHORT $LN19@deflate
005ca 3b 5c 24 14 cmp ebx, DWORD PTR _old_flush$[esp+12]
005ce 7f 1c jg SHORT $LN19@deflate
005d0 83 fb 04 cmp ebx, 4
005d3 74 17 je SHORT $LN19@deflate
005d5 5d pop ebp
005d6 5b pop ebx
; 776 : ERR_RETURN(strm, Z_BUF_ERROR);
005d7 c7 47 18 00 00
00 00 mov DWORD PTR [edi+24], OFFSET ??_C@_0N@DFPGLBGC@buffer?5error?$AA@
005de 5f pop edi
005df b8 fb ff ff ff mov eax, -5 ; fffffffbH
005e4 5e pop esi
; 856 : }
005e5 c2 08 00 ret 8
$LN104@deflate:
; 768 : }
; 769 :
; 770 : /* Make sure there is something to do and avoid duplicate consecutive
; 771 : * flushes. For repeated and useless calls with Z_FINISH, we keep
; 772 : * returning Z_STREAM_END instead of Z_BUF_ERROR.
; 773 : */
; 774 : } else if (strm->avail_in == 0 && flush <= old_flush &&
; 775 : flush != Z_FINISH) {
005e8 8b 5c 24 18 mov ebx, DWORD PTR _flush$[esp+12]
$LN19@deflate:
; 777 : }
; 778 :
; 779 : /* User must not provide more input after the first FINISH: */
; 780 : if (s->status == FINISH_STATE && strm->avail_in != 0) {
005ec 8b 46 04 mov eax, DWORD PTR [esi+4]
005ef 3d 9a 02 00 00 cmp eax, 666 ; 0000029aH
005f4 75 19 jne SHORT $LN105@deflate
005f6 83 7f 04 00 cmp DWORD PTR [edi+4], 0
005fa 74 19 je SHORT $LN110@deflate
005fc 5d pop ebp
005fd 5b pop ebx
; 781 : ERR_RETURN(strm, Z_BUF_ERROR);
005fe c7 47 18 00 00
00 00 mov DWORD PTR [edi+24], OFFSET ??_C@_0N@DFPGLBGC@buffer?5error?$AA@
00605 5f pop edi
00606 b8 fb ff ff ff mov eax, -5 ; fffffffbH
0060b 5e pop esi
; 856 : }
0060c c2 08 00 ret 8
$LN105@deflate:
; 782 : }
; 783 :
; 784 : /* Start a new block or continue the current one.
; 785 : */
; 786 : if (strm->avail_in != 0 || s->lookahead != 0 ||
; 787 : (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
0060f 83 7f 04 00 cmp DWORD PTR [edi+4], 0
00613 75 19 jne SHORT $LN16@deflate
$LN110@deflate:
00615 83 7e 74 00 cmp DWORD PTR [esi+116], 0
00619 75 13 jne SHORT $LN16@deflate
0061b 85 db test ebx, ebx
0061d 0f 84 9c 00 00
00 je $LN6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -