; Listing generated by Microsoft (R) Optimizing Compiler Version 19.34.31933.0 include listing.inc INCLUDELIB LIBCMT INCLUDELIB OLDNAMES PUBLIC ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth PUBLIC ?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE PUBLIC ?BASE64_DECODE_TABLE@CMailCoder@@2QBIB ; CMailCoder::BASE64_DECODE_TABLE PUBLIC ?QUOTED_ENCODE_TABLE@CMailCoder@@2QBEB ; CMailCoder::QUOTED_ENCODE_TABLE CONST SEGMENT ?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB DB 041H ; CMailCoder::BASE64_ENCODE_TABLE DB 042H DB 043H DB 044H DB 045H DB 046H DB 047H DB 048H DB 049H DB 04aH DB 04bH DB 04cH DB 04dH DB 04eH DB 04fH DB 050H DB 051H DB 052H DB 053H DB 054H DB 055H DB 056H DB 057H DB 058H DB 059H DB 05aH DB 061H DB 062H DB 063H DB 064H DB 065H DB 066H DB 067H DB 068H DB 069H DB 06aH DB 06bH DB 06cH DB 06dH DB 06eH DB 06fH DB 070H DB 071H DB 072H DB 073H DB 074H DB 075H DB 076H DB 077H DB 078H DB 079H DB 07aH DB 030H DB 031H DB 032H DB 033H DB 034H DB 035H DB 036H DB 037H DB 038H DB 039H DB 02bH DB 02fH ?BASE64_DECODE_TABLE@CMailCoder@@2QBIB DD 0ffH ; CMailCoder::BASE64_DECODE_TABLE DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 03eH DD 0ffH DD 0ffH DD 0ffH DD 03fH DD 034H DD 035H DD 036H DD 037H DD 038H DD 039H DD 03aH DD 03bH DD 03cH DD 03dH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 00H DD 01H DD 02H DD 03H DD 04H DD 05H DD 06H DD 07H DD 08H DD 09H DD 0aH DD 0bH DD 0cH DD 0dH DD 0eH DD 0fH DD 010H DD 011H DD 012H DD 013H DD 014H DD 015H DD 016H DD 017H DD 018H DD 019H DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 01aH DD 01bH DD 01cH DD 01dH DD 01eH DD 01fH DD 020H DD 021H DD 022H DD 023H DD 024H DD 025H DD 026H DD 027H DD 028H DD 029H DD 02aH DD 02bH DD 02cH DD 02dH DD 02eH DD 02fH DD 030H DD 031H DD 032H DD 033H DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH DD 0ffH ?QUOTED_ENCODE_TABLE@CMailCoder@@2QBEB DB 0ffH ; CMailCoder::QUOTED_ENCODE_TABLE DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0aH DB 0ffH DB 0ffH DB 0dH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 021H DB 022H DB 023H DB 024H DB 025H DB 026H DB 027H DB 028H DB 029H DB 02aH DB 02bH DB 02cH DB 02dH DB 02eH DB 02fH DB 030H DB 031H DB 032H DB 033H DB 034H DB 035H DB 036H DB 037H DB 038H DB 039H DB 03aH DB 03bH DB 03cH DB 0ffH DB 03eH DB 03fH DB 040H DB 041H DB 042H DB 043H DB 044H DB 045H DB 046H DB 047H DB 048H DB 049H DB 04aH DB 04bH DB 04cH DB 04dH DB 04eH DB 04fH DB 050H DB 051H DB 052H DB 053H DB 054H DB 055H DB 056H DB 057H DB 058H DB 059H DB 05aH DB 05bH DB 05cH DB 05dH DB 05eH DB 05fH DB 060H DB 061H DB 062H DB 063H DB 064H DB 065H DB 066H DB 067H DB 068H DB 069H DB 06aH DB 06bH DB 06cH DB 06dH DB 06eH DB 06fH DB 070H DB 071H DB 072H DB 073H DB 074H DB 075H DB 076H DB 077H DB 078H DB 079H DB 07aH DB 07bH DB 07cH DB 07dH DB 07eH DB 07fH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH DB 0ffH $SG321191 DB '=?', 00H ORG $+1 $SG321194 DB '?B?', 00H $SG321197 DB '?=', 00H ORG $+1 $SG321199 DB '?Q?', 00H $SG321202 DB '?=', 00H CONST ENDS _DATA SEGMENT ?m_LineWidth@CMailCoder@@2IA DD 04cH ; CMailCoder::m_LineWidth _DATA ENDS PUBLIC ?__empty_global_delete@@YAXPEAX@Z ; __empty_global_delete PUBLIC ?__empty_global_delete@@YAXPEAX_K@Z ; __empty_global_delete PUBLIC ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z ; __empty_global_delete PUBLIC ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z ; __empty_global_delete PUBLIC ?DecToHex@CMailCoder@@CAEE@Z ; CMailCoder::DecToHex PUBLIC ?HexToDec@CMailCoder@@CAEE@Z ; CMailCoder::HexToDec PUBLIC ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar PUBLIC ?email_decode@CMailCoder@@QEAAHPEADI0@Z ; CMailCoder::email_decode PUBLIC ?Base64EncodeSize@CMailCoder@@SAHH@Z ; CMailCoder::Base64EncodeSize PUBLIC ?Base64DecodeSize@CMailCoder@@SAHH@Z ; CMailCoder::Base64DecodeSize PUBLIC ?UUEncodeSize@CMailCoder@@SAHH@Z ; CMailCoder::UUEncodeSize PUBLIC ?UUDecodeSize@CMailCoder@@SAHH@Z ; CMailCoder::UUDecodeSize PUBLIC ?QuotedEncodeSize@CMailCoder@@SAHH@Z ; CMailCoder::QuotedEncodeSize PUBLIC ?base64_encode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::base64_encode PUBLIC ?base64_decode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::base64_decode PUBLIC ?UU_encode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::UU_encode PUBLIC ?UU_decode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::UU_decode PUBLIC ?quoted_encode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::quoted_encode PUBLIC ?quoted_decode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::quoted_decode EXTRN __report_rangecheckfailure:PROC EXTRN memcpy:PROC EXTRN memset:PROC EXTRN strcmp:PROC EXTRN strlen:PROC EXTRN strncpy:PROC EXTRN __GSHandlerCheck:PROC EXTRN __chkstk:PROC EXTRN __security_check_cookie:PROC EXTRN __security_cookie:QWORD ; COMDAT pdata pdata SEGMENT $pdata$?DecToHex@CMailCoder@@CAEE@Z DD imagerel $LN5 DD imagerel $LN5+51 DD imagerel $unwind$?DecToHex@CMailCoder@@CAEE@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?HexToDec@CMailCoder@@CAEE@Z DD imagerel $LN5 DD imagerel $LN5+51 DD imagerel $unwind$?HexToDec@CMailCoder@@CAEE@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?FoundChar@CMailCoder@@QEAAHPEAD0J@Z DD imagerel $LN10 DD imagerel $LN10+279 DD imagerel $unwind$?FoundChar@CMailCoder@@QEAAHPEAD0J@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?email_decode@CMailCoder@@QEAAHPEADI0@Z DD imagerel $LN13 DD imagerel $LN13+667 DD imagerel $unwind$?email_decode@CMailCoder@@QEAAHPEADI0@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Base64EncodeSize@CMailCoder@@SAHH@Z DD imagerel $LN3 DD imagerel $LN3+65 DD imagerel $unwind$?Base64EncodeSize@CMailCoder@@SAHH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?UUEncodeSize@CMailCoder@@SAHH@Z DD imagerel $LN3 DD imagerel $LN3+70 DD imagerel $unwind$?UUEncodeSize@CMailCoder@@SAHH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?QuotedEncodeSize@CMailCoder@@SAHH@Z DD imagerel $LN3 DD imagerel $LN3+56 DD imagerel $unwind$?QuotedEncodeSize@CMailCoder@@SAHH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?base64_encode@CMailCoder@@SAHPEADI0@Z DD imagerel $LN14 DD imagerel $LN14+980 DD imagerel $unwind$?base64_encode@CMailCoder@@SAHPEADI0@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?base64_decode@CMailCoder@@SAHPEADI0@Z DD imagerel $LN16 DD imagerel $LN16+480 DD imagerel $unwind$?base64_decode@CMailCoder@@SAHPEADI0@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?UU_encode@CMailCoder@@SAHPEADI0@Z DD imagerel $LN19 DD imagerel $LN19+654 DD imagerel $unwind$?UU_encode@CMailCoder@@SAHPEADI0@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?UU_decode@CMailCoder@@SAHPEADI0@Z DD imagerel $LN18 DD imagerel $LN18+508 DD imagerel $unwind$?UU_decode@CMailCoder@@SAHPEADI0@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?quoted_encode@CMailCoder@@SAHPEADI0@Z DD imagerel $LN12 DD imagerel $LN12+456 DD imagerel $unwind$?quoted_encode@CMailCoder@@SAHPEADI0@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?quoted_decode@CMailCoder@@SAHPEADI0@Z DD imagerel $LN10 DD imagerel $LN10+408 DD imagerel $unwind$?quoted_decode@CMailCoder@@SAHPEADI0@Z pdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?quoted_decode@CMailCoder@@SAHPEADI0@Z DD 011201H DD 08212H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?quoted_encode@CMailCoder@@SAHPEADI0@Z DD 011201H DD 08212H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?UU_decode@CMailCoder@@SAHPEADI0@Z DD 011201H DD 0a212H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?UU_encode@CMailCoder@@SAHPEADI0@Z DD 011201H DD 06212H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?base64_decode@CMailCoder@@SAHPEADI0@Z DD 011201H DD 06212H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?base64_encode@CMailCoder@@SAHPEADI0@Z DD 011201H DD 08212H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?QuotedEncodeSize@CMailCoder@@SAHH@Z DD 010801H DD 02208H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?UUEncodeSize@CMailCoder@@SAHH@Z DD 010801H DD 02208H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Base64EncodeSize@CMailCoder@@SAHH@Z DD 010801H DD 02208H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?email_decode@CMailCoder@@QEAAHPEADI0@Z DD 011801H DD 0c218H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 02bH DW 0ffH voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?FoundChar@CMailCoder@@QEAAHPEAD0J@Z DD 023319H DD 020b0121H DD imagerel __GSHandlerCheck DD 01040H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?HexToDec@CMailCoder@@CAEE@Z DD 010801H DD 02208H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?DecToHex@CMailCoder@@CAEE@Z DD 010801H DD 02208H xdata ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?quoted_decode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT tv74 = 32 tv83 = 33 tv88 = 34 nA$ = 35 nB$ = 36 C$ = 40 InLimitPtr$ = 48 pDestOrg$ = 56 pSrc$ = 80 nSize$ = 88 pDest$ = 96 ?quoted_decode@CMailCoder@@SAHPEADI0@Z PROC ; CMailCoder::quoted_decode, COMDAT ; 447 : { $LN10: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 89 54 24 10 mov DWORD PTR [rsp+16], edx 00009 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000e 48 83 ec 48 sub rsp, 72 ; 00000048H ; 448 : if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0; 00012 48 83 7c 24 50 00 cmp QWORD PTR pSrc$[rsp], 0 00018 74 0f je SHORT $LN5@quoted_dec 0001a 48 83 7c 24 60 00 cmp QWORD PTR pDest$[rsp], 0 00020 74 07 je SHORT $LN5@quoted_dec 00022 83 7c 24 58 00 cmp DWORD PTR nSize$[rsp], 0 00027 77 07 ja SHORT $LN4@quoted_dec $LN5@quoted_dec: 00029 33 c0 xor eax, eax 0002b e9 63 01 00 00 jmp $LN1@quoted_dec $LN4@quoted_dec: ; 449 : ; 450 : unsigned char nA, nB; ; 451 : char C[2]; //临时阅读变量 ; 452 : ; 453 : char *InLimitPtr= pSrc + nSize; 00030 8b 44 24 58 mov eax, DWORD PTR nSize$[rsp] 00034 48 8b 4c 24 50 mov rcx, QWORD PTR pSrc$[rsp] 00039 48 03 c8 add rcx, rax 0003c 48 8b c1 mov rax, rcx 0003f 48 89 44 24 30 mov QWORD PTR InLimitPtr$[rsp], rax ; 454 : char *pDestOrg = pDest; 00044 48 8b 44 24 60 mov rax, QWORD PTR pDest$[rsp] 00049 48 89 44 24 38 mov QWORD PTR pDestOrg$[rsp], rax $LN2@quoted_dec: ; 455 : ; 456 : while (pSrc < InLimitPtr) 0004e 48 8b 44 24 30 mov rax, QWORD PTR InLimitPtr$[rsp] 00053 48 39 44 24 50 cmp QWORD PTR pSrc$[rsp], rax 00058 0f 83 25 01 00 00 jae $LN3@quoted_dec ; 457 : { ; 458 : C[0] = *pSrc++; //先取第一字符 0005e 48 8b 44 24 50 mov rax, QWORD PTR pSrc$[rsp] 00063 0f b6 00 movzx eax, BYTE PTR [rax] 00066 88 44 24 20 mov BYTE PTR tv74[rsp], al 0006a 48 8b 44 24 50 mov rax, QWORD PTR pSrc$[rsp] 0006f 48 ff c0 inc rax 00072 48 89 44 24 50 mov QWORD PTR pSrc$[rsp], rax 00077 b8 01 00 00 00 mov eax, 1 0007c 48 6b c0 00 imul rax, rax, 0 00080 0f b6 4c 24 20 movzx ecx, BYTE PTR tv74[rsp] 00085 88 4c 04 28 mov BYTE PTR C$[rsp+rax], cl ; 459 : if (C[0] == '=') //如果后面是经过编码的 00089 b8 01 00 00 00 mov eax, 1 0008e 48 6b c0 00 imul rax, rax, 0 00092 0f be 44 04 28 movsx eax, BYTE PTR C$[rsp+rax] 00097 83 f8 3d cmp eax, 61 ; 0000003dH 0009a 0f 85 bc 00 00 00 jne $LN6@quoted_dec ; 460 : { ; 461 : C[0] = *pSrc++; //取出两个编码字符 000a0 48 8b 44 24 50 mov rax, QWORD PTR pSrc$[rsp] 000a5 0f b6 00 movzx eax, BYTE PTR [rax] 000a8 88 44 24 21 mov BYTE PTR tv83[rsp], al 000ac 48 8b 44 24 50 mov rax, QWORD PTR pSrc$[rsp] 000b1 48 ff c0 inc rax 000b4 48 89 44 24 50 mov QWORD PTR pSrc$[rsp], rax 000b9 b8 01 00 00 00 mov eax, 1 000be 48 6b c0 00 imul rax, rax, 0 000c2 0f b6 4c 24 21 movzx ecx, BYTE PTR tv83[rsp] 000c7 88 4c 04 28 mov BYTE PTR C$[rsp+rax], cl ; 462 : C[1] = *pSrc++; 000cb 48 8b 44 24 50 mov rax, QWORD PTR pSrc$[rsp] 000d0 0f b6 00 movzx eax, BYTE PTR [rax] 000d3 88 44 24 22 mov BYTE PTR tv88[rsp], al 000d7 48 8b 44 24 50 mov rax, QWORD PTR pSrc$[rsp] 000dc 48 ff c0 inc rax 000df 48 89 44 24 50 mov QWORD PTR pSrc$[rsp], rax 000e4 b8 01 00 00 00 mov eax, 1 000e9 48 6b c0 01 imul rax, rax, 1 000ed 0f b6 4c 24 22 movzx ecx, BYTE PTR tv88[rsp] 000f2 88 4c 04 28 mov BYTE PTR C$[rsp+rax], cl ; 463 : ; 464 : if (C[0] != '\r') 000f6 b8 01 00 00 00 mov eax, 1 000fb 48 6b c0 00 imul rax, rax, 0 000ff 0f be 44 04 28 movsx eax, BYTE PTR C$[rsp+rax] 00104 83 f8 0d cmp eax, 13 00107 74 51 je SHORT $LN8@quoted_dec ; 465 : { ; 466 : nA = HexToDec(C[0]); //解码变换 00109 b8 01 00 00 00 mov eax, 1 0010e 48 6b c0 00 imul rax, rax, 0 00112 0f b6 4c 04 28 movzx ecx, BYTE PTR C$[rsp+rax] 00117 e8 00 00 00 00 call ?HexToDec@CMailCoder@@CAEE@Z ; CMailCoder::HexToDec 0011c 88 44 24 23 mov BYTE PTR nA$[rsp], al ; 467 : nB = HexToDec(C[1]); 00120 b8 01 00 00 00 mov eax, 1 00125 48 6b c0 01 imul rax, rax, 1 00129 0f b6 4c 04 28 movzx ecx, BYTE PTR C$[rsp+rax] 0012e e8 00 00 00 00 call ?HexToDec@CMailCoder@@CAEE@Z ; CMailCoder::HexToDec 00133 88 44 24 24 mov BYTE PTR nB$[rsp], al ; 468 : *pDest++ = (nA << 4) + nB; 00137 0f b6 44 24 23 movzx eax, BYTE PTR nA$[rsp] 0013c c1 e0 04 shl eax, 4 0013f 0f b6 4c 24 24 movzx ecx, BYTE PTR nB$[rsp] 00144 03 c1 add eax, ecx 00146 48 8b 4c 24 60 mov rcx, QWORD PTR pDest$[rsp] 0014b 88 01 mov BYTE PTR [rcx], al 0014d 48 8b 44 24 60 mov rax, QWORD PTR pDest$[rsp] 00152 48 ff c0 inc rax 00155 48 89 44 24 60 mov QWORD PTR pDest$[rsp], rax $LN8@quoted_dec: ; 469 : } ; 470 : } 0015a eb 22 jmp SHORT $LN7@quoted_dec $LN6@quoted_dec: ; 471 : else //否则直接输出 ; 472 : { ; 473 : *pDest++ = C[0]; 0015c b8 01 00 00 00 mov eax, 1 00161 48 6b c0 00 imul rax, rax, 0 00165 48 8b 4c 24 60 mov rcx, QWORD PTR pDest$[rsp] 0016a 0f b6 44 04 28 movzx eax, BYTE PTR C$[rsp+rax] 0016f 88 01 mov BYTE PTR [rcx], al 00171 48 8b 44 24 60 mov rax, QWORD PTR pDest$[rsp] 00176 48 ff c0 inc rax 00179 48 89 44 24 60 mov QWORD PTR pDest$[rsp], rax $LN7@quoted_dec: ; 474 : } ; 475 : } 0017e e9 cb fe ff ff jmp $LN2@quoted_dec $LN3@quoted_dec: ; 476 : return (unsigned int)(pDest - pDestOrg); 00183 48 8b 44 24 38 mov rax, QWORD PTR pDestOrg$[rsp] 00188 48 8b 4c 24 60 mov rcx, QWORD PTR pDest$[rsp] 0018d 48 2b c8 sub rcx, rax 00190 48 8b c1 mov rax, rcx $LN1@quoted_dec: ; 477 : } 00193 48 83 c4 48 add rsp, 72 ; 00000048H 00197 c3 ret 0 ?quoted_decode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::quoted_decode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?quoted_encode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT B$ = 32 tv74 = 33 Len$ = 36 OutPtr$ = 40 InPtr$ = 48 InLimitPtr$ = 56 pSrc$ = 80 nSize$ = 88 pDest$ = 96 ?quoted_encode@CMailCoder@@SAHPEADI0@Z PROC ; CMailCoder::quoted_encode, COMDAT ; 401 : { $LN12: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 89 54 24 10 mov DWORD PTR [rsp+16], edx 00009 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000e 48 83 ec 48 sub rsp, 72 ; 00000048H ; 402 : unsigned int Len; ; 403 : unsigned char B; //临时阅读变量 ; 404 : char *InPtr, *InLimitPtr; ; 405 : char *OutPtr; ; 406 : ; 407 : if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0; 00012 48 83 7c 24 50 00 cmp QWORD PTR pSrc$[rsp], 0 00018 74 0f je SHORT $LN7@quoted_enc 0001a 48 83 7c 24 60 00 cmp QWORD PTR pDest$[rsp], 0 00020 74 07 je SHORT $LN7@quoted_enc 00022 83 7c 24 58 00 cmp DWORD PTR nSize$[rsp], 0 00027 77 07 ja SHORT $LN6@quoted_enc $LN7@quoted_enc: 00029 33 c0 xor eax, eax 0002b e9 93 01 00 00 jmp $LN1@quoted_enc $LN6@quoted_enc: ; 408 : ; 409 : InPtr = pSrc; 00030 48 8b 44 24 50 mov rax, QWORD PTR pSrc$[rsp] 00035 48 89 44 24 30 mov QWORD PTR InPtr$[rsp], rax ; 410 : InLimitPtr= InPtr + nSize; 0003a 8b 44 24 58 mov eax, DWORD PTR nSize$[rsp] 0003e 48 8b 4c 24 30 mov rcx, QWORD PTR InPtr$[rsp] 00043 48 03 c8 add rcx, rax 00046 48 8b c1 mov rax, rcx 00049 48 89 44 24 38 mov QWORD PTR InLimitPtr$[rsp], rax ; 411 : OutPtr = pDest; 0004e 48 8b 44 24 60 mov rax, QWORD PTR pDest$[rsp] 00053 48 89 44 24 28 mov QWORD PTR OutPtr$[rsp], rax $LN2@quoted_enc: ; 412 : ; 413 : while (InPtr < InLimitPtr) 00058 48 8b 44 24 38 mov rax, QWORD PTR InLimitPtr$[rsp] 0005d 48 39 44 24 30 cmp QWORD PTR InPtr$[rsp], rax 00062 0f 83 43 01 00 00 jae $LN3@quoted_enc ; 414 : { ; 415 : Len = 0; 00068 c7 44 24 24 00 00 00 00 mov DWORD PTR Len$[rsp], 0 $LN4@quoted_enc: ; 416 : while ((InPtr < InLimitPtr) && (Len < m_LineWidth)) 00070 48 8b 44 24 38 mov rax, QWORD PTR InLimitPtr$[rsp] 00075 48 39 44 24 30 cmp QWORD PTR InPtr$[rsp], rax 0007a 0f 83 db 00 00 00 jae $LN5@quoted_enc 00080 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00086 39 44 24 24 cmp DWORD PTR Len$[rsp], eax 0008a 0f 83 cb 00 00 00 jae $LN5@quoted_enc ; 417 : { ; 418 : B = *InPtr++; 00090 48 8b 44 24 30 mov rax, QWORD PTR InPtr$[rsp] 00095 0f b6 00 movzx eax, BYTE PTR [rax] 00098 88 44 24 21 mov BYTE PTR tv74[rsp], al 0009c 48 8b 44 24 30 mov rax, QWORD PTR InPtr$[rsp] 000a1 48 ff c0 inc rax 000a4 48 89 44 24 30 mov QWORD PTR InPtr$[rsp], rax 000a9 0f b6 44 24 21 movzx eax, BYTE PTR tv74[rsp] 000ae 88 44 24 20 mov BYTE PTR B$[rsp], al ; 419 : if (QUOTED_ENCODE_TABLE[ B ] == 255) 000b2 0f b6 44 24 20 movzx eax, BYTE PTR B$[rsp] 000b7 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?QUOTED_ENCODE_TABLE@CMailCoder@@2QBEB ; CMailCoder::QUOTED_ENCODE_TABLE 000be 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000c2 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 000c7 75 6a jne SHORT $LN8@quoted_enc ; 420 : { ; 421 : *OutPtr++ = '='; 000c9 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 000ce c6 00 3d mov BYTE PTR [rax], 61 ; 0000003dH 000d1 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 000d6 48 ff c0 inc rax 000d9 48 89 44 24 28 mov QWORD PTR OutPtr$[rsp], rax ; 422 : *OutPtr++ = DecToHex(B >> 4); 000de 0f b6 44 24 20 movzx eax, BYTE PTR B$[rsp] 000e3 c1 f8 04 sar eax, 4 000e6 0f b6 c8 movzx ecx, al 000e9 e8 00 00 00 00 call ?DecToHex@CMailCoder@@CAEE@Z ; CMailCoder::DecToHex 000ee 48 8b 4c 24 28 mov rcx, QWORD PTR OutPtr$[rsp] 000f3 88 01 mov BYTE PTR [rcx], al 000f5 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 000fa 48 ff c0 inc rax 000fd 48 89 44 24 28 mov QWORD PTR OutPtr$[rsp], rax ; 423 : *OutPtr++ = DecToHex(B & 0x0f); 00102 0f b6 44 24 20 movzx eax, BYTE PTR B$[rsp] 00107 83 e0 0f and eax, 15 0010a 0f b6 c8 movzx ecx, al 0010d e8 00 00 00 00 call ?DecToHex@CMailCoder@@CAEE@Z ; CMailCoder::DecToHex 00112 48 8b 4c 24 28 mov rcx, QWORD PTR OutPtr$[rsp] 00117 88 01 mov BYTE PTR [rcx], al 00119 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 0011e 48 ff c0 inc rax 00121 48 89 44 24 28 mov QWORD PTR OutPtr$[rsp], rax ; 424 : Len+=3; 00126 8b 44 24 24 mov eax, DWORD PTR Len$[rsp] 0012a 83 c0 03 add eax, 3 0012d 89 44 24 24 mov DWORD PTR Len$[rsp], eax ; 425 : } 00131 eb 23 jmp SHORT $LN9@quoted_enc $LN8@quoted_enc: ; 426 : else ; 427 : { ; 428 : *OutPtr++ = B; 00133 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 00138 0f b6 4c 24 20 movzx ecx, BYTE PTR B$[rsp] 0013d 88 08 mov BYTE PTR [rax], cl 0013f 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 00144 48 ff c0 inc rax 00147 48 89 44 24 28 mov QWORD PTR OutPtr$[rsp], rax ; 429 : Len++; 0014c 8b 44 24 24 mov eax, DWORD PTR Len$[rsp] 00150 ff c0 inc eax 00152 89 44 24 24 mov DWORD PTR Len$[rsp], eax $LN9@quoted_enc: ; 430 : } ; 431 : } 00156 e9 15 ff ff ff jmp $LN4@quoted_enc $LN5@quoted_enc: ; 432 : if (Len >= m_LineWidth) 0015b 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00161 39 44 24 24 cmp DWORD PTR Len$[rsp], eax 00165 72 3f jb SHORT $LN10@quoted_enc ; 433 : { ; 434 : *OutPtr++ = '='; 00167 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 0016c c6 00 3d mov BYTE PTR [rax], 61 ; 0000003dH 0016f 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 00174 48 ff c0 inc rax 00177 48 89 44 24 28 mov QWORD PTR OutPtr$[rsp], rax ; 435 : *OutPtr++ = '\r'; //设置新行 0017c 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 00181 c6 00 0d mov BYTE PTR [rax], 13 00184 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 00189 48 ff c0 inc rax 0018c 48 89 44 24 28 mov QWORD PTR OutPtr$[rsp], rax ; 436 : *OutPtr++ = '\n'; 00191 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 00196 c6 00 0a mov BYTE PTR [rax], 10 00199 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 0019e 48 ff c0 inc rax 001a1 48 89 44 24 28 mov QWORD PTR OutPtr$[rsp], rax $LN10@quoted_enc: ; 437 : } ; 438 : } 001a6 e9 ad fe ff ff jmp $LN2@quoted_enc $LN3@quoted_enc: ; 439 : *OutPtr = '\0'; 001ab 48 8b 44 24 28 mov rax, QWORD PTR OutPtr$[rsp] 001b0 c6 00 00 mov BYTE PTR [rax], 0 ; 440 : return (unsigned int) (OutPtr - pDest); 001b3 48 8b 44 24 60 mov rax, QWORD PTR pDest$[rsp] 001b8 48 8b 4c 24 28 mov rcx, QWORD PTR OutPtr$[rsp] 001bd 48 2b c8 sub rcx, rax 001c0 48 8b c1 mov rax, rcx $LN1@quoted_enc: ; 441 : } 001c3 48 83 c4 48 add rsp, 72 ; 00000048H 001c7 c3 ret 0 ?quoted_encode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::quoted_encode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?UU_decode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT Tmp$ = 32 tv75 = 33 C$ = 36 CurrIndex$ = 40 Index$ = 44 InPtr$ = 48 OutPtr$ = 56 InLimitPtr$ = 64 pSrc$ = 96 nSize$ = 104 pDest$ = 112 ?UU_decode@CMailCoder@@SAHPEADI0@Z PROC ; CMailCoder::UU_decode, COMDAT ; 341 : { $LN18: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 89 54 24 10 mov DWORD PTR [rsp+16], edx 00009 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000e 48 83 ec 58 sub rsp, 88 ; 00000058H ; 342 : char C[4]; //临时阅读变量 ; 343 : char Tmp; ; 344 : int CurrIndex, Index; ; 345 : char *InPtr, *InLimitPtr; ; 346 : char *OutPtr; ; 347 : ; 348 : if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0; 00012 48 83 7c 24 60 00 cmp QWORD PTR pSrc$[rsp], 0 00018 74 0f je SHORT $LN8@UU_decode 0001a 48 83 7c 24 70 00 cmp QWORD PTR pDest$[rsp], 0 00020 74 07 je SHORT $LN8@UU_decode 00022 83 7c 24 68 00 cmp DWORD PTR nSize$[rsp], 0 00027 77 07 ja SHORT $LN7@UU_decode $LN8@UU_decode: 00029 33 c0 xor eax, eax 0002b e9 c7 01 00 00 jmp $LN1@UU_decode $LN7@UU_decode: ; 349 : ; 350 : CurrIndex = 0; 00030 c7 44 24 28 00 00 00 00 mov DWORD PTR CurrIndex$[rsp], 0 ; 351 : ; 352 : InPtr = pSrc; 00038 48 8b 44 24 60 mov rax, QWORD PTR pSrc$[rsp] 0003d 48 89 44 24 30 mov QWORD PTR InPtr$[rsp], rax ; 353 : InLimitPtr= InPtr + nSize; 00042 8b 44 24 68 mov eax, DWORD PTR nSize$[rsp] 00046 48 8b 4c 24 30 mov rcx, QWORD PTR InPtr$[rsp] 0004b 48 03 c8 add rcx, rax 0004e 48 8b c1 mov rax, rcx 00051 48 89 44 24 40 mov QWORD PTR InLimitPtr$[rsp], rax ; 354 : OutPtr = pDest; 00056 48 8b 44 24 70 mov rax, QWORD PTR pDest$[rsp] 0005b 48 89 44 24 38 mov QWORD PTR OutPtr$[rsp], rax $LN2@UU_decode: ; 355 : ; 356 : while (InPtr != InLimitPtr) //读取4个字符 00060 48 8b 44 24 40 mov rax, QWORD PTR InLimitPtr$[rsp] 00065 48 39 44 24 30 cmp QWORD PTR InPtr$[rsp], rax 0006a 0f 84 7b 01 00 00 je $LN3@UU_decode ; 357 : { ; 358 : memset(C, 0, sizeof(C)); 00070 41 b8 04 00 00 00 mov r8d, 4 00076 33 d2 xor edx, edx 00078 48 8d 4c 24 24 lea rcx, QWORD PTR C$[rsp] 0007d e8 00 00 00 00 call memset ; 359 : Index = 0; 00082 c7 44 24 2c 00 00 00 00 mov DWORD PTR Index$[rsp], 0 $LN6@UU_decode: ; 360 : do ; 361 : { ; 362 : Tmp = *InPtr++; 0008a 48 8b 44 24 30 mov rax, QWORD PTR InPtr$[rsp] 0008f 0f b6 00 movzx eax, BYTE PTR [rax] 00092 88 44 24 21 mov BYTE PTR tv75[rsp], al 00096 48 8b 44 24 30 mov rax, QWORD PTR InPtr$[rsp] 0009b 48 ff c0 inc rax 0009e 48 89 44 24 30 mov QWORD PTR InPtr$[rsp], rax 000a3 0f b6 44 24 21 movzx eax, BYTE PTR tv75[rsp] 000a8 88 44 24 20 mov BYTE PTR Tmp$[rsp], al ; 363 : if (Tmp == 0x60) 000ac 0f be 44 24 20 movsx eax, BYTE PTR Tmp$[rsp] 000b1 83 f8 60 cmp eax, 96 ; 00000060H 000b4 75 07 jne SHORT $LN9@UU_decode ; 364 : { ; 365 : Tmp = 0x20; //为了兼容OutLook Express 000b6 c6 44 24 20 20 mov BYTE PTR Tmp$[rsp], 32 ; 00000020H ; 366 : } 000bb eb 1f jmp SHORT $LN10@UU_decode $LN9@UU_decode: ; 367 : else if (Tmp =='\r') //首个字母不处理 000bd 0f be 44 24 20 movsx eax, BYTE PTR Tmp$[rsp] 000c2 83 f8 0d cmp eax, 13 000c5 75 15 jne SHORT $LN11@UU_decode ; 368 : { ; 369 : InPtr++; 000c7 48 8b 44 24 30 mov rax, QWORD PTR InPtr$[rsp] 000cc 48 ff c0 inc rax 000cf 48 89 44 24 30 mov QWORD PTR InPtr$[rsp], rax ; 370 : CurrIndex = 0; 000d4 c7 44 24 28 00 00 00 00 mov DWORD PTR CurrIndex$[rsp], 0 $LN11@UU_decode: $LN10@UU_decode: ; 371 : } ; 372 : ; 373 : if ((Tmp > 0x20) || ( CurrIndex > 0 )) 000dc 0f be 44 24 20 movsx eax, BYTE PTR Tmp$[rsp] 000e1 83 f8 20 cmp eax, 32 ; 00000020H 000e4 7f 07 jg SHORT $LN13@UU_decode 000e6 83 7c 24 28 00 cmp DWORD PTR CurrIndex$[rsp], 0 000eb 7e 36 jle SHORT $LN12@UU_decode $LN13@UU_decode: ; 374 : { ; 375 : Tmp = Tmp - 0x20; 000ed 0f be 44 24 20 movsx eax, BYTE PTR Tmp$[rsp] 000f2 83 e8 20 sub eax, 32 ; 00000020H 000f5 88 44 24 20 mov BYTE PTR Tmp$[rsp], al ; 376 : if (CurrIndex == 0) 000f9 83 7c 24 28 00 cmp DWORD PTR CurrIndex$[rsp], 0 000fe 75 0b jne SHORT $LN14@UU_decode ; 377 : { ; 378 : CurrIndex = Tmp; 00100 0f be 44 24 20 movsx eax, BYTE PTR Tmp$[rsp] 00105 89 44 24 28 mov DWORD PTR CurrIndex$[rsp], eax ; 379 : } 00109 eb 18 jmp SHORT $LN15@UU_decode $LN14@UU_decode: ; 380 : else ; 381 : { ; 382 : C[Index] = Tmp; // 向数组中追加字符 0010b 48 63 44 24 2c movsxd rax, DWORD PTR Index$[rsp] 00110 0f b6 4c 24 20 movzx ecx, BYTE PTR Tmp$[rsp] 00115 88 4c 04 24 mov BYTE PTR C$[rsp+rax], cl ; 383 : Index++; 00119 8b 44 24 2c mov eax, DWORD PTR Index$[rsp] 0011d ff c0 inc eax 0011f 89 44 24 2c mov DWORD PTR Index$[rsp], eax $LN15@UU_decode: $LN12@UU_decode: ; 384 : } ; 385 : } ; 386 : } ; 387 : while ((InPtr < InLimitPtr) && (Index < sizeof(C))); 00123 48 8b 44 24 40 mov rax, QWORD PTR InLimitPtr$[rsp] 00128 48 39 44 24 30 cmp QWORD PTR InPtr$[rsp], rax 0012d 73 0f jae SHORT $LN16@UU_decode 0012f 48 63 44 24 2c movsxd rax, DWORD PTR Index$[rsp] 00134 48 83 f8 04 cmp rax, 4 00138 0f 82 4c ff ff ff jb $LN6@UU_decode $LN16@UU_decode: ; 388 : ; 389 : OutPtr[0] = (char) ((C[0] << 2) + (C[1] >> 4)); 0013e b8 01 00 00 00 mov eax, 1 00143 48 6b c0 00 imul rax, rax, 0 00147 0f be 44 04 24 movsx eax, BYTE PTR C$[rsp+rax] 0014c b9 01 00 00 00 mov ecx, 1 00151 48 6b c9 01 imul rcx, rcx, 1 00155 0f be 4c 0c 24 movsx ecx, BYTE PTR C$[rsp+rcx] 0015a c1 f9 04 sar ecx, 4 0015d 8d 04 81 lea eax, DWORD PTR [rcx+rax*4] 00160 b9 01 00 00 00 mov ecx, 1 00165 48 6b c9 00 imul rcx, rcx, 0 00169 48 8b 54 24 38 mov rdx, QWORD PTR OutPtr$[rsp] 0016e 88 04 0a mov BYTE PTR [rdx+rcx], al ; 390 : OutPtr[1] = (char) ((C[1] << 4) + (C[2] >> 2)); 00171 b8 01 00 00 00 mov eax, 1 00176 48 6b c0 01 imul rax, rax, 1 0017a 0f be 44 04 24 movsx eax, BYTE PTR C$[rsp+rax] 0017f c1 e0 04 shl eax, 4 00182 b9 01 00 00 00 mov ecx, 1 00187 48 6b c9 02 imul rcx, rcx, 2 0018b 0f be 4c 0c 24 movsx ecx, BYTE PTR C$[rsp+rcx] 00190 c1 f9 02 sar ecx, 2 00193 03 c1 add eax, ecx 00195 b9 01 00 00 00 mov ecx, 1 0019a 48 6b c9 01 imul rcx, rcx, 1 0019e 48 8b 54 24 38 mov rdx, QWORD PTR OutPtr$[rsp] 001a3 88 04 0a mov BYTE PTR [rdx+rcx], al ; 391 : OutPtr[2] = (char) ((C[2] << 6) + C[3]); 001a6 b8 01 00 00 00 mov eax, 1 001ab 48 6b c0 02 imul rax, rax, 2 001af 0f be 44 04 24 movsx eax, BYTE PTR C$[rsp+rax] 001b4 c1 e0 06 shl eax, 6 001b7 b9 01 00 00 00 mov ecx, 1 001bc 48 6b c9 03 imul rcx, rcx, 3 001c0 0f be 4c 0c 24 movsx ecx, BYTE PTR C$[rsp+rcx] 001c5 03 c1 add eax, ecx 001c7 b9 01 00 00 00 mov ecx, 1 001cc 48 6b c9 02 imul rcx, rcx, 2 001d0 48 8b 54 24 38 mov rdx, QWORD PTR OutPtr$[rsp] 001d5 88 04 0a mov BYTE PTR [rdx+rcx], al ; 392 : OutPtr+=3; //设置起始位置 001d8 48 8b 44 24 38 mov rax, QWORD PTR OutPtr$[rsp] 001dd 48 83 c0 03 add rax, 3 001e1 48 89 44 24 38 mov QWORD PTR OutPtr$[rsp], rax ; 393 : } 001e6 e9 75 fe ff ff jmp $LN2@UU_decode $LN3@UU_decode: ; 394 : return (unsigned int)OutPtr - (unsigned int)pDest; 001eb 8b 44 24 70 mov eax, DWORD PTR pDest$[rsp] 001ef 8b 4c 24 38 mov ecx, DWORD PTR OutPtr$[rsp] 001f3 2b c8 sub ecx, eax 001f5 8b c1 mov eax, ecx $LN1@UU_decode: ; 395 : } 001f7 48 83 c4 58 add rsp, 88 ; 00000058H 001fb c3 ret 0 ?UU_decode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::UU_decode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?UU_encode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT tv81 = 0 B$ = 4 i$1 = 8 Len$ = 12 lByteBufferSpace$ = 16 OutPtr$ = 24 InPtr$ = 32 InLimitPtr$ = 40 pSrc$ = 64 nSize$ = 72 pDest$ = 80 ?UU_encode@CMailCoder@@SAHPEADI0@Z PROC ; CMailCoder::UU_encode, COMDAT ; 285 : { $LN19: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 89 54 24 10 mov DWORD PTR [rsp+16], edx 00009 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000e 48 83 ec 38 sub rsp, 56 ; 00000038H ; 286 : if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0; 00012 48 83 7c 24 40 00 cmp QWORD PTR pSrc$[rsp], 0 00018 74 0f je SHORT $LN13@UU_encode 0001a 48 83 7c 24 50 00 cmp QWORD PTR pDest$[rsp], 0 00020 74 07 je SHORT $LN13@UU_encode 00022 83 7c 24 48 00 cmp DWORD PTR nSize$[rsp], 0 00027 77 07 ja SHORT $LN12@UU_encode $LN13@UU_encode: 00029 33 c0 xor eax, eax 0002b e9 59 02 00 00 jmp $LN1@UU_encode $LN12@UU_encode: ; 287 : ; 288 : unsigned int lByteBufferSpace, Len; ; 289 : unsigned char B[3]; //临时阅读变量 ; 290 : char *InPtr, *InLimitPtr; ; 291 : char *OutPtr; ; 292 : ; 293 : InPtr = pSrc; 00030 48 8b 44 24 40 mov rax, QWORD PTR pSrc$[rsp] 00035 48 89 44 24 20 mov QWORD PTR InPtr$[rsp], rax ; 294 : InLimitPtr= InPtr + nSize; 0003a 8b 44 24 48 mov eax, DWORD PTR nSize$[rsp] 0003e 48 8b 4c 24 20 mov rcx, QWORD PTR InPtr$[rsp] 00043 48 03 c8 add rcx, rax 00046 48 8b c1 mov rax, rcx 00049 48 89 44 24 28 mov QWORD PTR InLimitPtr$[rsp], rax ; 295 : OutPtr = pDest; 0004e 48 8b 44 24 50 mov rax, QWORD PTR pDest$[rsp] 00053 48 89 44 24 18 mov QWORD PTR OutPtr$[rsp], rax $LN2@UU_encode: ; 296 : ; 297 : while (InPtr < InLimitPtr) 00058 48 8b 44 24 28 mov rax, QWORD PTR InLimitPtr$[rsp] 0005d 48 39 44 24 20 cmp QWORD PTR InPtr$[rsp], rax 00062 0f 83 11 02 00 00 jae $LN3@UU_encode ; 298 : { ; 299 : Len = 0; 00068 c7 44 24 0c 00 00 00 00 mov DWORD PTR Len$[rsp], 0 $LN4@UU_encode: ; 300 : ; 301 : while ((InPtr < InLimitPtr) && (Len < m_LineWidth)) 00070 48 8b 44 24 28 mov rax, QWORD PTR InLimitPtr$[rsp] 00075 48 39 44 24 20 cmp QWORD PTR InPtr$[rsp], rax 0007a 0f 83 ca 01 00 00 jae $LN5@UU_encode 00080 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00086 39 44 24 0c cmp DWORD PTR Len$[rsp], eax 0008a 0f 83 ba 01 00 00 jae $LN5@UU_encode ; 302 : { ; 303 : lByteBufferSpace = (unsigned int) InLimitPtr - (unsigned int) InPtr; 00090 8b 44 24 20 mov eax, DWORD PTR InPtr$[rsp] 00094 8b 4c 24 28 mov ecx, DWORD PTR InLimitPtr$[rsp] 00098 2b c8 sub ecx, eax 0009a 8b c1 mov eax, ecx 0009c 89 44 24 10 mov DWORD PTR lByteBufferSpace$[rsp], eax ; 304 : if (lByteBufferSpace > 3) lByteBufferSpace = 3; //设置步长 000a0 83 7c 24 10 03 cmp DWORD PTR lByteBufferSpace$[rsp], 3 000a5 76 08 jbe SHORT $LN14@UU_encode 000a7 c7 44 24 10 03 00 00 00 mov DWORD PTR lByteBufferSpace$[rsp], 3 $LN14@UU_encode: ; 305 : //取值 ; 306 : for (unsigned int i = 0; i < lByteBufferSpace; i++ ) 000af c7 44 24 08 00 00 00 00 mov DWORD PTR i$1[rsp], 0 000b7 eb 0a jmp SHORT $LN8@UU_encode $LN6@UU_encode: 000b9 8b 44 24 08 mov eax, DWORD PTR i$1[rsp] 000bd ff c0 inc eax 000bf 89 44 24 08 mov DWORD PTR i$1[rsp], eax $LN8@UU_encode: 000c3 8b 44 24 10 mov eax, DWORD PTR lByteBufferSpace$[rsp] 000c7 39 44 24 08 cmp DWORD PTR i$1[rsp], eax 000cb 73 26 jae SHORT $LN7@UU_encode ; 307 : { ; 308 : B[i] = *InPtr++; 000cd 48 8b 44 24 20 mov rax, QWORD PTR InPtr$[rsp] 000d2 0f b6 00 movzx eax, BYTE PTR [rax] 000d5 88 04 24 mov BYTE PTR tv81[rsp], al 000d8 48 8b 44 24 20 mov rax, QWORD PTR InPtr$[rsp] 000dd 48 ff c0 inc rax 000e0 48 89 44 24 20 mov QWORD PTR InPtr$[rsp], rax 000e5 8b 44 24 08 mov eax, DWORD PTR i$1[rsp] 000e9 0f b6 0c 24 movzx ecx, BYTE PTR tv81[rsp] 000ed 88 4c 04 04 mov BYTE PTR B$[rsp+rax], cl ; 309 : } 000f1 eb c6 jmp SHORT $LN6@UU_encode $LN7@UU_encode: ; 310 : if (Len == 0) 000f3 83 7c 24 0c 00 cmp DWORD PTR Len$[rsp], 0 000f8 75 1f jne SHORT $LN15@UU_encode ; 311 : { ; 312 : *OutPtr++ = 'M'; 000fa 48 8b 44 24 18 mov rax, QWORD PTR OutPtr$[rsp] 000ff c6 00 4d mov BYTE PTR [rax], 77 ; 0000004dH 00102 48 8b 44 24 18 mov rax, QWORD PTR OutPtr$[rsp] 00107 48 ff c0 inc rax 0010a 48 89 44 24 18 mov QWORD PTR OutPtr$[rsp], rax ; 313 : Len++; 0010f 8b 44 24 0c mov eax, DWORD PTR Len$[rsp] 00113 ff c0 inc eax 00115 89 44 24 0c mov DWORD PTR Len$[rsp], eax $LN15@UU_encode: ; 314 : } ; 315 : //编码运算 ; 316 : OutPtr[0] = B[0] >> 2; 00119 b8 01 00 00 00 mov eax, 1 0011e 48 6b c0 00 imul rax, rax, 0 00122 0f b6 44 04 04 movzx eax, BYTE PTR B$[rsp+rax] 00127 c1 f8 02 sar eax, 2 0012a b9 01 00 00 00 mov ecx, 1 0012f 48 6b c9 00 imul rcx, rcx, 0 00133 48 8b 54 24 18 mov rdx, QWORD PTR OutPtr$[rsp] 00138 88 04 0a mov BYTE PTR [rdx+rcx], al ; 317 : OutPtr[1] = (unsigned int) (B[0] << 4 & 0x30) + (unsigned int) (B[1] >> 4 & 0x0F); 0013b b8 01 00 00 00 mov eax, 1 00140 48 6b c0 00 imul rax, rax, 0 00144 0f b6 44 04 04 movzx eax, BYTE PTR B$[rsp+rax] 00149 c1 e0 04 shl eax, 4 0014c 83 e0 30 and eax, 48 ; 00000030H 0014f b9 01 00 00 00 mov ecx, 1 00154 48 6b c9 01 imul rcx, rcx, 1 00158 0f b6 4c 0c 04 movzx ecx, BYTE PTR B$[rsp+rcx] 0015d c1 f9 04 sar ecx, 4 00160 83 e1 0f and ecx, 15 00163 03 c1 add eax, ecx 00165 b9 01 00 00 00 mov ecx, 1 0016a 48 6b c9 01 imul rcx, rcx, 1 0016e 48 8b 54 24 18 mov rdx, QWORD PTR OutPtr$[rsp] 00173 88 04 0a mov BYTE PTR [rdx+rcx], al ; 318 : OutPtr[2] = (unsigned int) (B[1] << 2 & 0x3C) + (unsigned int) (B[2] >> 6 & 0x03); 00176 b8 01 00 00 00 mov eax, 1 0017b 48 6b c0 01 imul rax, rax, 1 0017f 0f b6 44 04 04 movzx eax, BYTE PTR B$[rsp+rax] 00184 c1 e0 02 shl eax, 2 00187 83 e0 3c and eax, 60 ; 0000003cH 0018a b9 01 00 00 00 mov ecx, 1 0018f 48 6b c9 02 imul rcx, rcx, 2 00193 0f b6 4c 0c 04 movzx ecx, BYTE PTR B$[rsp+rcx] 00198 c1 f9 06 sar ecx, 6 0019b 83 e1 03 and ecx, 3 0019e 03 c1 add eax, ecx 001a0 b9 01 00 00 00 mov ecx, 1 001a5 48 6b c9 02 imul rcx, rcx, 2 001a9 48 8b 54 24 18 mov rdx, QWORD PTR OutPtr$[rsp] 001ae 88 04 0a mov BYTE PTR [rdx+rcx], al ; 319 : OutPtr[3] = B[2] & 0x3F; 001b1 b8 01 00 00 00 mov eax, 1 001b6 48 6b c0 02 imul rax, rax, 2 001ba 0f b6 44 04 04 movzx eax, BYTE PTR B$[rsp+rax] 001bf 83 e0 3f and eax, 63 ; 0000003fH 001c2 b9 01 00 00 00 mov ecx, 1 001c7 48 6b c9 03 imul rcx, rcx, 3 001cb 48 8b 54 24 18 mov rdx, QWORD PTR OutPtr$[rsp] 001d0 88 04 0a mov BYTE PTR [rdx+rcx], al ; 320 : for (i = 0; i < 4; i++) 001d3 c7 44 24 08 00 00 00 00 mov DWORD PTR i$1[rsp], 0 001db eb 0a jmp SHORT $LN11@UU_encode $LN9@UU_encode: 001dd 8b 44 24 08 mov eax, DWORD PTR i$1[rsp] 001e1 ff c0 inc eax 001e3 89 44 24 08 mov DWORD PTR i$1[rsp], eax $LN11@UU_encode: 001e7 83 7c 24 08 04 cmp DWORD PTR i$1[rsp], 4 001ec 73 3e jae SHORT $LN10@UU_encode ; 321 : { ; 322 : if (OutPtr[i] == NULL) 001ee 8b 44 24 08 mov eax, DWORD PTR i$1[rsp] 001f2 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 001f7 0f be 04 01 movsx eax, BYTE PTR [rcx+rax] 001fb 85 c0 test eax, eax 001fd 75 0f jne SHORT $LN16@UU_encode ; 323 : OutPtr[i] = '`';//(unsigned char) (OutPtr[i] + 0x60); 001ff 8b 44 24 08 mov eax, DWORD PTR i$1[rsp] 00203 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 00208 c6 04 01 60 mov BYTE PTR [rcx+rax], 96 ; 00000060H 0020c eb 1c jmp SHORT $LN17@UU_encode $LN16@UU_encode: ; 324 : else ; 325 : OutPtr[i] = ' ' + OutPtr[i];//(unsigned char) (OutPtr[i] + 0x20); 0020e 8b 44 24 08 mov eax, DWORD PTR i$1[rsp] 00212 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 00217 0f be 04 01 movsx eax, BYTE PTR [rcx+rax] 0021b 83 c0 20 add eax, 32 ; 00000020H 0021e 8b 4c 24 08 mov ecx, DWORD PTR i$1[rsp] 00222 48 8b 54 24 18 mov rdx, QWORD PTR OutPtr$[rsp] 00227 88 04 0a mov BYTE PTR [rdx+rcx], al $LN17@UU_encode: ; 326 : } 0022a eb b1 jmp SHORT $LN9@UU_encode $LN10@UU_encode: ; 327 : OutPtr+=4; 0022c 48 8b 44 24 18 mov rax, QWORD PTR OutPtr$[rsp] 00231 48 83 c0 04 add rax, 4 00235 48 89 44 24 18 mov QWORD PTR OutPtr$[rsp], rax ; 328 : Len+=4; 0023a 8b 44 24 0c mov eax, DWORD PTR Len$[rsp] 0023e 83 c0 04 add eax, 4 00241 89 44 24 0c mov DWORD PTR Len$[rsp], eax ; 329 : } 00245 e9 26 fe ff ff jmp $LN4@UU_encode $LN5@UU_encode: ; 330 : ; 331 : *OutPtr++ = '\r'; //设置回车 0024a 48 8b 44 24 18 mov rax, QWORD PTR OutPtr$[rsp] 0024f c6 00 0d mov BYTE PTR [rax], 13 00252 48 8b 44 24 18 mov rax, QWORD PTR OutPtr$[rsp] 00257 48 ff c0 inc rax 0025a 48 89 44 24 18 mov QWORD PTR OutPtr$[rsp], rax ; 332 : *OutPtr++ = '\n'; 0025f 48 8b 44 24 18 mov rax, QWORD PTR OutPtr$[rsp] 00264 c6 00 0a mov BYTE PTR [rax], 10 00267 48 8b 44 24 18 mov rax, QWORD PTR OutPtr$[rsp] 0026c 48 ff c0 inc rax 0026f 48 89 44 24 18 mov QWORD PTR OutPtr$[rsp], rax ; 333 : } 00274 e9 df fd ff ff jmp $LN2@UU_encode $LN3@UU_encode: ; 334 : return (unsigned int) (OutPtr - pDest); 00279 48 8b 44 24 50 mov rax, QWORD PTR pDest$[rsp] 0027e 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 00283 48 2b c8 sub rcx, rax 00286 48 8b c1 mov rax, rcx $LN1@UU_encode: ; 335 : } 00289 48 83 c4 38 add rsp, 56 ; 00000038H 0028d c3 ret 0 ?UU_encode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::UU_encode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?base64_decode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT lByteBuffer$ = 0 lByteBufferSpace$ = 4 reallen$ = 8 C$ = 12 tv89 = 16 OutPtr$ = 24 InPtr$ = 32 InLimitPtr$ = 40 pSrc$ = 64 nSize$ = 72 pDest$ = 80 ?base64_decode@CMailCoder@@SAHPEADI0@Z PROC ; CMailCoder::base64_decode, COMDAT ; 229 : { $LN16: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 89 54 24 10 mov DWORD PTR [rsp+16], edx 00009 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000e 48 83 ec 38 sub rsp, 56 ; 00000038H ; 230 : if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0; 00012 48 83 7c 24 40 00 cmp QWORD PTR pSrc$[rsp], 0 00018 74 0f je SHORT $LN7@base64_dec 0001a 48 83 7c 24 50 00 cmp QWORD PTR pDest$[rsp], 0 00020 74 07 je SHORT $LN7@base64_dec 00022 83 7c 24 48 00 cmp DWORD PTR nSize$[rsp], 0 00027 77 07 ja SHORT $LN6@base64_dec $LN7@base64_dec: 00029 33 c0 xor eax, eax 0002b e9 ab 01 00 00 jmp $LN1@base64_dec $LN6@base64_dec: ; 231 : ; 232 : unsigned int lByteBuffer, lByteBufferSpace; ; 233 : unsigned int C; //临时阅读变量 ; 234 : int reallen; ; 235 : char *InPtr, *InLimitPtr; ; 236 : char *OutPtr; ; 237 : ; 238 : lByteBuffer = 0; lByteBufferSpace = 4; 00030 c7 04 24 00 00 00 00 mov DWORD PTR lByteBuffer$[rsp], 0 00037 c7 44 24 04 04 00 00 00 mov DWORD PTR lByteBufferSpace$[rsp], 4 ; 239 : ; 240 : InPtr = pSrc; 0003f 48 8b 44 24 40 mov rax, QWORD PTR pSrc$[rsp] 00044 48 89 44 24 20 mov QWORD PTR InPtr$[rsp], rax ; 241 : InLimitPtr= InPtr + nSize; 00049 8b 44 24 48 mov eax, DWORD PTR nSize$[rsp] 0004d 48 8b 4c 24 20 mov rcx, QWORD PTR InPtr$[rsp] 00052 48 03 c8 add rcx, rax 00055 48 8b c1 mov rax, rcx 00058 48 89 44 24 28 mov QWORD PTR InLimitPtr$[rsp], rax ; 242 : OutPtr = pDest; 0005d 48 8b 44 24 50 mov rax, QWORD PTR pDest$[rsp] 00062 48 89 44 24 18 mov QWORD PTR OutPtr$[rsp], rax $LN15@base64_dec: $LN14@base64_dec: $LN2@base64_dec: ; 243 : ; 244 : while (InPtr != InLimitPtr) 00067 48 8b 44 24 28 mov rax, QWORD PTR InLimitPtr$[rsp] 0006c 48 39 44 24 20 cmp QWORD PTR InPtr$[rsp], rax 00071 0f 84 cd 00 00 00 je $LN3@base64_dec ; 245 : { ; 246 : C = BASE64_DECODE_TABLE[*InPtr]; // Read from InputBuffer. 00077 48 8b 44 24 20 mov rax, QWORD PTR InPtr$[rsp] 0007c 48 0f be 00 movsx rax, BYTE PTR [rax] 00080 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_DECODE_TABLE@CMailCoder@@2QBIB ; CMailCoder::BASE64_DECODE_TABLE 00087 8b 04 81 mov eax, DWORD PTR [rcx+rax*4] 0008a 89 44 24 0c mov DWORD PTR C$[rsp], eax ; 247 : InPtr++; 0008e 48 8b 44 24 20 mov rax, QWORD PTR InPtr$[rsp] 00093 48 ff c0 inc rax 00096 48 89 44 24 20 mov QWORD PTR InPtr$[rsp], rax ; 248 : if (C == 0xFF) continue; //读到255非法字符 0009b 81 7c 24 0c ff 00 00 00 cmp DWORD PTR C$[rsp], 255 ; 000000ffH 000a3 75 02 jne SHORT $LN8@base64_dec 000a5 eb c0 jmp SHORT $LN2@base64_dec $LN8@base64_dec: ; 249 : lByteBuffer = lByteBuffer << 6 ; 000a7 8b 04 24 mov eax, DWORD PTR lByteBuffer$[rsp] 000aa c1 e0 06 shl eax, 6 000ad 89 04 24 mov DWORD PTR lByteBuffer$[rsp], eax ; 250 : lByteBuffer = lByteBuffer | C ; 000b0 8b 44 24 0c mov eax, DWORD PTR C$[rsp] 000b4 8b 0c 24 mov ecx, DWORD PTR lByteBuffer$[rsp] 000b7 0b c8 or ecx, eax 000b9 8b c1 mov eax, ecx 000bb 89 04 24 mov DWORD PTR lByteBuffer$[rsp], eax ; 251 : lByteBufferSpace--; 000be 8b 44 24 04 mov eax, DWORD PTR lByteBufferSpace$[rsp] 000c2 ff c8 dec eax 000c4 89 44 24 04 mov DWORD PTR lByteBufferSpace$[rsp], eax ; 252 : if (lByteBufferSpace != 0) continue; //一次读入4个字节 000c8 83 7c 24 04 00 cmp DWORD PTR lByteBufferSpace$[rsp], 0 000cd 74 02 je SHORT $LN9@base64_dec 000cf eb 96 jmp SHORT $LN14@base64_dec $LN9@base64_dec: ; 253 : //到序写入3个字节到缓冲 ; 254 : OutPtr[2] = lByteBuffer; 000d1 b8 01 00 00 00 mov eax, 1 000d6 48 6b c0 02 imul rax, rax, 2 000da 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 000df 0f b6 14 24 movzx edx, BYTE PTR lByteBuffer$[rsp] 000e3 88 14 01 mov BYTE PTR [rcx+rax], dl ; 255 : lByteBuffer = lByteBuffer >> 8; 000e6 8b 04 24 mov eax, DWORD PTR lByteBuffer$[rsp] 000e9 c1 e8 08 shr eax, 8 000ec 89 04 24 mov DWORD PTR lByteBuffer$[rsp], eax ; 256 : OutPtr[1] = lByteBuffer; 000ef b8 01 00 00 00 mov eax, 1 000f4 48 6b c0 01 imul rax, rax, 1 000f8 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 000fd 0f b6 14 24 movzx edx, BYTE PTR lByteBuffer$[rsp] 00101 88 14 01 mov BYTE PTR [rcx+rax], dl ; 257 : lByteBuffer = lByteBuffer >> 8; 00104 8b 04 24 mov eax, DWORD PTR lByteBuffer$[rsp] 00107 c1 e8 08 shr eax, 8 0010a 89 04 24 mov DWORD PTR lByteBuffer$[rsp], eax ; 258 : OutPtr[0] = lByteBuffer; 0010d b8 01 00 00 00 mov eax, 1 00112 48 6b c0 00 imul rax, rax, 0 00116 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 0011b 0f b6 14 24 movzx edx, BYTE PTR lByteBuffer$[rsp] 0011f 88 14 01 mov BYTE PTR [rcx+rax], dl ; 259 : //准备写入后3位 ; 260 : OutPtr+= 3; lByteBuffer = 0; lByteBufferSpace = 4; 00122 48 8b 44 24 18 mov rax, QWORD PTR OutPtr$[rsp] 00127 48 83 c0 03 add rax, 3 0012b 48 89 44 24 18 mov QWORD PTR OutPtr$[rsp], rax 00130 c7 04 24 00 00 00 00 mov DWORD PTR lByteBuffer$[rsp], 0 00137 c7 44 24 04 04 00 00 00 mov DWORD PTR lByteBufferSpace$[rsp], 4 ; 261 : } 0013f e9 23 ff ff ff jmp $LN15@base64_dec $LN3@base64_dec: ; 262 : reallen = (unsigned int)OutPtr - (unsigned int)pDest; 00144 8b 44 24 50 mov eax, DWORD PTR pDest$[rsp] 00148 8b 4c 24 18 mov ecx, DWORD PTR OutPtr$[rsp] 0014c 2b c8 sub ecx, eax 0014e 8b c1 mov eax, ecx 00150 89 44 24 08 mov DWORD PTR reallen$[rsp], eax ; 263 : //处理尾部 返回实际长度 ; 264 : switch (lByteBufferSpace) 00154 8b 44 24 04 mov eax, DWORD PTR lByteBufferSpace$[rsp] 00158 89 44 24 10 mov DWORD PTR tv89[rsp], eax 0015c 83 7c 24 10 01 cmp DWORD PTR tv89[rsp], 1 00161 74 09 je SHORT $LN10@base64_dec 00163 83 7c 24 10 02 cmp DWORD PTR tv89[rsp], 2 00168 74 47 je SHORT $LN11@base64_dec 0016a eb 6b jmp SHORT $LN12@base64_dec $LN10@base64_dec: ; 265 : { ; 266 : case 1: ; 267 : lByteBuffer = lByteBuffer >> 2; 0016c 8b 04 24 mov eax, DWORD PTR lByteBuffer$[rsp] 0016f c1 e8 02 shr eax, 2 00172 89 04 24 mov DWORD PTR lByteBuffer$[rsp], eax ; 268 : OutPtr[1] = lByteBuffer; 00175 b8 01 00 00 00 mov eax, 1 0017a 48 6b c0 01 imul rax, rax, 1 0017e 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 00183 0f b6 14 24 movzx edx, BYTE PTR lByteBuffer$[rsp] 00187 88 14 01 mov BYTE PTR [rcx+rax], dl ; 269 : lByteBuffer = lByteBuffer >> 8; 0018a 8b 04 24 mov eax, DWORD PTR lByteBuffer$[rsp] 0018d c1 e8 08 shr eax, 8 00190 89 04 24 mov DWORD PTR lByteBuffer$[rsp], eax ; 270 : OutPtr[0] = lByteBuffer; 00193 b8 01 00 00 00 mov eax, 1 00198 48 6b c0 00 imul rax, rax, 0 0019c 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 001a1 0f b6 14 24 movzx edx, BYTE PTR lByteBuffer$[rsp] 001a5 88 14 01 mov BYTE PTR [rcx+rax], dl ; 271 : return reallen + 2; 001a8 8b 44 24 08 mov eax, DWORD PTR reallen$[rsp] 001ac 83 c0 02 add eax, 2 001af eb 2a jmp SHORT $LN1@base64_dec $LN11@base64_dec: ; 272 : case 2: ; 273 : lByteBuffer = lByteBuffer >> 4; 001b1 8b 04 24 mov eax, DWORD PTR lByteBuffer$[rsp] 001b4 c1 e8 04 shr eax, 4 001b7 89 04 24 mov DWORD PTR lByteBuffer$[rsp], eax ; 274 : OutPtr[0] = lByteBuffer; 001ba b8 01 00 00 00 mov eax, 1 001bf 48 6b c0 00 imul rax, rax, 0 001c3 48 8b 4c 24 18 mov rcx, QWORD PTR OutPtr$[rsp] 001c8 0f b6 14 24 movzx edx, BYTE PTR lByteBuffer$[rsp] 001cc 88 14 01 mov BYTE PTR [rcx+rax], dl ; 275 : return reallen + 1; 001cf 8b 44 24 08 mov eax, DWORD PTR reallen$[rsp] 001d3 ff c0 inc eax 001d5 eb 04 jmp SHORT $LN1@base64_dec $LN12@base64_dec: ; 276 : default: ; 277 : return reallen; 001d7 8b 44 24 08 mov eax, DWORD PTR reallen$[rsp] $LN1@base64_dec: ; 278 : } ; 279 : } 001db 48 83 c4 38 add rsp, 56 ; 00000038H 001df c3 ret 0 ?base64_decode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::base64_decode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?base64_encode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT iB$ = 0 OutPtr$ = 8 pInPtr$ = 16 Len$ = 24 iInMax3$ = 28 tv153 = 32 tv76 = 36 tv82 = 40 tv88 = 44 tv176 = 48 pInLimitPtr$ = 56 pSrc$ = 80 nSize$ = 88 pDest$ = 96 ?base64_encode@CMailCoder@@SAHPEADI0@Z PROC ; CMailCoder::base64_encode, COMDAT ; 153 : { $LN14: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 89 54 24 10 mov DWORD PTR [rsp+16], edx 00009 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000e 48 83 ec 48 sub rsp, 72 ; 00000048H ; 154 : if ((pSrc == NULL) || (nSize <= 0)) return 0; 00012 48 83 7c 24 50 00 cmp QWORD PTR pSrc$[rsp], 0 00018 74 07 je SHORT $LN9@base64_enc 0001a 83 7c 24 58 00 cmp DWORD PTR nSize$[rsp], 0 0001f 77 07 ja SHORT $LN8@base64_enc $LN9@base64_enc: 00021 33 c0 xor eax, eax 00023 e9 a7 03 00 00 jmp $LN1@base64_enc $LN8@base64_enc: ; 155 : ; 156 : unsigned int iB, iInMax3, Len; ; 157 : char *pInPtr, *pInLimitPtr; ; 158 : char *OutPtr ; ; 159 : ; 160 : pInPtr = pSrc; 00028 48 8b 44 24 50 mov rax, QWORD PTR pSrc$[rsp] 0002d 48 89 44 24 10 mov QWORD PTR pInPtr$[rsp], rax ; 161 : iInMax3 = nSize / 3 * 3; 00032 33 d2 xor edx, edx 00034 8b 44 24 58 mov eax, DWORD PTR nSize$[rsp] 00038 b9 03 00 00 00 mov ecx, 3 0003d f7 f1 div ecx 0003f 6b c0 03 imul eax, eax, 3 00042 89 44 24 1c mov DWORD PTR iInMax3$[rsp], eax ; 162 : OutPtr = pDest; 00046 48 8b 44 24 60 mov rax, QWORD PTR pDest$[rsp] 0004b 48 89 44 24 08 mov QWORD PTR OutPtr$[rsp], rax ; 163 : pInLimitPtr = pInPtr + iInMax3; 00050 8b 44 24 1c mov eax, DWORD PTR iInMax3$[rsp] 00054 48 8b 4c 24 10 mov rcx, QWORD PTR pInPtr$[rsp] 00059 48 03 c8 add rcx, rax 0005c 48 8b c1 mov rax, rcx 0005f 48 89 44 24 38 mov QWORD PTR pInLimitPtr$[rsp], rax $LN2@base64_enc: ; 164 : ; 165 : while (pInPtr != pInLimitPtr) 00064 48 8b 44 24 38 mov rax, QWORD PTR pInLimitPtr$[rsp] 00069 48 39 44 24 10 cmp QWORD PTR pInPtr$[rsp], rax 0006e 0f 84 ab 01 00 00 je $LN3@base64_enc ; 166 : { ; 167 : Len = 0; 00074 c7 44 24 18 00 00 00 00 mov DWORD PTR Len$[rsp], 0 $LN4@base64_enc: ; 168 : while ((Len < m_LineWidth) && (pInPtr != pInLimitPtr)) 0007c 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00082 39 44 24 18 cmp DWORD PTR Len$[rsp], eax 00086 0f 83 58 01 00 00 jae $LN5@base64_enc 0008c 48 8b 44 24 38 mov rax, QWORD PTR pInLimitPtr$[rsp] 00091 48 39 44 24 10 cmp QWORD PTR pInPtr$[rsp], rax 00096 0f 84 48 01 00 00 je $LN5@base64_enc ; 169 : { ; 170 : iB = (unsigned char) *pInPtr++; 0009c 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 000a1 0f b6 00 movzx eax, BYTE PTR [rax] 000a4 89 44 24 24 mov DWORD PTR tv76[rsp], eax 000a8 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 000ad 48 ff c0 inc rax 000b0 48 89 44 24 10 mov QWORD PTR pInPtr$[rsp], rax 000b5 8b 44 24 24 mov eax, DWORD PTR tv76[rsp] 000b9 89 04 24 mov DWORD PTR iB$[rsp], eax ; 171 : iB = iB << 8; 000bc 8b 04 24 mov eax, DWORD PTR iB$[rsp] 000bf c1 e0 08 shl eax, 8 000c2 89 04 24 mov DWORD PTR iB$[rsp], eax ; 172 : ; 173 : iB = iB | (unsigned char) *pInPtr++; 000c5 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 000ca 0f b6 00 movzx eax, BYTE PTR [rax] 000cd 8b 0c 24 mov ecx, DWORD PTR iB$[rsp] 000d0 0b c8 or ecx, eax 000d2 8b c1 mov eax, ecx 000d4 89 44 24 28 mov DWORD PTR tv82[rsp], eax 000d8 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 000dd 48 ff c0 inc rax 000e0 48 89 44 24 10 mov QWORD PTR pInPtr$[rsp], rax 000e5 8b 44 24 28 mov eax, DWORD PTR tv82[rsp] 000e9 89 04 24 mov DWORD PTR iB$[rsp], eax ; 174 : iB = iB << 8; 000ec 8b 04 24 mov eax, DWORD PTR iB$[rsp] 000ef c1 e0 08 shl eax, 8 000f2 89 04 24 mov DWORD PTR iB$[rsp], eax ; 175 : ; 176 : iB = iB | (unsigned char) *pInPtr++; 000f5 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 000fa 0f b6 00 movzx eax, BYTE PTR [rax] 000fd 8b 0c 24 mov ecx, DWORD PTR iB$[rsp] 00100 0b c8 or ecx, eax 00102 8b c1 mov eax, ecx 00104 89 44 24 2c mov DWORD PTR tv88[rsp], eax 00108 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 0010d 48 ff c0 inc rax 00110 48 89 44 24 10 mov QWORD PTR pInPtr$[rsp], rax 00115 8b 44 24 2c mov eax, DWORD PTR tv88[rsp] 00119 89 04 24 mov DWORD PTR iB$[rsp], eax ; 177 : ; 178 : //以4 byte倒序写入输出缓冲 ; 179 : OutPtr[3] = BASE64_ENCODE_TABLE[iB & 0x3F]; 0011c 8b 04 24 mov eax, DWORD PTR iB$[rsp] 0011f 83 e0 3f and eax, 63 ; 0000003fH 00122 8b c0 mov eax, eax 00124 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 0012b ba 01 00 00 00 mov edx, 1 00130 48 6b d2 03 imul rdx, rdx, 3 00134 4c 8b 44 24 08 mov r8, QWORD PTR OutPtr$[rsp] 00139 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0013d 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 180 : iB = iB >> 6; 00141 8b 04 24 mov eax, DWORD PTR iB$[rsp] 00144 c1 e8 06 shr eax, 6 00147 89 04 24 mov DWORD PTR iB$[rsp], eax ; 181 : OutPtr[2] = BASE64_ENCODE_TABLE[iB & 0x3F]; 0014a 8b 04 24 mov eax, DWORD PTR iB$[rsp] 0014d 83 e0 3f and eax, 63 ; 0000003fH 00150 8b c0 mov eax, eax 00152 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00159 ba 01 00 00 00 mov edx, 1 0015e 48 6b d2 02 imul rdx, rdx, 2 00162 4c 8b 44 24 08 mov r8, QWORD PTR OutPtr$[rsp] 00167 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0016b 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 182 : iB = iB >> 6; 0016f 8b 04 24 mov eax, DWORD PTR iB$[rsp] 00172 c1 e8 06 shr eax, 6 00175 89 04 24 mov DWORD PTR iB$[rsp], eax ; 183 : OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F]; 00178 8b 04 24 mov eax, DWORD PTR iB$[rsp] 0017b 83 e0 3f and eax, 63 ; 0000003fH 0017e 8b c0 mov eax, eax 00180 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00187 ba 01 00 00 00 mov edx, 1 0018c 48 6b d2 01 imul rdx, rdx, 1 00190 4c 8b 44 24 08 mov r8, QWORD PTR OutPtr$[rsp] 00195 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00199 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 184 : iB = iB >> 6; 0019d 8b 04 24 mov eax, DWORD PTR iB$[rsp] 001a0 c1 e8 06 shr eax, 6 001a3 89 04 24 mov DWORD PTR iB$[rsp], eax ; 185 : OutPtr[0] = BASE64_ENCODE_TABLE[iB]; 001a6 8b 04 24 mov eax, DWORD PTR iB$[rsp] 001a9 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 001b0 ba 01 00 00 00 mov edx, 1 001b5 48 6b d2 00 imul rdx, rdx, 0 001b9 4c 8b 44 24 08 mov r8, QWORD PTR OutPtr$[rsp] 001be 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001c2 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 186 : OutPtr+=4; 001c6 48 8b 44 24 08 mov rax, QWORD PTR OutPtr$[rsp] 001cb 48 83 c0 04 add rax, 4 001cf 48 89 44 24 08 mov QWORD PTR OutPtr$[rsp], rax ; 187 : Len+=4; 001d4 8b 44 24 18 mov eax, DWORD PTR Len$[rsp] 001d8 83 c0 04 add eax, 4 001db 89 44 24 18 mov DWORD PTR Len$[rsp], eax ; 188 : } 001df e9 98 fe ff ff jmp $LN4@base64_enc $LN5@base64_enc: ; 189 : if (Len >= m_LineWidth) 001e4 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 001ea 39 44 24 18 cmp DWORD PTR Len$[rsp], eax 001ee 72 2a jb SHORT $LN10@base64_enc ; 190 : { ; 191 : *OutPtr++ = '\r'; //加上回车换行符 001f0 48 8b 44 24 08 mov rax, QWORD PTR OutPtr$[rsp] 001f5 c6 00 0d mov BYTE PTR [rax], 13 001f8 48 8b 44 24 08 mov rax, QWORD PTR OutPtr$[rsp] 001fd 48 ff c0 inc rax 00200 48 89 44 24 08 mov QWORD PTR OutPtr$[rsp], rax ; 192 : *OutPtr++ = '\n'; 00205 48 8b 44 24 08 mov rax, QWORD PTR OutPtr$[rsp] 0020a c6 00 0a mov BYTE PTR [rax], 10 0020d 48 8b 44 24 08 mov rax, QWORD PTR OutPtr$[rsp] 00212 48 ff c0 inc rax 00215 48 89 44 24 08 mov QWORD PTR OutPtr$[rsp], rax $LN10@base64_enc: ; 193 : } ; 194 : } 0021a e9 45 fe ff ff jmp $LN2@base64_enc $LN3@base64_enc: ; 195 : //设置尾部 ; 196 : switch (nSize - iInMax3) 0021f 8b 44 24 1c mov eax, DWORD PTR iInMax3$[rsp] 00223 8b 4c 24 58 mov ecx, DWORD PTR nSize$[rsp] 00227 2b c8 sub ecx, eax 00229 8b c1 mov eax, ecx 0022b 89 44 24 20 mov DWORD PTR tv153[rsp], eax 0022f 83 7c 24 20 01 cmp DWORD PTR tv153[rsp], 1 00234 74 10 je SHORT $LN11@base64_enc 00236 83 7c 24 20 02 cmp DWORD PTR tv153[rsp], 2 0023b 0f 84 9e 00 00 00 je $LN12@base64_enc 00241 e9 79 01 00 00 jmp $LN6@base64_enc $LN11@base64_enc: ; 197 : { ; 198 : case 1: ; 199 : iB = (unsigned char) *pInPtr; 00246 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 0024b 0f b6 00 movzx eax, BYTE PTR [rax] 0024e 89 04 24 mov DWORD PTR iB$[rsp], eax ; 200 : iB = iB << 4; 00251 8b 04 24 mov eax, DWORD PTR iB$[rsp] 00254 c1 e0 04 shl eax, 4 00257 89 04 24 mov DWORD PTR iB$[rsp], eax ; 201 : OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F]; 0025a 8b 04 24 mov eax, DWORD PTR iB$[rsp] 0025d 83 e0 3f and eax, 63 ; 0000003fH 00260 8b c0 mov eax, eax 00262 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00269 ba 01 00 00 00 mov edx, 1 0026e 48 6b d2 01 imul rdx, rdx, 1 00272 4c 8b 44 24 08 mov r8, QWORD PTR OutPtr$[rsp] 00277 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0027b 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 202 : iB = iB >> 6; 0027f 8b 04 24 mov eax, DWORD PTR iB$[rsp] 00282 c1 e8 06 shr eax, 6 00285 89 04 24 mov DWORD PTR iB$[rsp], eax ; 203 : OutPtr[0] = BASE64_ENCODE_TABLE[iB]; 00288 8b 04 24 mov eax, DWORD PTR iB$[rsp] 0028b 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00292 ba 01 00 00 00 mov edx, 1 00297 48 6b d2 00 imul rdx, rdx, 0 0029b 4c 8b 44 24 08 mov r8, QWORD PTR OutPtr$[rsp] 002a0 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 002a4 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 204 : OutPtr[2] = '='; //用'='也就是64码填充剩余部分 002a8 b8 01 00 00 00 mov eax, 1 002ad 48 6b c0 02 imul rax, rax, 2 002b1 48 8b 4c 24 08 mov rcx, QWORD PTR OutPtr$[rsp] 002b6 c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 205 : OutPtr[3] = '='; 002ba b8 01 00 00 00 mov eax, 1 002bf 48 6b c0 03 imul rax, rax, 3 002c3 48 8b 4c 24 08 mov rcx, QWORD PTR OutPtr$[rsp] 002c8 c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 206 : OutPtr+=4; 002cc 48 8b 44 24 08 mov rax, QWORD PTR OutPtr$[rsp] 002d1 48 83 c0 04 add rax, 4 002d5 48 89 44 24 08 mov QWORD PTR OutPtr$[rsp], rax ; 207 : break; 002da e9 e0 00 00 00 jmp $LN6@base64_enc $LN12@base64_enc: ; 208 : case 2: ; 209 : iB = (unsigned char) *pInPtr++; 002df 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 002e4 0f b6 00 movzx eax, BYTE PTR [rax] 002e7 89 44 24 30 mov DWORD PTR tv176[rsp], eax 002eb 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 002f0 48 ff c0 inc rax 002f3 48 89 44 24 10 mov QWORD PTR pInPtr$[rsp], rax 002f8 8b 44 24 30 mov eax, DWORD PTR tv176[rsp] 002fc 89 04 24 mov DWORD PTR iB$[rsp], eax ; 210 : iB = iB << 8; 002ff 8b 04 24 mov eax, DWORD PTR iB$[rsp] 00302 c1 e0 08 shl eax, 8 00305 89 04 24 mov DWORD PTR iB$[rsp], eax ; 211 : iB = iB | (unsigned char) *pInPtr; 00308 48 8b 44 24 10 mov rax, QWORD PTR pInPtr$[rsp] 0030d 0f b6 00 movzx eax, BYTE PTR [rax] 00310 8b 0c 24 mov ecx, DWORD PTR iB$[rsp] 00313 0b c8 or ecx, eax 00315 8b c1 mov eax, ecx 00317 89 04 24 mov DWORD PTR iB$[rsp], eax ; 212 : iB = iB << 2; 0031a 8b 04 24 mov eax, DWORD PTR iB$[rsp] 0031d c1 e0 02 shl eax, 2 00320 89 04 24 mov DWORD PTR iB$[rsp], eax ; 213 : OutPtr[2] = BASE64_ENCODE_TABLE[iB & 0x3F]; 00323 8b 04 24 mov eax, DWORD PTR iB$[rsp] 00326 83 e0 3f and eax, 63 ; 0000003fH 00329 8b c0 mov eax, eax 0032b 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00332 ba 01 00 00 00 mov edx, 1 00337 48 6b d2 02 imul rdx, rdx, 2 0033b 4c 8b 44 24 08 mov r8, QWORD PTR OutPtr$[rsp] 00340 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00344 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 214 : iB = iB >> 6; 00348 8b 04 24 mov eax, DWORD PTR iB$[rsp] 0034b c1 e8 06 shr eax, 6 0034e 89 04 24 mov DWORD PTR iB$[rsp], eax ; 215 : OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F]; 00351 8b 04 24 mov eax, DWORD PTR iB$[rsp] 00354 83 e0 3f and eax, 63 ; 0000003fH 00357 8b c0 mov eax, eax 00359 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00360 ba 01 00 00 00 mov edx, 1 00365 48 6b d2 01 imul rdx, rdx, 1 00369 4c 8b 44 24 08 mov r8, QWORD PTR OutPtr$[rsp] 0036e 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00372 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 216 : iB = iB >> 6; 00376 8b 04 24 mov eax, DWORD PTR iB$[rsp] 00379 c1 e8 06 shr eax, 6 0037c 89 04 24 mov DWORD PTR iB$[rsp], eax ; 217 : OutPtr[0] = BASE64_ENCODE_TABLE[iB]; 0037f 8b 04 24 mov eax, DWORD PTR iB$[rsp] 00382 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00389 ba 01 00 00 00 mov edx, 1 0038e 48 6b d2 00 imul rdx, rdx, 0 00392 4c 8b 44 24 08 mov r8, QWORD PTR OutPtr$[rsp] 00397 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0039b 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 218 : OutPtr[3] = '='; // Fill remaining byte. 0039f b8 01 00 00 00 mov eax, 1 003a4 48 6b c0 03 imul rax, rax, 3 003a8 48 8b 4c 24 08 mov rcx, QWORD PTR OutPtr$[rsp] 003ad c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 219 : OutPtr+=4; 003b1 48 8b 44 24 08 mov rax, QWORD PTR OutPtr$[rsp] 003b6 48 83 c0 04 add rax, 4 003ba 48 89 44 24 08 mov QWORD PTR OutPtr$[rsp], rax $LN6@base64_enc: ; 220 : break; ; 221 : } ; 222 : return (unsigned int) (OutPtr - pDest); 003bf 48 8b 44 24 60 mov rax, QWORD PTR pDest$[rsp] 003c4 48 8b 4c 24 08 mov rcx, QWORD PTR OutPtr$[rsp] 003c9 48 2b c8 sub rcx, rax 003cc 48 8b c1 mov rax, rcx $LN1@base64_enc: ; 223 : } 003cf 48 83 c4 48 add rsp, 72 ; 00000048H 003d3 c3 ret 0 ?base64_encode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::base64_encode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?QuotedEncodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT nSize$ = 0 nCR$ = 4 iSize$ = 32 ?QuotedEncodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::QuotedEncodeSize, COMDAT ; 142 : { $LN3: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 48 83 ec 18 sub rsp, 24 ; 143 : int nSize = iSize * 3 + 1; 00008 6b 44 24 20 03 imul eax, DWORD PTR iSize$[rsp], 3 0000d ff c0 inc eax 0000f 89 04 24 mov DWORD PTR nSize$[rsp], eax ; 144 : int nCR = nSize / m_LineWidth; 00012 33 d2 xor edx, edx 00014 8b 04 24 mov eax, DWORD PTR nSize$[rsp] 00017 f7 35 00 00 00 00 div DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 0001d 89 44 24 04 mov DWORD PTR nCR$[rsp], eax ; 145 : nSize+= nCR * 3; 00021 6b 44 24 04 03 imul eax, DWORD PTR nCR$[rsp], 3 00026 8b 0c 24 mov ecx, DWORD PTR nSize$[rsp] 00029 03 c8 add ecx, eax 0002b 8b c1 mov eax, ecx 0002d 89 04 24 mov DWORD PTR nSize$[rsp], eax ; 146 : return nSize; 00030 8b 04 24 mov eax, DWORD PTR nSize$[rsp] ; 147 : } 00033 48 83 c4 18 add rsp, 24 00037 c3 ret 0 ?QuotedEncodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::QuotedEncodeSize _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?UUDecodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT iSize$ = 8 ?UUDecodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::UUDecodeSize, COMDAT ; 134 : { 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx ; 135 : return (iSize + 3) / 4 * 3; 00004 8b 44 24 08 mov eax, DWORD PTR iSize$[rsp] 00008 83 c0 03 add eax, 3 0000b 99 cdq 0000c 83 e2 03 and edx, 3 0000f 03 c2 add eax, edx 00011 c1 f8 02 sar eax, 2 00014 6b c0 03 imul eax, eax, 3 ; 136 : } 00017 c3 ret 0 ?UUDecodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::UUDecodeSize _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?UUEncodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT nSize$ = 0 nCR$ = 4 iSize$ = 32 ?UUEncodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::UUEncodeSize, COMDAT ; 122 : { $LN3: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 48 83 ec 18 sub rsp, 24 ; 123 : int nSize, nCR; ; 124 : nSize = (iSize + 2) / 3 * 4 ; 00008 8b 44 24 20 mov eax, DWORD PTR iSize$[rsp] 0000c 83 c0 02 add eax, 2 0000f 99 cdq 00010 b9 03 00 00 00 mov ecx, 3 00015 f7 f9 idiv ecx 00017 c1 e0 02 shl eax, 2 0001a 89 04 24 mov DWORD PTR nSize$[rsp], eax ; 125 : nCR = nSize / m_LineWidth + 2; //计算回车数量 0001d 33 d2 xor edx, edx 0001f 8b 04 24 mov eax, DWORD PTR nSize$[rsp] 00022 f7 35 00 00 00 00 div DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00028 83 c0 02 add eax, 2 0002b 89 44 24 04 mov DWORD PTR nCR$[rsp], eax ; 126 : nSize+= nCR * 3 + 2; 0002f 6b 44 24 04 03 imul eax, DWORD PTR nCR$[rsp], 3 00034 8b 0c 24 mov ecx, DWORD PTR nSize$[rsp] 00037 8d 44 01 02 lea eax, DWORD PTR [rcx+rax+2] 0003b 89 04 24 mov DWORD PTR nSize$[rsp], eax ; 127 : return nSize; 0003e 8b 04 24 mov eax, DWORD PTR nSize$[rsp] ; 128 : } 00041 48 83 c4 18 add rsp, 24 00045 c3 ret 0 ?UUEncodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::UUEncodeSize _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?Base64DecodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT iSize$ = 8 ?Base64DecodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::Base64DecodeSize, COMDAT ; 114 : { 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx ; 115 : return (iSize + 3) / 4 * 3; 00004 8b 44 24 08 mov eax, DWORD PTR iSize$[rsp] 00008 83 c0 03 add eax, 3 0000b 99 cdq 0000c 83 e2 03 and edx, 3 0000f 03 c2 add eax, edx 00011 c1 f8 02 sar eax, 2 00014 6b c0 03 imul eax, eax, 3 ; 116 : } 00017 c3 ret 0 ?Base64DecodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::Base64DecodeSize _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?Base64EncodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT nSize$ = 0 nCR$ = 4 iSize$ = 32 ?Base64EncodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::Base64EncodeSize, COMDAT ; 102 : { $LN3: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 48 83 ec 18 sub rsp, 24 ; 103 : int nSize, nCR; ; 104 : nSize = (iSize + 2) / 3 * 4 ; 00008 8b 44 24 20 mov eax, DWORD PTR iSize$[rsp] 0000c 83 c0 02 add eax, 2 0000f 99 cdq 00010 b9 03 00 00 00 mov ecx, 3 00015 f7 f9 idiv ecx 00017 c1 e0 02 shl eax, 2 0001a 89 04 24 mov DWORD PTR nSize$[rsp], eax ; 105 : nCR = nSize / m_LineWidth; //计算回车数量 0001d 33 d2 xor edx, edx 0001f 8b 04 24 mov eax, DWORD PTR nSize$[rsp] 00022 f7 35 00 00 00 00 div DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00028 89 44 24 04 mov DWORD PTR nCR$[rsp], eax ; 106 : nSize+= nCR * 2; 0002c 8b 04 24 mov eax, DWORD PTR nSize$[rsp] 0002f 8b 4c 24 04 mov ecx, DWORD PTR nCR$[rsp] 00033 8d 04 48 lea eax, DWORD PTR [rax+rcx*2] 00036 89 04 24 mov DWORD PTR nSize$[rsp], eax ; 107 : return nSize; 00039 8b 04 24 mov eax, DWORD PTR nSize$[rsp] ; 108 : } 0003c 48 83 c4 18 add rsp, 24 00040 c3 ret 0 ?Base64EncodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::Base64EncodeSize _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?email_decode@CMailCoder@@QEAAHPEADI0@Z _TEXT SEGMENT iDestLen$ = 32 pSrc2$ = 40 iStart$1 = 48 iStart2$2 = 52 iEnd$3 = 56 iEnd$4 = 60 iRet$5 = 64 iRet$6 = 68 iSize$ = 72 iSrc2Len$ = 76 tv172 = 80 this$ = 112 pSrc$ = 120 nSize$ = 128 pDest$ = 136 ?email_decode@CMailCoder@@QEAAHPEADI0@Z PROC ; CMailCoder::email_decode, COMDAT ; 499 : { $LN13: 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 00005 44 89 44 24 18 mov DWORD PTR [rsp+24], r8d 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 48 83 ec 68 sub rsp, 104 ; 00000068H ; 500 : int iSize=0; 00018 c7 44 24 48 00 00 00 00 mov DWORD PTR iSize$[rsp], 0 ; 501 : char * pSrc2=pSrc; 00020 48 8b 44 24 78 mov rax, QWORD PTR pSrc$[rsp] 00025 48 89 44 24 28 mov QWORD PTR pSrc2$[rsp], rax ; 502 : int iSrc2Len=0; 0002a c7 44 24 4c 00 00 00 00 mov DWORD PTR iSrc2Len$[rsp], 0 ; 503 : int iDestLen=0; 00032 c7 44 24 20 00 00 00 00 mov DWORD PTR iDestLen$[rsp], 0 $LN2@email_deco: ; 504 : while ( true ) 0003a 33 c0 xor eax, eax 0003c 83 f8 01 cmp eax, 1 0003f 0f 84 ea 01 00 00 je $LN3@email_deco ; 505 : { ; 506 : int iStart2 = FoundChar(pSrc2,"=?"); 00045 45 33 c9 xor r9d, r9d 00048 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:$SG321191 0004f 48 8b 54 24 28 mov rdx, QWORD PTR pSrc2$[rsp] 00054 48 8b 4c 24 70 mov rcx, QWORD PTR this$[rsp] 00059 e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 0005e 89 44 24 34 mov DWORD PTR iStart2$2[rsp], eax ; 507 : if ( iStart2 >= 0 ) 00062 83 7c 24 34 00 cmp DWORD PTR iStart2$2[rsp], 0 00067 0f 8c bb 01 00 00 jl $LN4@email_deco ; 508 : { ; 509 : strncpy(pDest+iDestLen,pSrc2,iStart2); 0006d 48 63 44 24 34 movsxd rax, DWORD PTR iStart2$2[rsp] 00072 48 63 4c 24 20 movsxd rcx, DWORD PTR iDestLen$[rsp] 00077 48 8b 94 24 88 00 00 00 mov rdx, QWORD PTR pDest$[rsp] 0007f 48 03 d1 add rdx, rcx 00082 48 8b ca mov rcx, rdx 00085 4c 8b c0 mov r8, rax 00088 48 8b 54 24 28 mov rdx, QWORD PTR pSrc2$[rsp] 0008d e8 00 00 00 00 call strncpy ; 510 : iDestLen +=iStart2; 00092 8b 44 24 34 mov eax, DWORD PTR iStart2$2[rsp] 00096 8b 4c 24 20 mov ecx, DWORD PTR iDestLen$[rsp] 0009a 03 c8 add ecx, eax 0009c 8b c1 mov eax, ecx 0009e 89 44 24 20 mov DWORD PTR iDestLen$[rsp], eax ; 511 : pSrc2+=iStart2+2; //=?为2个字节 000a2 8b 44 24 34 mov eax, DWORD PTR iStart2$2[rsp] 000a6 83 c0 02 add eax, 2 000a9 48 98 cdqe 000ab 48 8b 4c 24 28 mov rcx, QWORD PTR pSrc2$[rsp] 000b0 48 03 c8 add rcx, rax 000b3 48 8b c1 mov rax, rcx 000b6 48 89 44 24 28 mov QWORD PTR pSrc2$[rsp], rax ; 512 : int iStart = FoundChar(pSrc2,"?B?"); 000bb 45 33 c9 xor r9d, r9d 000be 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:$SG321194 000c5 48 8b 54 24 28 mov rdx, QWORD PTR pSrc2$[rsp] 000ca 48 8b 4c 24 70 mov rcx, QWORD PTR this$[rsp] 000cf e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 000d4 89 44 24 30 mov DWORD PTR iStart$1[rsp], eax ; 513 : if ( iStart > 0 ) 000d8 83 7c 24 30 00 cmp DWORD PTR iStart$1[rsp], 0 000dd 0f 8e 8e 00 00 00 jle $LN6@email_deco ; 514 : { ; 515 : //iStart += 3; //?B?为3个字节 ; 516 : pSrc2=pSrc2+iStart+3; //?B?为3个字节 000e3 48 63 44 24 30 movsxd rax, DWORD PTR iStart$1[rsp] 000e8 48 8b 4c 24 28 mov rcx, QWORD PTR pSrc2$[rsp] 000ed 48 8d 44 01 03 lea rax, QWORD PTR [rcx+rax+3] 000f2 48 89 44 24 28 mov QWORD PTR pSrc2$[rsp], rax ; 517 : int iEnd = FoundChar(pSrc2,"?="); 000f7 45 33 c9 xor r9d, r9d 000fa 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:$SG321197 00101 48 8b 54 24 28 mov rdx, QWORD PTR pSrc2$[rsp] 00106 48 8b 4c 24 70 mov rcx, QWORD PTR this$[rsp] 0010b e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 00110 89 44 24 38 mov DWORD PTR iEnd$3[rsp], eax ; 518 : if ( iEnd > 1 ) 00114 83 7c 24 38 01 cmp DWORD PTR iEnd$3[rsp], 1 00119 7e 51 jle SHORT $LN8@email_deco ; 519 : { ; 520 : int iRet = base64_decode(pSrc2,iEnd,pDest+iDestLen); 0011b 48 63 44 24 20 movsxd rax, DWORD PTR iDestLen$[rsp] 00120 48 8b 8c 24 88 00 00 00 mov rcx, QWORD PTR pDest$[rsp] 00128 48 03 c8 add rcx, rax 0012b 48 8b c1 mov rax, rcx 0012e 4c 8b c0 mov r8, rax 00131 8b 54 24 38 mov edx, DWORD PTR iEnd$3[rsp] 00135 48 8b 4c 24 28 mov rcx, QWORD PTR pSrc2$[rsp] 0013a e8 00 00 00 00 call ?base64_decode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::base64_decode 0013f 89 44 24 40 mov DWORD PTR iRet$5[rsp], eax ; 521 : pSrc2 += iEnd+2; //"?="有两个字节 00143 8b 44 24 38 mov eax, DWORD PTR iEnd$3[rsp] 00147 83 c0 02 add eax, 2 0014a 48 98 cdqe 0014c 48 8b 4c 24 28 mov rcx, QWORD PTR pSrc2$[rsp] 00151 48 03 c8 add rcx, rax 00154 48 8b c1 mov rax, rcx 00157 48 89 44 24 28 mov QWORD PTR pSrc2$[rsp], rax ; 522 : iDestLen += iRet; 0015c 8b 44 24 40 mov eax, DWORD PTR iRet$5[rsp] 00160 8b 4c 24 20 mov ecx, DWORD PTR iDestLen$[rsp] 00164 03 c8 add ecx, eax 00166 8b c1 mov eax, ecx 00168 89 44 24 20 mov DWORD PTR iDestLen$[rsp], eax $LN8@email_deco: ; 523 : } ; 524 : } 0016c e9 b5 00 00 00 jmp $LN7@email_deco $LN6@email_deco: ; 525 : else ; 526 : { ; 527 : iStart = FoundChar(pSrc2,"?Q?"); 00171 45 33 c9 xor r9d, r9d 00174 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:$SG321199 0017b 48 8b 54 24 28 mov rdx, QWORD PTR pSrc2$[rsp] 00180 48 8b 4c 24 70 mov rcx, QWORD PTR this$[rsp] 00185 e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 0018a 89 44 24 30 mov DWORD PTR iStart$1[rsp], eax ; 528 : if ( iStart > 0 ) 0018e 83 7c 24 30 00 cmp DWORD PTR iStart$1[rsp], 0 00193 0f 8e 8b 00 00 00 jle $LN9@email_deco ; 529 : { ; 530 : pSrc2=pSrc2+iStart+3; //?B?为3个字节 00199 48 63 44 24 30 movsxd rax, DWORD PTR iStart$1[rsp] 0019e 48 8b 4c 24 28 mov rcx, QWORD PTR pSrc2$[rsp] 001a3 48 8d 44 01 03 lea rax, QWORD PTR [rcx+rax+3] 001a8 48 89 44 24 28 mov QWORD PTR pSrc2$[rsp], rax ; 531 : int iEnd = FoundChar(pSrc2,"?="); 001ad 45 33 c9 xor r9d, r9d 001b0 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:$SG321202 001b7 48 8b 54 24 28 mov rdx, QWORD PTR pSrc2$[rsp] 001bc 48 8b 4c 24 70 mov rcx, QWORD PTR this$[rsp] 001c1 e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 001c6 89 44 24 3c mov DWORD PTR iEnd$4[rsp], eax ; 532 : if ( iEnd > 1 ) 001ca 83 7c 24 3c 01 cmp DWORD PTR iEnd$4[rsp], 1 001cf 7e 51 jle SHORT $LN11@email_deco ; 533 : { ; 534 : int iRet = quoted_decode(pSrc2,iEnd,pDest+iDestLen); 001d1 48 63 44 24 20 movsxd rax, DWORD PTR iDestLen$[rsp] 001d6 48 8b 8c 24 88 00 00 00 mov rcx, QWORD PTR pDest$[rsp] 001de 48 03 c8 add rcx, rax 001e1 48 8b c1 mov rax, rcx 001e4 4c 8b c0 mov r8, rax 001e7 8b 54 24 3c mov edx, DWORD PTR iEnd$4[rsp] 001eb 48 8b 4c 24 28 mov rcx, QWORD PTR pSrc2$[rsp] 001f0 e8 00 00 00 00 call ?quoted_decode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::quoted_decode 001f5 89 44 24 44 mov DWORD PTR iRet$6[rsp], eax ; 535 : pSrc2 += iEnd+2; //"?="有两个字节 001f9 8b 44 24 3c mov eax, DWORD PTR iEnd$4[rsp] 001fd 83 c0 02 add eax, 2 00200 48 98 cdqe 00202 48 8b 4c 24 28 mov rcx, QWORD PTR pSrc2$[rsp] 00207 48 03 c8 add rcx, rax 0020a 48 8b c1 mov rax, rcx 0020d 48 89 44 24 28 mov QWORD PTR pSrc2$[rsp], rax ; 536 : iDestLen += iRet; 00212 8b 44 24 44 mov eax, DWORD PTR iRet$6[rsp] 00216 8b 4c 24 20 mov ecx, DWORD PTR iDestLen$[rsp] 0021a 03 c8 add ecx, eax 0021c 8b c1 mov eax, ecx 0021e 89 44 24 20 mov DWORD PTR iDestLen$[rsp], eax $LN11@email_deco: ; 537 : } ; 538 : } 00222 eb 02 jmp SHORT $LN10@email_deco $LN9@email_deco: ; 539 : else ; 540 : { ; 541 : break; 00224 eb 09 jmp SHORT $LN3@email_deco $LN10@email_deco: $LN7@email_deco: ; 542 : } ; 543 : } ; 544 : } 00226 eb 02 jmp SHORT $LN5@email_deco $LN4@email_deco: ; 545 : else ; 546 : { ; 547 : break; 00228 eb 05 jmp SHORT $LN3@email_deco $LN5@email_deco: ; 548 : } ; 549 : } 0022a e9 0b fe ff ff jmp $LN2@email_deco $LN3@email_deco: ; 550 : strncpy( pDest+iDestLen,pSrc+(pSrc2-pSrc),nSize-(pSrc2-pSrc) ); //复制最后的数据 0022f 8b 84 24 80 00 00 00 mov eax, DWORD PTR nSize$[rsp] 00236 48 8b 4c 24 78 mov rcx, QWORD PTR pSrc$[rsp] 0023b 48 8b 54 24 28 mov rdx, QWORD PTR pSrc2$[rsp] 00240 48 2b d1 sub rdx, rcx 00243 48 8b ca mov rcx, rdx 00246 48 2b c1 sub rax, rcx 00249 48 8b 4c 24 78 mov rcx, QWORD PTR pSrc$[rsp] 0024e 48 8b 54 24 28 mov rdx, QWORD PTR pSrc2$[rsp] 00253 48 2b d1 sub rdx, rcx 00256 48 8b ca mov rcx, rdx 00259 48 8b 54 24 78 mov rdx, QWORD PTR pSrc$[rsp] 0025e 48 03 d1 add rdx, rcx 00261 48 8b ca mov rcx, rdx 00264 48 63 54 24 20 movsxd rdx, DWORD PTR iDestLen$[rsp] 00269 4c 8b 84 24 88 00 00 00 mov r8, QWORD PTR pDest$[rsp] 00271 4c 03 c2 add r8, rdx 00274 49 8b d0 mov rdx, r8 00277 48 89 54 24 50 mov QWORD PTR tv172[rsp], rdx 0027c 4c 8b c0 mov r8, rax 0027f 48 8b d1 mov rdx, rcx 00282 48 8b 44 24 50 mov rax, QWORD PTR tv172[rsp] 00287 48 8b c8 mov rcx, rax 0028a e8 00 00 00 00 call strncpy ; 551 : ; 552 : return nSize; 0028f 8b 84 24 80 00 00 00 mov eax, DWORD PTR nSize$[rsp] ; 553 : } 00296 48 83 c4 68 add rsp, 104 ; 00000068H 0029a c3 ret 0 ?email_decode@CMailCoder@@QEAAHPEADI0@Z ENDP ; CMailCoder::email_decode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z _TEXT SEGMENT i$1 = 32 lLen2$ = 36 $T2 = 40 j$ = 48 pComp$ = 64 __$ArrayPad$ = 4160 this$ = 4192 szSrc$ = 4200 pEx$ = 4208 lLen$ = 4216 ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z PROC ; CMailCoder::FoundChar, COMDAT ; 556 : { $LN10: 00000 44 89 4c 24 20 mov DWORD PTR [rsp+32], r9d 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 b8 58 10 00 00 mov eax, 4184 ; 00001058H 00019 e8 00 00 00 00 call __chkstk 0001e 48 2b e0 sub rsp, rax 00021 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 00028 48 33 c4 xor rax, rsp 0002b 48 89 84 24 40 10 00 00 mov QWORD PTR __$ArrayPad$[rsp], rax ; 557 : char pComp[4096]; ; 558 : if ( lLen == 0 ) //如果没指定长度,则取原字符串长度 00033 83 bc 24 78 10 00 00 00 cmp DWORD PTR lLen$[rsp], 0 0003b 75 14 jne SHORT $LN5@FoundChar ; 559 : lLen = strlen( szSrc ); 0003d 48 8b 8c 24 68 10 00 00 mov rcx, QWORD PTR szSrc$[rsp] 00045 e8 00 00 00 00 call strlen 0004a 89 84 24 78 10 00 00 mov DWORD PTR lLen$[rsp], eax $LN5@FoundChar: ; 560 : long lLen2= strlen( pEx ); 00051 48 8b 8c 24 70 10 00 00 mov rcx, QWORD PTR pEx$[rsp] 00059 e8 00 00 00 00 call strlen 0005e 89 44 24 24 mov DWORD PTR lLen2$[rsp], eax ; 561 : int j =0; 00062 c7 44 24 30 00 00 00 00 mov DWORD PTR j$[rsp], 0 ; 562 : for ( int i =0 ; i< lLen ; i++ ) 0006a c7 44 24 20 00 00 00 00 mov DWORD PTR i$1[rsp], 0 00072 eb 0a jmp SHORT $LN4@FoundChar $LN2@FoundChar: 00074 8b 44 24 20 mov eax, DWORD PTR i$1[rsp] 00078 ff c0 inc eax 0007a 89 44 24 20 mov DWORD PTR i$1[rsp], eax $LN4@FoundChar: 0007e 8b 84 24 78 10 00 00 mov eax, DWORD PTR lLen$[rsp] 00085 39 44 24 20 cmp DWORD PTR i$1[rsp], eax 00089 7d 6f jge SHORT $LN3@FoundChar ; 563 : { ; 564 : memcpy( pComp , szSrc+i , lLen2 ); 0008b 48 63 44 24 24 movsxd rax, DWORD PTR lLen2$[rsp] 00090 48 63 4c 24 20 movsxd rcx, DWORD PTR i$1[rsp] 00095 48 8b 94 24 68 10 00 00 mov rdx, QWORD PTR szSrc$[rsp] 0009d 48 03 d1 add rdx, rcx 000a0 48 8b ca mov rcx, rdx 000a3 4c 8b c0 mov r8, rax 000a6 48 8b d1 mov rdx, rcx 000a9 48 8d 4c 24 40 lea rcx, QWORD PTR pComp$[rsp] 000ae e8 00 00 00 00 call memcpy ; 565 : pComp[lLen2] = 0; 000b3 48 63 44 24 24 movsxd rax, DWORD PTR lLen2$[rsp] 000b8 48 89 44 24 28 mov QWORD PTR $T2[rsp], rax 000bd 48 81 7c 24 28 00 10 00 00 cmp QWORD PTR $T2[rsp], 4096 ; 00001000H 000c6 73 02 jae SHORT $LN8@FoundChar 000c8 eb 05 jmp SHORT $LN9@FoundChar $LN8@FoundChar: 000ca e8 00 00 00 00 call __report_rangecheckfailure $LN9@FoundChar: 000cf 48 8b 44 24 28 mov rax, QWORD PTR $T2[rsp] 000d4 c6 44 04 40 00 mov BYTE PTR pComp$[rsp+rax], 0 ; 566 : if (!strcmp( pComp , pEx ) ) 000d9 48 8b 94 24 70 10 00 00 mov rdx, QWORD PTR pEx$[rsp] 000e1 48 8d 4c 24 40 lea rcx, QWORD PTR pComp$[rsp] 000e6 e8 00 00 00 00 call strcmp 000eb 85 c0 test eax, eax 000ed 75 06 jne SHORT $LN6@FoundChar ; 567 : { ; 568 : return i; 000ef 8b 44 24 20 mov eax, DWORD PTR i$1[rsp] 000f3 eb 0a jmp SHORT $LN1@FoundChar $LN6@FoundChar: ; 569 : } ; 570 : } 000f5 e9 7a ff ff ff jmp $LN2@FoundChar $LN3@FoundChar: ; 571 : return -1; 000fa b8 ff ff ff ff mov eax, -1 $LN1@FoundChar: $LN7@FoundChar: ; 572 : } 000ff 48 8b 8c 24 40 10 00 00 mov rcx, QWORD PTR __$ArrayPad$[rsp] 00107 48 33 cc xor rcx, rsp 0010a e8 00 00 00 00 call __security_check_cookie 0010f 48 81 c4 58 10 00 00 add rsp, 4184 ; 00001058H 00116 c3 ret 0 ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ENDP ; CMailCoder::FoundChar _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?HexToDec@CMailCoder@@CAEE@Z _TEXT SEGMENT tv71 = 0 C$ = 32 ?HexToDec@CMailCoder@@CAEE@Z PROC ; CMailCoder::HexToDec, COMDAT ; 491 : { $LN5: 00000 88 4c 24 08 mov BYTE PTR [rsp+8], cl 00004 48 83 ec 18 sub rsp, 24 ; 492 : return C <= '9' ? C - '0' : C - 'A' + 10; 00008 0f b6 44 24 20 movzx eax, BYTE PTR C$[rsp] 0000d 83 f8 39 cmp eax, 57 ; 00000039H 00010 7f 0d jg SHORT $LN3@HexToDec 00012 0f b6 44 24 20 movzx eax, BYTE PTR C$[rsp] 00017 83 e8 30 sub eax, 48 ; 00000030H 0001a 89 04 24 mov DWORD PTR tv71[rsp], eax 0001d eb 0b jmp SHORT $LN4@HexToDec $LN3@HexToDec: 0001f 0f b6 44 24 20 movzx eax, BYTE PTR C$[rsp] 00024 83 e8 37 sub eax, 55 ; 00000037H 00027 89 04 24 mov DWORD PTR tv71[rsp], eax $LN4@HexToDec: 0002a 0f b6 04 24 movzx eax, BYTE PTR tv71[rsp] ; 493 : } 0002e 48 83 c4 18 add rsp, 24 00032 c3 ret 0 ?HexToDec@CMailCoder@@CAEE@Z ENDP ; CMailCoder::HexToDec _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?DecToHex@CMailCoder@@CAEE@Z _TEXT SEGMENT tv71 = 0 B$ = 32 ?DecToHex@CMailCoder@@CAEE@Z PROC ; CMailCoder::DecToHex, COMDAT ; 483 : { $LN5: 00000 88 4c 24 08 mov BYTE PTR [rsp+8], cl 00004 48 83 ec 18 sub rsp, 24 ; 484 : return B < 10 ? '0' + B:'A' + B - 10; 00008 0f b6 44 24 20 movzx eax, BYTE PTR B$[rsp] 0000d 83 f8 0a cmp eax, 10 00010 7d 0d jge SHORT $LN3@DecToHex 00012 0f b6 44 24 20 movzx eax, BYTE PTR B$[rsp] 00017 83 c0 30 add eax, 48 ; 00000030H 0001a 89 04 24 mov DWORD PTR tv71[rsp], eax 0001d eb 0b jmp SHORT $LN4@DecToHex $LN3@DecToHex: 0001f 0f b6 44 24 20 movzx eax, BYTE PTR B$[rsp] 00024 83 c0 37 add eax, 55 ; 00000037H 00027 89 04 24 mov DWORD PTR tv71[rsp], eax $LN4@DecToHex: 0002a 0f b6 04 24 movzx eax, BYTE PTR tv71[rsp] ; 485 : } 0002e 48 83 c4 18 add rsp, 24 00032 c3 ret 0 ?DecToHex@CMailCoder@@CAEE@Z ENDP ; CMailCoder::DecToHex _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z _TEXT SEGMENT __formal$ = 8 __formal$ = 16 __formal$ = 24 ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f c3 ret 0 ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z ENDP ; __empty_global_delete _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z _TEXT SEGMENT __formal$ = 8 __formal$ = 16 ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000a c3 ret 0 ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z ENDP ; __empty_global_delete _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX_K@Z _TEXT SEGMENT __formal$ = 8 __formal$ = 16 ?__empty_global_delete@@YAXPEAX_K@Z PROC ; __empty_global_delete, COMDAT 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000a c3 ret 0 ?__empty_global_delete@@YAXPEAX_K@Z ENDP ; __empty_global_delete _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX@Z _TEXT SEGMENT __formal$ = 8 ?__empty_global_delete@@YAXPEAX@Z PROC ; __empty_global_delete, COMDAT 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 c3 ret 0 ?__empty_global_delete@@YAXPEAX@Z ENDP ; __empty_global_delete _TEXT ENDS END