; 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 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 PUBLIC ??_C@_02HENDHKBC@?$DN?$DP@ ; `string' PUBLIC ??_C@_03FNDDLLIG@?$DPB?$DP@ ; `string' PUBLIC ??_C@_02EFGBMMPO@?$DP?$DN@ ; `string' PUBLIC ??_C@_03EDFDKGKP@?$DPQ?$DP@ ; `string' 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$?__empty_global_delete@@YAXPEAX@Z DD imagerel $LN3 DD imagerel $LN3+19 DD imagerel $unwind$?__empty_global_delete@@YAXPEAX@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?__empty_global_delete@@YAXPEAX_K@Z DD imagerel $LN3 DD imagerel $LN3+24 DD imagerel $unwind$?__empty_global_delete@@YAXPEAX_K@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DD imagerel $LN3 DD imagerel $LN3+24 DD imagerel $unwind$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DD imagerel $LN3 DD imagerel $LN3+29 DD imagerel $unwind$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?DecToHex@CMailCoder@@CAEE@Z DD imagerel $LN5 DD imagerel $LN5+53 DD imagerel $unwind$?DecToHex@CMailCoder@@CAEE@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?HexToDec@CMailCoder@@CAEE@Z DD imagerel $LN5 DD imagerel $LN5+53 DD imagerel $unwind$?HexToDec@CMailCoder@@CAEE@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?FoundChar@CMailCoder@@QEAAHPEAD0J@Z DD imagerel $LN10 DD imagerel $LN10+301 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+625 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+67 DD imagerel $unwind$?Base64EncodeSize@CMailCoder@@SAHH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Base64DecodeSize@CMailCoder@@SAHH@Z DD imagerel $LN3 DD imagerel $LN3+36 DD imagerel $unwind$?Base64DecodeSize@CMailCoder@@SAHH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?UUEncodeSize@CMailCoder@@SAHH@Z DD imagerel $LN3 DD imagerel $LN3+72 DD imagerel $unwind$?UUEncodeSize@CMailCoder@@SAHH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?UUDecodeSize@CMailCoder@@SAHH@Z DD imagerel $LN3 DD imagerel $LN3+36 DD imagerel $unwind$?UUDecodeSize@CMailCoder@@SAHH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?QuotedEncodeSize@CMailCoder@@SAHH@Z DD imagerel $LN3 DD imagerel $LN3+58 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+933 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+465 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+616 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+491 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+432 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 ??_C@_03EDFDKGKP@?$DPQ?$DP@ CONST SEGMENT ??_C@_03EDFDKGKP@?$DPQ?$DP@ DB '?Q?', 00H ; `string' CONST ENDS ; COMDAT ??_C@_02EFGBMMPO@?$DP?$DN@ CONST SEGMENT ??_C@_02EFGBMMPO@?$DP?$DN@ DB '?=', 00H ; `string' CONST ENDS ; COMDAT ??_C@_03FNDDLLIG@?$DPB?$DP@ CONST SEGMENT ??_C@_03FNDDLLIG@?$DPB?$DP@ DB '?B?', 00H ; `string' CONST ENDS ; COMDAT ??_C@_02HENDHKBC@?$DN?$DP@ CONST SEGMENT ??_C@_02HENDHKBC@?$DN?$DP@ DB '=?', 00H ; `string' CONST ENDS ; COMDAT xdata xdata SEGMENT $unwind$?quoted_decode@CMailCoder@@SAHPEADI0@Z DD 025031b01H DD 0f216231bH DD 0500fH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?quoted_encode@CMailCoder@@SAHPEADI0@Z DD 025041b01H DD 0116231bH DD 0500f0012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?UU_decode@CMailCoder@@SAHPEADI0@Z DD 025041b01H DD 0116231bH DD 0500f0012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?UU_encode@CMailCoder@@SAHPEADI0@Z DD 05031601H DD 0d2130316H DD 0500fH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?base64_decode@CMailCoder@@SAHPEADI0@Z DD 05031601H DD 0d2130316H DD 0500fH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?base64_encode@CMailCoder@@SAHPEADI0@Z DD 05031601H DD 0d2130316H DD 0500fH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?QuotedEncodeSize@CMailCoder@@SAHH@Z DD 05030c01H DD 09209030cH DD 05005H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?UUDecodeSize@CMailCoder@@SAHH@Z DD 05030c01H DD 07209030cH DD 05005H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?UUEncodeSize@CMailCoder@@SAHH@Z DD 05030c01H DD 09209030cH DD 05005H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Base64DecodeSize@CMailCoder@@SAHH@Z DD 05030c01H DD 07209030cH DD 05005H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Base64EncodeSize@CMailCoder@@SAHH@Z DD 05030c01H DD 09209030cH DD 05005H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?email_decode@CMailCoder@@QEAAHPEADI0@Z DD 025042101H DD 011c2321H DD 050150014H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 031H DW 0115H voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?FoundChar@CMailCoder@@QEAAHPEAD0J@Z DD 025043819H DD 01222327H DD 050150248H DD imagerel __GSHandlerCheck DD 01238H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?HexToDec@CMailCoder@@CAEE@Z DD 05030c01H DD 09209030cH DD 05005H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?DecToHex@CMailCoder@@CAEE@Z DD 05030c01H DD 09209030cH DD 05005H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DD 05031701H DD 072140317H DD 05010H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DD 05031201H DD 0720f0312H DD 0500bH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?__empty_global_delete@@YAXPEAX_K@Z DD 05031201H DD 0720f0312H DD 0500bH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?__empty_global_delete@@YAXPEAX@Z DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?quoted_decode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT nA$ = 0 nB$ = 1 C$ = 4 InLimitPtr$ = 8 pDestOrg$ = 16 tv88 = 88 tv83 = 88 tv74 = 88 pSrc$ = 112 nSize$ = 120 pDest$ = 128 ?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 55 push rbp 0000f 48 81 ec 80 00 00 00 sub rsp, 128 ; 00000080H 00016 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 448 : if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0; 0001b 48 83 7d 70 00 cmp QWORD PTR pSrc$[rbp], 0 00020 74 10 je SHORT $LN5@quoted_dec 00022 48 83 bd 80 00 00 00 00 cmp QWORD PTR pDest$[rbp], 0 0002a 74 06 je SHORT $LN5@quoted_dec 0002c 83 7d 78 00 cmp DWORD PTR nSize$[rbp], 0 00030 77 07 ja SHORT $LN4@quoted_dec $LN5@quoted_dec: 00032 33 c0 xor eax, eax 00034 e9 59 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; 00039 8b 45 78 mov eax, DWORD PTR nSize$[rbp] 0003c 48 8b 4d 70 mov rcx, QWORD PTR pSrc$[rbp] 00040 48 03 c8 add rcx, rax 00043 48 8b c1 mov rax, rcx 00046 48 89 45 08 mov QWORD PTR InLimitPtr$[rbp], rax ; 454 : char *pDestOrg = pDest; 0004a 48 8b 85 80 00 00 00 mov rax, QWORD PTR pDest$[rbp] 00051 48 89 45 10 mov QWORD PTR pDestOrg$[rbp], rax $LN2@quoted_dec: ; 455 : ; 456 : while (pSrc < InLimitPtr) 00055 48 8b 45 08 mov rax, QWORD PTR InLimitPtr$[rbp] 00059 48 39 45 70 cmp QWORD PTR pSrc$[rbp], rax 0005d 0f 83 1e 01 00 00 jae $LN3@quoted_dec ; 457 : { ; 458 : C[0] = *pSrc++; //先取第一字符 00063 48 8b 45 70 mov rax, QWORD PTR pSrc$[rbp] 00067 0f b6 00 movzx eax, BYTE PTR [rax] 0006a 88 45 58 mov BYTE PTR tv74[rbp], al 0006d 48 8b 45 70 mov rax, QWORD PTR pSrc$[rbp] 00071 48 ff c0 inc rax 00074 48 89 45 70 mov QWORD PTR pSrc$[rbp], rax 00078 b8 01 00 00 00 mov eax, 1 0007d 48 6b c0 00 imul rax, rax, 0 00081 0f b6 4d 58 movzx ecx, BYTE PTR tv74[rbp] 00085 88 4c 05 04 mov BYTE PTR C$[rbp+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 05 04 movsx eax, BYTE PTR C$[rbp+rax] 00097 83 f8 3d cmp eax, 61 ; 0000003dH 0009a 0f 85 b4 00 00 00 jne $LN6@quoted_dec ; 460 : { ; 461 : C[0] = *pSrc++; //取出两个编码字符 000a0 48 8b 45 70 mov rax, QWORD PTR pSrc$[rbp] 000a4 0f b6 00 movzx eax, BYTE PTR [rax] 000a7 88 45 58 mov BYTE PTR tv83[rbp], al 000aa 48 8b 45 70 mov rax, QWORD PTR pSrc$[rbp] 000ae 48 ff c0 inc rax 000b1 48 89 45 70 mov QWORD PTR pSrc$[rbp], rax 000b5 b8 01 00 00 00 mov eax, 1 000ba 48 6b c0 00 imul rax, rax, 0 000be 0f b6 4d 58 movzx ecx, BYTE PTR tv83[rbp] 000c2 88 4c 05 04 mov BYTE PTR C$[rbp+rax], cl ; 462 : C[1] = *pSrc++; 000c6 48 8b 45 70 mov rax, QWORD PTR pSrc$[rbp] 000ca 0f b6 00 movzx eax, BYTE PTR [rax] 000cd 88 45 58 mov BYTE PTR tv88[rbp], al 000d0 48 8b 45 70 mov rax, QWORD PTR pSrc$[rbp] 000d4 48 ff c0 inc rax 000d7 48 89 45 70 mov QWORD PTR pSrc$[rbp], rax 000db b8 01 00 00 00 mov eax, 1 000e0 48 6b c0 01 imul rax, rax, 1 000e4 0f b6 4d 58 movzx ecx, BYTE PTR tv88[rbp] 000e8 88 4c 05 04 mov BYTE PTR C$[rbp+rax], cl ; 463 : ; 464 : if (C[0] != '\r') 000ec b8 01 00 00 00 mov eax, 1 000f1 48 6b c0 00 imul rax, rax, 0 000f5 0f be 44 05 04 movsx eax, BYTE PTR C$[rbp+rax] 000fa 83 f8 0d cmp eax, 13 000fd 74 53 je SHORT $LN8@quoted_dec ; 465 : { ; 466 : nA = HexToDec(C[0]); //解码变换 000ff b8 01 00 00 00 mov eax, 1 00104 48 6b c0 00 imul rax, rax, 0 00108 0f b6 4c 05 04 movzx ecx, BYTE PTR C$[rbp+rax] 0010d e8 00 00 00 00 call ?HexToDec@CMailCoder@@CAEE@Z ; CMailCoder::HexToDec 00112 88 45 00 mov BYTE PTR nA$[rbp], al ; 467 : nB = HexToDec(C[1]); 00115 b8 01 00 00 00 mov eax, 1 0011a 48 6b c0 01 imul rax, rax, 1 0011e 0f b6 4c 05 04 movzx ecx, BYTE PTR C$[rbp+rax] 00123 e8 00 00 00 00 call ?HexToDec@CMailCoder@@CAEE@Z ; CMailCoder::HexToDec 00128 88 45 01 mov BYTE PTR nB$[rbp], al ; 468 : *pDest++ = (nA << 4) + nB; 0012b 0f b6 45 00 movzx eax, BYTE PTR nA$[rbp] 0012f c1 e0 04 shl eax, 4 00132 0f b6 4d 01 movzx ecx, BYTE PTR nB$[rbp] 00136 03 c1 add eax, ecx 00138 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR pDest$[rbp] 0013f 88 01 mov BYTE PTR [rcx], al 00141 48 8b 85 80 00 00 00 mov rax, QWORD PTR pDest$[rbp] 00148 48 ff c0 inc rax 0014b 48 89 85 80 00 00 00 mov QWORD PTR pDest$[rbp], rax $LN8@quoted_dec: ; 469 : } ; 470 : } 00152 eb 28 jmp SHORT $LN7@quoted_dec $LN6@quoted_dec: ; 471 : else //否则直接输出 ; 472 : { ; 473 : *pDest++ = C[0]; 00154 b8 01 00 00 00 mov eax, 1 00159 48 6b c0 00 imul rax, rax, 0 0015d 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR pDest$[rbp] 00164 0f b6 44 05 04 movzx eax, BYTE PTR C$[rbp+rax] 00169 88 01 mov BYTE PTR [rcx], al 0016b 48 8b 85 80 00 00 00 mov rax, QWORD PTR pDest$[rbp] 00172 48 ff c0 inc rax 00175 48 89 85 80 00 00 00 mov QWORD PTR pDest$[rbp], rax $LN7@quoted_dec: ; 474 : } ; 475 : } 0017c e9 d4 fe ff ff jmp $LN2@quoted_dec $LN3@quoted_dec: ; 476 : return (unsigned int)(pDest - pDestOrg); 00181 48 8b 45 10 mov rax, QWORD PTR pDestOrg$[rbp] 00185 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR pDest$[rbp] 0018c 48 2b c8 sub rcx, rax 0018f 48 8b c1 mov rax, rcx $LN1@quoted_dec: ; 477 : } 00192 48 8d 65 60 lea rsp, QWORD PTR [rbp+96] 00196 5d pop rbp 00197 c3 ret 0 ?quoted_decode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::quoted_decode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?quoted_encode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT Len$ = 0 B$ = 4 InPtr$ = 8 InLimitPtr$ = 16 OutPtr$ = 24 tv74 = 96 pSrc$ = 128 nSize$ = 136 pDest$ = 144 ?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 55 push rbp 0000f 48 81 ec 90 00 00 00 sub rsp, 144 ; 00000090H 00016 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 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; 0001b 48 83 bd 80 00 00 00 00 cmp QWORD PTR pSrc$[rbp], 0 00023 74 13 je SHORT $LN7@quoted_enc 00025 48 83 bd 90 00 00 00 00 cmp QWORD PTR pDest$[rbp], 0 0002d 74 09 je SHORT $LN7@quoted_enc 0002f 83 bd 88 00 00 00 00 cmp DWORD PTR nSize$[rbp], 0 00036 77 07 ja SHORT $LN6@quoted_enc $LN7@quoted_enc: 00038 33 c0 xor eax, eax 0003a e9 6b 01 00 00 jmp $LN1@quoted_enc $LN6@quoted_enc: ; 408 : ; 409 : InPtr = pSrc; 0003f 48 8b 85 80 00 00 00 mov rax, QWORD PTR pSrc$[rbp] 00046 48 89 45 08 mov QWORD PTR InPtr$[rbp], rax ; 410 : InLimitPtr= InPtr + nSize; 0004a 8b 85 88 00 00 00 mov eax, DWORD PTR nSize$[rbp] 00050 48 8b 4d 08 mov rcx, QWORD PTR InPtr$[rbp] 00054 48 03 c8 add rcx, rax 00057 48 8b c1 mov rax, rcx 0005a 48 89 45 10 mov QWORD PTR InLimitPtr$[rbp], rax ; 411 : OutPtr = pDest; 0005e 48 8b 85 90 00 00 00 mov rax, QWORD PTR pDest$[rbp] 00065 48 89 45 18 mov QWORD PTR OutPtr$[rbp], rax $LN2@quoted_enc: ; 412 : ; 413 : while (InPtr < InLimitPtr) 00069 48 8b 45 10 mov rax, QWORD PTR InLimitPtr$[rbp] 0006d 48 39 45 08 cmp QWORD PTR InPtr$[rbp], rax 00071 0f 83 1b 01 00 00 jae $LN3@quoted_enc ; 414 : { ; 415 : Len = 0; 00077 c7 45 00 00 00 00 00 mov DWORD PTR Len$[rbp], 0 $LN4@quoted_enc: ; 416 : while ((InPtr < InLimitPtr) && (Len < m_LineWidth)) 0007e 48 8b 45 10 mov rax, QWORD PTR InLimitPtr$[rbp] 00082 48 39 45 08 cmp QWORD PTR InPtr$[rbp], rax 00086 0f 83 c0 00 00 00 jae $LN5@quoted_enc 0008c 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00092 39 45 00 cmp DWORD PTR Len$[rbp], eax 00095 0f 83 b1 00 00 00 jae $LN5@quoted_enc ; 417 : { ; 418 : B = *InPtr++; 0009b 48 8b 45 08 mov rax, QWORD PTR InPtr$[rbp] 0009f 0f b6 00 movzx eax, BYTE PTR [rax] 000a2 88 45 60 mov BYTE PTR tv74[rbp], al 000a5 48 8b 45 08 mov rax, QWORD PTR InPtr$[rbp] 000a9 48 ff c0 inc rax 000ac 48 89 45 08 mov QWORD PTR InPtr$[rbp], rax 000b0 0f b6 45 60 movzx eax, BYTE PTR tv74[rbp] 000b4 88 45 04 mov BYTE PTR B$[rbp], al ; 419 : if (QUOTED_ENCODE_TABLE[ B ] == 255) 000b7 0f b6 45 04 movzx eax, BYTE PTR B$[rbp] 000bb 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?QUOTED_ENCODE_TABLE@CMailCoder@@2QBEB ; CMailCoder::QUOTED_ENCODE_TABLE 000c2 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000c6 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 000cb 75 5d jne SHORT $LN8@quoted_enc ; 420 : { ; 421 : *OutPtr++ = '='; 000cd 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 000d1 c6 00 3d mov BYTE PTR [rax], 61 ; 0000003dH 000d4 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 000d8 48 ff c0 inc rax 000db 48 89 45 18 mov QWORD PTR OutPtr$[rbp], rax ; 422 : *OutPtr++ = DecToHex(B >> 4); 000df 0f b6 45 04 movzx eax, BYTE PTR B$[rbp] 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 4d 18 mov rcx, QWORD PTR OutPtr$[rbp] 000f2 88 01 mov BYTE PTR [rcx], al 000f4 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 000f8 48 ff c0 inc rax 000fb 48 89 45 18 mov QWORD PTR OutPtr$[rbp], rax ; 423 : *OutPtr++ = DecToHex(B & 0x0f); 000ff 0f b6 45 04 movzx eax, BYTE PTR B$[rbp] 00103 83 e0 0f and eax, 15 00106 0f b6 c8 movzx ecx, al 00109 e8 00 00 00 00 call ?DecToHex@CMailCoder@@CAEE@Z ; CMailCoder::DecToHex 0010e 48 8b 4d 18 mov rcx, QWORD PTR OutPtr$[rbp] 00112 88 01 mov BYTE PTR [rcx], al 00114 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 00118 48 ff c0 inc rax 0011b 48 89 45 18 mov QWORD PTR OutPtr$[rbp], rax ; 424 : Len+=3; 0011f 8b 45 00 mov eax, DWORD PTR Len$[rbp] 00122 83 c0 03 add eax, 3 00125 89 45 00 mov DWORD PTR Len$[rbp], eax ; 425 : } 00128 eb 1d jmp SHORT $LN9@quoted_enc $LN8@quoted_enc: ; 426 : else ; 427 : { ; 428 : *OutPtr++ = B; 0012a 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 0012e 0f b6 4d 04 movzx ecx, BYTE PTR B$[rbp] 00132 88 08 mov BYTE PTR [rax], cl 00134 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 00138 48 ff c0 inc rax 0013b 48 89 45 18 mov QWORD PTR OutPtr$[rbp], rax ; 429 : Len++; 0013f 8b 45 00 mov eax, DWORD PTR Len$[rbp] 00142 ff c0 inc eax 00144 89 45 00 mov DWORD PTR Len$[rbp], eax $LN9@quoted_enc: ; 430 : } ; 431 : } 00147 e9 32 ff ff ff jmp $LN4@quoted_enc $LN5@quoted_enc: ; 432 : if (Len >= m_LineWidth) 0014c 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00152 39 45 00 cmp DWORD PTR Len$[rbp], eax 00155 72 36 jb SHORT $LN10@quoted_enc ; 433 : { ; 434 : *OutPtr++ = '='; 00157 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 0015b c6 00 3d mov BYTE PTR [rax], 61 ; 0000003dH 0015e 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 00162 48 ff c0 inc rax 00165 48 89 45 18 mov QWORD PTR OutPtr$[rbp], rax ; 435 : *OutPtr++ = '\r'; //设置新行 00169 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 0016d c6 00 0d mov BYTE PTR [rax], 13 00170 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 00174 48 ff c0 inc rax 00177 48 89 45 18 mov QWORD PTR OutPtr$[rbp], rax ; 436 : *OutPtr++ = '\n'; 0017b 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 0017f c6 00 0a mov BYTE PTR [rax], 10 00182 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 00186 48 ff c0 inc rax 00189 48 89 45 18 mov QWORD PTR OutPtr$[rbp], rax $LN10@quoted_enc: ; 437 : } ; 438 : } 0018d e9 d7 fe ff ff jmp $LN2@quoted_enc $LN3@quoted_enc: ; 439 : *OutPtr = '\0'; 00192 48 8b 45 18 mov rax, QWORD PTR OutPtr$[rbp] 00196 c6 00 00 mov BYTE PTR [rax], 0 ; 440 : return (unsigned int) (OutPtr - pDest); 00199 48 8b 85 90 00 00 00 mov rax, QWORD PTR pDest$[rbp] 001a0 48 8b 4d 18 mov rcx, QWORD PTR OutPtr$[rbp] 001a4 48 2b c8 sub rcx, rax 001a7 48 8b c1 mov rax, rcx $LN1@quoted_enc: ; 441 : } 001aa 48 8d 65 70 lea rsp, QWORD PTR [rbp+112] 001ae 5d pop rbp 001af c3 ret 0 ?quoted_encode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::quoted_encode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?UU_decode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT C$ = 0 Tmp$ = 4 CurrIndex$ = 8 Index$ = 12 InPtr$ = 16 InLimitPtr$ = 24 OutPtr$ = 32 tv75 = 104 pSrc$ = 128 nSize$ = 136 pDest$ = 144 ?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 55 push rbp 0000f 48 81 ec 90 00 00 00 sub rsp, 144 ; 00000090H 00016 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 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; 0001b 48 83 bd 80 00 00 00 00 cmp QWORD PTR pSrc$[rbp], 0 00023 74 13 je SHORT $LN8@UU_decode 00025 48 83 bd 90 00 00 00 00 cmp QWORD PTR pDest$[rbp], 0 0002d 74 09 je SHORT $LN8@UU_decode 0002f 83 bd 88 00 00 00 00 cmp DWORD PTR nSize$[rbp], 0 00036 77 07 ja SHORT $LN7@UU_decode $LN8@UU_decode: 00038 33 c0 xor eax, eax 0003a e9 a6 01 00 00 jmp $LN1@UU_decode $LN7@UU_decode: ; 349 : ; 350 : CurrIndex = 0; 0003f c7 45 08 00 00 00 00 mov DWORD PTR CurrIndex$[rbp], 0 ; 351 : ; 352 : InPtr = pSrc; 00046 48 8b 85 80 00 00 00 mov rax, QWORD PTR pSrc$[rbp] 0004d 48 89 45 10 mov QWORD PTR InPtr$[rbp], rax ; 353 : InLimitPtr= InPtr + nSize; 00051 8b 85 88 00 00 00 mov eax, DWORD PTR nSize$[rbp] 00057 48 8b 4d 10 mov rcx, QWORD PTR InPtr$[rbp] 0005b 48 03 c8 add rcx, rax 0005e 48 8b c1 mov rax, rcx 00061 48 89 45 18 mov QWORD PTR InLimitPtr$[rbp], rax ; 354 : OutPtr = pDest; 00065 48 8b 85 90 00 00 00 mov rax, QWORD PTR pDest$[rbp] 0006c 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax $LN2@UU_decode: ; 355 : ; 356 : while (InPtr != InLimitPtr) //读取4个字符 00070 48 8b 45 18 mov rax, QWORD PTR InLimitPtr$[rbp] 00074 48 39 45 10 cmp QWORD PTR InPtr$[rbp], rax 00078 0f 84 5a 01 00 00 je $LN3@UU_decode ; 357 : { ; 358 : memset(C, 0, sizeof(C)); 0007e 41 b8 04 00 00 00 mov r8d, 4 00084 33 d2 xor edx, edx 00086 48 8d 4d 00 lea rcx, QWORD PTR C$[rbp] 0008a e8 00 00 00 00 call memset ; 359 : Index = 0; 0008f c7 45 0c 00 00 00 00 mov DWORD PTR Index$[rbp], 0 $LN6@UU_decode: ; 360 : do ; 361 : { ; 362 : Tmp = *InPtr++; 00096 48 8b 45 10 mov rax, QWORD PTR InPtr$[rbp] 0009a 0f b6 00 movzx eax, BYTE PTR [rax] 0009d 88 45 68 mov BYTE PTR tv75[rbp], al 000a0 48 8b 45 10 mov rax, QWORD PTR InPtr$[rbp] 000a4 48 ff c0 inc rax 000a7 48 89 45 10 mov QWORD PTR InPtr$[rbp], rax 000ab 0f b6 45 68 movzx eax, BYTE PTR tv75[rbp] 000af 88 45 04 mov BYTE PTR Tmp$[rbp], al ; 363 : if (Tmp == 0x60) 000b2 0f be 45 04 movsx eax, BYTE PTR Tmp$[rbp] 000b6 83 f8 60 cmp eax, 96 ; 00000060H 000b9 75 06 jne SHORT $LN9@UU_decode ; 364 : { ; 365 : Tmp = 0x20; //为了兼容OutLook Express 000bb c6 45 04 20 mov BYTE PTR Tmp$[rbp], 32 ; 00000020H ; 366 : } 000bf eb 1b jmp SHORT $LN10@UU_decode $LN9@UU_decode: ; 367 : else if (Tmp =='\r') //首个字母不处理 000c1 0f be 45 04 movsx eax, BYTE PTR Tmp$[rbp] 000c5 83 f8 0d cmp eax, 13 000c8 75 12 jne SHORT $LN11@UU_decode ; 368 : { ; 369 : InPtr++; 000ca 48 8b 45 10 mov rax, QWORD PTR InPtr$[rbp] 000ce 48 ff c0 inc rax 000d1 48 89 45 10 mov QWORD PTR InPtr$[rbp], rax ; 370 : CurrIndex = 0; 000d5 c7 45 08 00 00 00 00 mov DWORD PTR CurrIndex$[rbp], 0 $LN11@UU_decode: $LN10@UU_decode: ; 371 : } ; 372 : ; 373 : if ((Tmp > 0x20) || ( CurrIndex > 0 )) 000dc 0f be 45 04 movsx eax, BYTE PTR Tmp$[rbp] 000e0 83 f8 20 cmp eax, 32 ; 00000020H 000e3 7f 06 jg SHORT $LN13@UU_decode 000e5 83 7d 08 00 cmp DWORD PTR CurrIndex$[rbp], 0 000e9 7e 2d jle SHORT $LN12@UU_decode $LN13@UU_decode: ; 374 : { ; 375 : Tmp = Tmp - 0x20; 000eb 0f be 45 04 movsx eax, BYTE PTR Tmp$[rbp] 000ef 83 e8 20 sub eax, 32 ; 00000020H 000f2 88 45 04 mov BYTE PTR Tmp$[rbp], al ; 376 : if (CurrIndex == 0) 000f5 83 7d 08 00 cmp DWORD PTR CurrIndex$[rbp], 0 000f9 75 09 jne SHORT $LN14@UU_decode ; 377 : { ; 378 : CurrIndex = Tmp; 000fb 0f be 45 04 movsx eax, BYTE PTR Tmp$[rbp] 000ff 89 45 08 mov DWORD PTR CurrIndex$[rbp], eax ; 379 : } 00102 eb 14 jmp SHORT $LN15@UU_decode $LN14@UU_decode: ; 380 : else ; 381 : { ; 382 : C[Index] = Tmp; // 向数组中追加字符 00104 48 63 45 0c movsxd rax, DWORD PTR Index$[rbp] 00108 0f b6 4d 04 movzx ecx, BYTE PTR Tmp$[rbp] 0010c 88 4c 05 00 mov BYTE PTR C$[rbp+rax], cl ; 383 : Index++; 00110 8b 45 0c mov eax, DWORD PTR Index$[rbp] 00113 ff c0 inc eax 00115 89 45 0c mov DWORD PTR Index$[rbp], eax $LN15@UU_decode: $LN12@UU_decode: ; 384 : } ; 385 : } ; 386 : } ; 387 : while ((InPtr < InLimitPtr) && (Index < sizeof(C))); 00118 48 8b 45 18 mov rax, QWORD PTR InLimitPtr$[rbp] 0011c 48 39 45 10 cmp QWORD PTR InPtr$[rbp], rax 00120 73 0e jae SHORT $LN16@UU_decode 00122 48 63 45 0c movsxd rax, DWORD PTR Index$[rbp] 00126 48 83 f8 04 cmp rax, 4 0012a 0f 82 66 ff ff ff jb $LN6@UU_decode $LN16@UU_decode: ; 388 : ; 389 : OutPtr[0] = (char) ((C[0] << 2) + (C[1] >> 4)); 00130 b8 01 00 00 00 mov eax, 1 00135 48 6b c0 00 imul rax, rax, 0 00139 0f be 44 05 00 movsx eax, BYTE PTR C$[rbp+rax] 0013e b9 01 00 00 00 mov ecx, 1 00143 48 6b c9 01 imul rcx, rcx, 1 00147 0f be 4c 0d 00 movsx ecx, BYTE PTR C$[rbp+rcx] 0014c c1 f9 04 sar ecx, 4 0014f 8d 04 81 lea eax, DWORD PTR [rcx+rax*4] 00152 b9 01 00 00 00 mov ecx, 1 00157 48 6b c9 00 imul rcx, rcx, 0 0015b 48 8b 55 20 mov rdx, QWORD PTR OutPtr$[rbp] 0015f 88 04 0a mov BYTE PTR [rdx+rcx], al ; 390 : OutPtr[1] = (char) ((C[1] << 4) + (C[2] >> 2)); 00162 b8 01 00 00 00 mov eax, 1 00167 48 6b c0 01 imul rax, rax, 1 0016b 0f be 44 05 00 movsx eax, BYTE PTR C$[rbp+rax] 00170 c1 e0 04 shl eax, 4 00173 b9 01 00 00 00 mov ecx, 1 00178 48 6b c9 02 imul rcx, rcx, 2 0017c 0f be 4c 0d 00 movsx ecx, BYTE PTR C$[rbp+rcx] 00181 c1 f9 02 sar ecx, 2 00184 03 c1 add eax, ecx 00186 b9 01 00 00 00 mov ecx, 1 0018b 48 6b c9 01 imul rcx, rcx, 1 0018f 48 8b 55 20 mov rdx, QWORD PTR OutPtr$[rbp] 00193 88 04 0a mov BYTE PTR [rdx+rcx], al ; 391 : OutPtr[2] = (char) ((C[2] << 6) + C[3]); 00196 b8 01 00 00 00 mov eax, 1 0019b 48 6b c0 02 imul rax, rax, 2 0019f 0f be 44 05 00 movsx eax, BYTE PTR C$[rbp+rax] 001a4 c1 e0 06 shl eax, 6 001a7 b9 01 00 00 00 mov ecx, 1 001ac 48 6b c9 03 imul rcx, rcx, 3 001b0 0f be 4c 0d 00 movsx ecx, BYTE PTR C$[rbp+rcx] 001b5 03 c1 add eax, ecx 001b7 b9 01 00 00 00 mov ecx, 1 001bc 48 6b c9 02 imul rcx, rcx, 2 001c0 48 8b 55 20 mov rdx, QWORD PTR OutPtr$[rbp] 001c4 88 04 0a mov BYTE PTR [rdx+rcx], al ; 392 : OutPtr+=3; //设置起始位置 001c7 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 001cb 48 83 c0 03 add rax, 3 001cf 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax ; 393 : } 001d3 e9 98 fe ff ff jmp $LN2@UU_decode $LN3@UU_decode: ; 394 : return (unsigned int)OutPtr - (unsigned int)pDest; 001d8 8b 85 90 00 00 00 mov eax, DWORD PTR pDest$[rbp] 001de 8b 4d 20 mov ecx, DWORD PTR OutPtr$[rbp] 001e1 2b c8 sub ecx, eax 001e3 8b c1 mov eax, ecx $LN1@UU_decode: ; 395 : } 001e5 48 8d 65 70 lea rsp, QWORD PTR [rbp+112] 001e9 5d pop rbp 001ea c3 ret 0 ?UU_decode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::UU_decode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?UU_encode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT lByteBufferSpace$ = 0 Len$ = 4 B$ = 8 InPtr$ = 16 InLimitPtr$ = 24 OutPtr$ = 32 i$1 = 40 tv81 = 108 pSrc$ = 128 nSize$ = 136 pDest$ = 144 ?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 55 push rbp 0000f 48 83 ec 70 sub rsp, 112 ; 00000070H 00013 48 8b ec mov rbp, rsp ; 286 : if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0; 00016 48 83 bd 80 00 00 00 00 cmp QWORD PTR pSrc$[rbp], 0 0001e 74 13 je SHORT $LN13@UU_encode 00020 48 83 bd 90 00 00 00 00 cmp QWORD PTR pDest$[rbp], 0 00028 74 09 je SHORT $LN13@UU_encode 0002a 83 bd 88 00 00 00 00 cmp DWORD PTR nSize$[rbp], 0 00031 77 07 ja SHORT $LN12@UU_encode $LN13@UU_encode: 00033 33 c0 xor eax, eax 00035 e9 28 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; 0003a 48 8b 85 80 00 00 00 mov rax, QWORD PTR pSrc$[rbp] 00041 48 89 45 10 mov QWORD PTR InPtr$[rbp], rax ; 294 : InLimitPtr= InPtr + nSize; 00045 8b 85 88 00 00 00 mov eax, DWORD PTR nSize$[rbp] 0004b 48 8b 4d 10 mov rcx, QWORD PTR InPtr$[rbp] 0004f 48 03 c8 add rcx, rax 00052 48 8b c1 mov rax, rcx 00055 48 89 45 18 mov QWORD PTR InLimitPtr$[rbp], rax ; 295 : OutPtr = pDest; 00059 48 8b 85 90 00 00 00 mov rax, QWORD PTR pDest$[rbp] 00060 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax $LN2@UU_encode: ; 296 : ; 297 : while (InPtr < InLimitPtr) 00064 48 8b 45 18 mov rax, QWORD PTR InLimitPtr$[rbp] 00068 48 39 45 10 cmp QWORD PTR InPtr$[rbp], rax 0006c 0f 83 df 01 00 00 jae $LN3@UU_encode ; 298 : { ; 299 : Len = 0; 00072 c7 45 04 00 00 00 00 mov DWORD PTR Len$[rbp], 0 $LN4@UU_encode: ; 300 : ; 301 : while ((InPtr < InLimitPtr) && (Len < m_LineWidth)) 00079 48 8b 45 18 mov rax, QWORD PTR InLimitPtr$[rbp] 0007d 48 39 45 10 cmp QWORD PTR InPtr$[rbp], rax 00081 0f 83 a1 01 00 00 jae $LN5@UU_encode 00087 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 0008d 39 45 04 cmp DWORD PTR Len$[rbp], eax 00090 0f 83 92 01 00 00 jae $LN5@UU_encode ; 302 : { ; 303 : lByteBufferSpace = (unsigned int) InLimitPtr - (unsigned int) InPtr; 00096 8b 45 10 mov eax, DWORD PTR InPtr$[rbp] 00099 8b 4d 18 mov ecx, DWORD PTR InLimitPtr$[rbp] 0009c 2b c8 sub ecx, eax 0009e 8b c1 mov eax, ecx 000a0 89 45 00 mov DWORD PTR lByteBufferSpace$[rbp], eax ; 304 : if (lByteBufferSpace > 3) lByteBufferSpace = 3; //设置步长 000a3 83 7d 00 03 cmp DWORD PTR lByteBufferSpace$[rbp], 3 000a7 76 07 jbe SHORT $LN14@UU_encode 000a9 c7 45 00 03 00 00 00 mov DWORD PTR lByteBufferSpace$[rbp], 3 $LN14@UU_encode: ; 305 : //取值 ; 306 : for (unsigned int i = 0; i < lByteBufferSpace; i++ ) 000b0 c7 45 28 00 00 00 00 mov DWORD PTR i$1[rbp], 0 000b7 eb 08 jmp SHORT $LN8@UU_encode $LN6@UU_encode: 000b9 8b 45 28 mov eax, DWORD PTR i$1[rbp] 000bc ff c0 inc eax 000be 89 45 28 mov DWORD PTR i$1[rbp], eax $LN8@UU_encode: 000c1 8b 45 00 mov eax, DWORD PTR lByteBufferSpace$[rbp] 000c4 39 45 28 cmp DWORD PTR i$1[rbp], eax 000c7 73 22 jae SHORT $LN7@UU_encode ; 307 : { ; 308 : B[i] = *InPtr++; 000c9 48 8b 45 10 mov rax, QWORD PTR InPtr$[rbp] 000cd 0f b6 00 movzx eax, BYTE PTR [rax] 000d0 88 45 6c mov BYTE PTR tv81[rbp], al 000d3 48 8b 45 10 mov rax, QWORD PTR InPtr$[rbp] 000d7 48 ff c0 inc rax 000da 48 89 45 10 mov QWORD PTR InPtr$[rbp], rax 000de 8b 45 28 mov eax, DWORD PTR i$1[rbp] 000e1 0f b6 4d 6c movzx ecx, BYTE PTR tv81[rbp] 000e5 88 4c 05 08 mov BYTE PTR B$[rbp+rax], cl ; 309 : } 000e9 eb ce jmp SHORT $LN6@UU_encode $LN7@UU_encode: ; 310 : if (Len == 0) 000eb 83 7d 04 00 cmp DWORD PTR Len$[rbp], 0 000ef 75 1a jne SHORT $LN15@UU_encode ; 311 : { ; 312 : *OutPtr++ = 'M'; 000f1 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 000f5 c6 00 4d mov BYTE PTR [rax], 77 ; 0000004dH 000f8 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 000fc 48 ff c0 inc rax 000ff 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax ; 313 : Len++; 00103 8b 45 04 mov eax, DWORD PTR Len$[rbp] 00106 ff c0 inc eax 00108 89 45 04 mov DWORD PTR Len$[rbp], eax $LN15@UU_encode: ; 314 : } ; 315 : //编码运算 ; 316 : OutPtr[0] = B[0] >> 2; 0010b b8 01 00 00 00 mov eax, 1 00110 48 6b c0 00 imul rax, rax, 0 00114 0f b6 44 05 08 movzx eax, BYTE PTR B$[rbp+rax] 00119 c1 f8 02 sar eax, 2 0011c b9 01 00 00 00 mov ecx, 1 00121 48 6b c9 00 imul rcx, rcx, 0 00125 48 8b 55 20 mov rdx, QWORD PTR OutPtr$[rbp] 00129 88 04 0a mov BYTE PTR [rdx+rcx], al ; 317 : OutPtr[1] = (unsigned int) (B[0] << 4 & 0x30) + (unsigned int) (B[1] >> 4 & 0x0F); 0012c b8 01 00 00 00 mov eax, 1 00131 48 6b c0 00 imul rax, rax, 0 00135 0f b6 44 05 08 movzx eax, BYTE PTR B$[rbp+rax] 0013a c1 e0 04 shl eax, 4 0013d 83 e0 30 and eax, 48 ; 00000030H 00140 b9 01 00 00 00 mov ecx, 1 00145 48 6b c9 01 imul rcx, rcx, 1 00149 0f b6 4c 0d 08 movzx ecx, BYTE PTR B$[rbp+rcx] 0014e c1 f9 04 sar ecx, 4 00151 83 e1 0f and ecx, 15 00154 03 c1 add eax, ecx 00156 b9 01 00 00 00 mov ecx, 1 0015b 48 6b c9 01 imul rcx, rcx, 1 0015f 48 8b 55 20 mov rdx, QWORD PTR OutPtr$[rbp] 00163 88 04 0a mov BYTE PTR [rdx+rcx], al ; 318 : OutPtr[2] = (unsigned int) (B[1] << 2 & 0x3C) + (unsigned int) (B[2] >> 6 & 0x03); 00166 b8 01 00 00 00 mov eax, 1 0016b 48 6b c0 01 imul rax, rax, 1 0016f 0f b6 44 05 08 movzx eax, BYTE PTR B$[rbp+rax] 00174 c1 e0 02 shl eax, 2 00177 83 e0 3c and eax, 60 ; 0000003cH 0017a b9 01 00 00 00 mov ecx, 1 0017f 48 6b c9 02 imul rcx, rcx, 2 00183 0f b6 4c 0d 08 movzx ecx, BYTE PTR B$[rbp+rcx] 00188 c1 f9 06 sar ecx, 6 0018b 83 e1 03 and ecx, 3 0018e 03 c1 add eax, ecx 00190 b9 01 00 00 00 mov ecx, 1 00195 48 6b c9 02 imul rcx, rcx, 2 00199 48 8b 55 20 mov rdx, QWORD PTR OutPtr$[rbp] 0019d 88 04 0a mov BYTE PTR [rdx+rcx], al ; 319 : OutPtr[3] = B[2] & 0x3F; 001a0 b8 01 00 00 00 mov eax, 1 001a5 48 6b c0 02 imul rax, rax, 2 001a9 0f b6 44 05 08 movzx eax, BYTE PTR B$[rbp+rax] 001ae 83 e0 3f and eax, 63 ; 0000003fH 001b1 b9 01 00 00 00 mov ecx, 1 001b6 48 6b c9 03 imul rcx, rcx, 3 001ba 48 8b 55 20 mov rdx, QWORD PTR OutPtr$[rbp] 001be 88 04 0a mov BYTE PTR [rdx+rcx], al ; 320 : for (i = 0; i < 4; i++) 001c1 c7 45 28 00 00 00 00 mov DWORD PTR i$1[rbp], 0 001c8 eb 08 jmp SHORT $LN11@UU_encode $LN9@UU_encode: 001ca 8b 45 28 mov eax, DWORD PTR i$1[rbp] 001cd ff c0 inc eax 001cf 89 45 28 mov DWORD PTR i$1[rbp], eax $LN11@UU_encode: 001d2 83 7d 28 04 cmp DWORD PTR i$1[rbp], 4 001d6 73 36 jae SHORT $LN10@UU_encode ; 321 : { ; 322 : if (OutPtr[i] == NULL) 001d8 8b 45 28 mov eax, DWORD PTR i$1[rbp] 001db 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 001df 0f be 04 01 movsx eax, BYTE PTR [rcx+rax] 001e3 85 c0 test eax, eax 001e5 75 0d jne SHORT $LN16@UU_encode ; 323 : OutPtr[i] = '`';//(unsigned char) (OutPtr[i] + 0x60); 001e7 8b 45 28 mov eax, DWORD PTR i$1[rbp] 001ea 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 001ee c6 04 01 60 mov BYTE PTR [rcx+rax], 96 ; 00000060H 001f2 eb 18 jmp SHORT $LN17@UU_encode $LN16@UU_encode: ; 324 : else ; 325 : OutPtr[i] = ' ' + OutPtr[i];//(unsigned char) (OutPtr[i] + 0x20); 001f4 8b 45 28 mov eax, DWORD PTR i$1[rbp] 001f7 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 001fb 0f be 04 01 movsx eax, BYTE PTR [rcx+rax] 001ff 83 c0 20 add eax, 32 ; 00000020H 00202 8b 4d 28 mov ecx, DWORD PTR i$1[rbp] 00205 48 8b 55 20 mov rdx, QWORD PTR OutPtr$[rbp] 00209 88 04 0a mov BYTE PTR [rdx+rcx], al $LN17@UU_encode: ; 326 : } 0020c eb bc jmp SHORT $LN9@UU_encode $LN10@UU_encode: ; 327 : OutPtr+=4; 0020e 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 00212 48 83 c0 04 add rax, 4 00216 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax ; 328 : Len+=4; 0021a 8b 45 04 mov eax, DWORD PTR Len$[rbp] 0021d 83 c0 04 add eax, 4 00220 89 45 04 mov DWORD PTR Len$[rbp], eax ; 329 : } 00223 e9 51 fe ff ff jmp $LN4@UU_encode $LN5@UU_encode: ; 330 : ; 331 : *OutPtr++ = '\r'; //设置回车 00228 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 0022c c6 00 0d mov BYTE PTR [rax], 13 0022f 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 00233 48 ff c0 inc rax 00236 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax ; 332 : *OutPtr++ = '\n'; 0023a 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 0023e c6 00 0a mov BYTE PTR [rax], 10 00241 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 00245 48 ff c0 inc rax 00248 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax ; 333 : } 0024c e9 13 fe ff ff jmp $LN2@UU_encode $LN3@UU_encode: ; 334 : return (unsigned int) (OutPtr - pDest); 00251 48 8b 85 90 00 00 00 mov rax, QWORD PTR pDest$[rbp] 00258 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 0025c 48 2b c8 sub rcx, rax 0025f 48 8b c1 mov rax, rcx $LN1@UU_encode: ; 335 : } 00262 48 8d 65 70 lea rsp, QWORD PTR [rbp+112] 00266 5d pop rbp 00267 c3 ret 0 ?UU_encode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::UU_encode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?base64_decode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT lByteBuffer$ = 0 lByteBufferSpace$ = 4 C$ = 8 reallen$ = 12 InPtr$ = 16 InLimitPtr$ = 24 OutPtr$ = 32 tv89 = 104 pSrc$ = 128 nSize$ = 136 pDest$ = 144 ?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 55 push rbp 0000f 48 83 ec 70 sub rsp, 112 ; 00000070H 00013 48 8b ec mov rbp, rsp ; 230 : if ((pSrc == NULL) || (pDest == NULL) || (nSize <= 0)) return 0; 00016 48 83 bd 80 00 00 00 00 cmp QWORD PTR pSrc$[rbp], 0 0001e 74 13 je SHORT $LN7@base64_dec 00020 48 83 bd 90 00 00 00 00 cmp QWORD PTR pDest$[rbp], 0 00028 74 09 je SHORT $LN7@base64_dec 0002a 83 bd 88 00 00 00 00 cmp DWORD PTR nSize$[rbp], 0 00031 77 07 ja SHORT $LN6@base64_dec $LN7@base64_dec: 00033 33 c0 xor eax, eax 00035 e9 91 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; 0003a c7 45 00 00 00 00 00 mov DWORD PTR lByteBuffer$[rbp], 0 00041 c7 45 04 04 00 00 00 mov DWORD PTR lByteBufferSpace$[rbp], 4 ; 239 : ; 240 : InPtr = pSrc; 00048 48 8b 85 80 00 00 00 mov rax, QWORD PTR pSrc$[rbp] 0004f 48 89 45 10 mov QWORD PTR InPtr$[rbp], rax ; 241 : InLimitPtr= InPtr + nSize; 00053 8b 85 88 00 00 00 mov eax, DWORD PTR nSize$[rbp] 00059 48 8b 4d 10 mov rcx, QWORD PTR InPtr$[rbp] 0005d 48 03 c8 add rcx, rax 00060 48 8b c1 mov rax, rcx 00063 48 89 45 18 mov QWORD PTR InLimitPtr$[rbp], rax ; 242 : OutPtr = pDest; 00067 48 8b 85 90 00 00 00 mov rax, QWORD PTR pDest$[rbp] 0006e 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax $LN15@base64_dec: $LN14@base64_dec: $LN2@base64_dec: ; 243 : ; 244 : while (InPtr != InLimitPtr) 00072 48 8b 45 18 mov rax, QWORD PTR InLimitPtr$[rbp] 00076 48 39 45 10 cmp QWORD PTR InPtr$[rbp], rax 0007a 0f 84 be 00 00 00 je $LN3@base64_dec ; 245 : { ; 246 : C = BASE64_DECODE_TABLE[*InPtr]; // Read from InputBuffer. 00080 48 8b 45 10 mov rax, QWORD PTR InPtr$[rbp] 00084 48 0f be 00 movsx rax, BYTE PTR [rax] 00088 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_DECODE_TABLE@CMailCoder@@2QBIB ; CMailCoder::BASE64_DECODE_TABLE 0008f 8b 04 81 mov eax, DWORD PTR [rcx+rax*4] 00092 89 45 08 mov DWORD PTR C$[rbp], eax ; 247 : InPtr++; 00095 48 8b 45 10 mov rax, QWORD PTR InPtr$[rbp] 00099 48 ff c0 inc rax 0009c 48 89 45 10 mov QWORD PTR InPtr$[rbp], rax ; 248 : if (C == 0xFF) continue; //读到255非法字符 000a0 81 7d 08 ff 00 00 00 cmp DWORD PTR C$[rbp], 255 ; 000000ffH 000a7 75 02 jne SHORT $LN8@base64_dec 000a9 eb c7 jmp SHORT $LN2@base64_dec $LN8@base64_dec: ; 249 : lByteBuffer = lByteBuffer << 6 ; 000ab 8b 45 00 mov eax, DWORD PTR lByteBuffer$[rbp] 000ae c1 e0 06 shl eax, 6 000b1 89 45 00 mov DWORD PTR lByteBuffer$[rbp], eax ; 250 : lByteBuffer = lByteBuffer | C ; 000b4 8b 45 08 mov eax, DWORD PTR C$[rbp] 000b7 8b 4d 00 mov ecx, DWORD PTR lByteBuffer$[rbp] 000ba 0b c8 or ecx, eax 000bc 8b c1 mov eax, ecx 000be 89 45 00 mov DWORD PTR lByteBuffer$[rbp], eax ; 251 : lByteBufferSpace--; 000c1 8b 45 04 mov eax, DWORD PTR lByteBufferSpace$[rbp] 000c4 ff c8 dec eax 000c6 89 45 04 mov DWORD PTR lByteBufferSpace$[rbp], eax ; 252 : if (lByteBufferSpace != 0) continue; //一次读入4个字节 000c9 83 7d 04 00 cmp DWORD PTR lByteBufferSpace$[rbp], 0 000cd 74 02 je SHORT $LN9@base64_dec 000cf eb a1 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 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 000de 0f b6 55 00 movzx edx, BYTE PTR lByteBuffer$[rbp] 000e2 88 14 01 mov BYTE PTR [rcx+rax], dl ; 255 : lByteBuffer = lByteBuffer >> 8; 000e5 8b 45 00 mov eax, DWORD PTR lByteBuffer$[rbp] 000e8 c1 e8 08 shr eax, 8 000eb 89 45 00 mov DWORD PTR lByteBuffer$[rbp], eax ; 256 : OutPtr[1] = lByteBuffer; 000ee b8 01 00 00 00 mov eax, 1 000f3 48 6b c0 01 imul rax, rax, 1 000f7 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 000fb 0f b6 55 00 movzx edx, BYTE PTR lByteBuffer$[rbp] 000ff 88 14 01 mov BYTE PTR [rcx+rax], dl ; 257 : lByteBuffer = lByteBuffer >> 8; 00102 8b 45 00 mov eax, DWORD PTR lByteBuffer$[rbp] 00105 c1 e8 08 shr eax, 8 00108 89 45 00 mov DWORD PTR lByteBuffer$[rbp], eax ; 258 : OutPtr[0] = lByteBuffer; 0010b b8 01 00 00 00 mov eax, 1 00110 48 6b c0 00 imul rax, rax, 0 00114 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 00118 0f b6 55 00 movzx edx, BYTE PTR lByteBuffer$[rbp] 0011c 88 14 01 mov BYTE PTR [rcx+rax], dl ; 259 : //准备写入后3位 ; 260 : OutPtr+= 3; lByteBuffer = 0; lByteBufferSpace = 4; 0011f 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 00123 48 83 c0 03 add rax, 3 00127 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax 0012b c7 45 00 00 00 00 00 mov DWORD PTR lByteBuffer$[rbp], 0 00132 c7 45 04 04 00 00 00 mov DWORD PTR lByteBufferSpace$[rbp], 4 ; 261 : } 00139 e9 34 ff ff ff jmp $LN15@base64_dec $LN3@base64_dec: ; 262 : reallen = (unsigned int)OutPtr - (unsigned int)pDest; 0013e 8b 85 90 00 00 00 mov eax, DWORD PTR pDest$[rbp] 00144 8b 4d 20 mov ecx, DWORD PTR OutPtr$[rbp] 00147 2b c8 sub ecx, eax 00149 8b c1 mov eax, ecx 0014b 89 45 0c mov DWORD PTR reallen$[rbp], eax ; 263 : //处理尾部 返回实际长度 ; 264 : switch (lByteBufferSpace) 0014e 8b 45 04 mov eax, DWORD PTR lByteBufferSpace$[rbp] 00151 89 45 68 mov DWORD PTR tv89[rbp], eax 00154 83 7d 68 01 cmp DWORD PTR tv89[rbp], 1 00158 74 08 je SHORT $LN10@base64_dec 0015a 83 7d 68 02 cmp DWORD PTR tv89[rbp], 2 0015e 74 44 je SHORT $LN11@base64_dec 00160 eb 66 jmp SHORT $LN12@base64_dec $LN10@base64_dec: ; 265 : { ; 266 : case 1: ; 267 : lByteBuffer = lByteBuffer >> 2; 00162 8b 45 00 mov eax, DWORD PTR lByteBuffer$[rbp] 00165 c1 e8 02 shr eax, 2 00168 89 45 00 mov DWORD PTR lByteBuffer$[rbp], eax ; 268 : OutPtr[1] = lByteBuffer; 0016b b8 01 00 00 00 mov eax, 1 00170 48 6b c0 01 imul rax, rax, 1 00174 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 00178 0f b6 55 00 movzx edx, BYTE PTR lByteBuffer$[rbp] 0017c 88 14 01 mov BYTE PTR [rcx+rax], dl ; 269 : lByteBuffer = lByteBuffer >> 8; 0017f 8b 45 00 mov eax, DWORD PTR lByteBuffer$[rbp] 00182 c1 e8 08 shr eax, 8 00185 89 45 00 mov DWORD PTR lByteBuffer$[rbp], eax ; 270 : OutPtr[0] = lByteBuffer; 00188 b8 01 00 00 00 mov eax, 1 0018d 48 6b c0 00 imul rax, rax, 0 00191 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 00195 0f b6 55 00 movzx edx, BYTE PTR lByteBuffer$[rbp] 00199 88 14 01 mov BYTE PTR [rcx+rax], dl ; 271 : return reallen + 2; 0019c 8b 45 0c mov eax, DWORD PTR reallen$[rbp] 0019f 83 c0 02 add eax, 2 001a2 eb 27 jmp SHORT $LN1@base64_dec $LN11@base64_dec: ; 272 : case 2: ; 273 : lByteBuffer = lByteBuffer >> 4; 001a4 8b 45 00 mov eax, DWORD PTR lByteBuffer$[rbp] 001a7 c1 e8 04 shr eax, 4 001aa 89 45 00 mov DWORD PTR lByteBuffer$[rbp], eax ; 274 : OutPtr[0] = lByteBuffer; 001ad b8 01 00 00 00 mov eax, 1 001b2 48 6b c0 00 imul rax, rax, 0 001b6 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 001ba 0f b6 55 00 movzx edx, BYTE PTR lByteBuffer$[rbp] 001be 88 14 01 mov BYTE PTR [rcx+rax], dl ; 275 : return reallen + 1; 001c1 8b 45 0c mov eax, DWORD PTR reallen$[rbp] 001c4 ff c0 inc eax 001c6 eb 03 jmp SHORT $LN1@base64_dec $LN12@base64_dec: ; 276 : default: ; 277 : return reallen; 001c8 8b 45 0c mov eax, DWORD PTR reallen$[rbp] $LN1@base64_dec: ; 278 : } ; 279 : } 001cb 48 8d 65 70 lea rsp, QWORD PTR [rbp+112] 001cf 5d pop rbp 001d0 c3 ret 0 ?base64_decode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::base64_decode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?base64_encode@CMailCoder@@SAHPEADI0@Z _TEXT SEGMENT iB$ = 0 iInMax3$ = 4 Len$ = 8 pInPtr$ = 16 pInLimitPtr$ = 24 OutPtr$ = 32 tv176 = 104 tv153 = 104 tv88 = 104 tv82 = 104 tv76 = 104 pSrc$ = 128 nSize$ = 136 pDest$ = 144 ?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 55 push rbp 0000f 48 83 ec 70 sub rsp, 112 ; 00000070H 00013 48 8b ec mov rbp, rsp ; 154 : if ((pSrc == NULL) || (nSize <= 0)) return 0; 00016 48 83 bd 80 00 00 00 00 cmp QWORD PTR pSrc$[rbp], 0 0001e 74 09 je SHORT $LN9@base64_enc 00020 83 bd 88 00 00 00 00 cmp DWORD PTR nSize$[rbp], 0 00027 77 07 ja SHORT $LN8@base64_enc $LN9@base64_enc: 00029 33 c0 xor eax, eax 0002b e9 6f 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; 00030 48 8b 85 80 00 00 00 mov rax, QWORD PTR pSrc$[rbp] 00037 48 89 45 10 mov QWORD PTR pInPtr$[rbp], rax ; 161 : iInMax3 = nSize / 3 * 3; 0003b 33 d2 xor edx, edx 0003d 8b 85 88 00 00 00 mov eax, DWORD PTR nSize$[rbp] 00043 b9 03 00 00 00 mov ecx, 3 00048 f7 f1 div ecx 0004a 6b c0 03 imul eax, eax, 3 0004d 89 45 04 mov DWORD PTR iInMax3$[rbp], eax ; 162 : OutPtr = pDest; 00050 48 8b 85 90 00 00 00 mov rax, QWORD PTR pDest$[rbp] 00057 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax ; 163 : pInLimitPtr = pInPtr + iInMax3; 0005b 8b 45 04 mov eax, DWORD PTR iInMax3$[rbp] 0005e 48 8b 4d 10 mov rcx, QWORD PTR pInPtr$[rbp] 00062 48 03 c8 add rcx, rax 00065 48 8b c1 mov rax, rcx 00068 48 89 45 18 mov QWORD PTR pInLimitPtr$[rbp], rax $LN2@base64_enc: ; 164 : ; 165 : while (pInPtr != pInLimitPtr) 0006c 48 8b 45 18 mov rax, QWORD PTR pInLimitPtr$[rbp] 00070 48 39 45 10 cmp QWORD PTR pInPtr$[rbp], rax 00074 0f 84 89 01 00 00 je $LN3@base64_enc ; 166 : { ; 167 : Len = 0; 0007a c7 45 08 00 00 00 00 mov DWORD PTR Len$[rbp], 0 $LN4@base64_enc: ; 168 : while ((Len < m_LineWidth) && (pInPtr != pInLimitPtr)) 00081 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00087 39 45 08 cmp DWORD PTR Len$[rbp], eax 0008a 0f 83 3f 01 00 00 jae $LN5@base64_enc 00090 48 8b 45 18 mov rax, QWORD PTR pInLimitPtr$[rbp] 00094 48 39 45 10 cmp QWORD PTR pInPtr$[rbp], rax 00098 0f 84 31 01 00 00 je $LN5@base64_enc ; 169 : { ; 170 : iB = (unsigned char) *pInPtr++; 0009e 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 000a2 0f b6 00 movzx eax, BYTE PTR [rax] 000a5 89 45 68 mov DWORD PTR tv76[rbp], eax 000a8 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 000ac 48 ff c0 inc rax 000af 48 89 45 10 mov QWORD PTR pInPtr$[rbp], rax 000b3 8b 45 68 mov eax, DWORD PTR tv76[rbp] 000b6 89 45 00 mov DWORD PTR iB$[rbp], eax ; 171 : iB = iB << 8; 000b9 8b 45 00 mov eax, DWORD PTR iB$[rbp] 000bc c1 e0 08 shl eax, 8 000bf 89 45 00 mov DWORD PTR iB$[rbp], eax ; 172 : ; 173 : iB = iB | (unsigned char) *pInPtr++; 000c2 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 000c6 0f b6 00 movzx eax, BYTE PTR [rax] 000c9 8b 4d 00 mov ecx, DWORD PTR iB$[rbp] 000cc 0b c8 or ecx, eax 000ce 8b c1 mov eax, ecx 000d0 89 45 68 mov DWORD PTR tv82[rbp], eax 000d3 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 000d7 48 ff c0 inc rax 000da 48 89 45 10 mov QWORD PTR pInPtr$[rbp], rax 000de 8b 45 68 mov eax, DWORD PTR tv82[rbp] 000e1 89 45 00 mov DWORD PTR iB$[rbp], eax ; 174 : iB = iB << 8; 000e4 8b 45 00 mov eax, DWORD PTR iB$[rbp] 000e7 c1 e0 08 shl eax, 8 000ea 89 45 00 mov DWORD PTR iB$[rbp], eax ; 175 : ; 176 : iB = iB | (unsigned char) *pInPtr++; 000ed 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 000f1 0f b6 00 movzx eax, BYTE PTR [rax] 000f4 8b 4d 00 mov ecx, DWORD PTR iB$[rbp] 000f7 0b c8 or ecx, eax 000f9 8b c1 mov eax, ecx 000fb 89 45 68 mov DWORD PTR tv88[rbp], eax 000fe 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 00102 48 ff c0 inc rax 00105 48 89 45 10 mov QWORD PTR pInPtr$[rbp], rax 00109 8b 45 68 mov eax, DWORD PTR tv88[rbp] 0010c 89 45 00 mov DWORD PTR iB$[rbp], eax ; 177 : ; 178 : //以4 byte倒序写入输出缓冲 ; 179 : OutPtr[3] = BASE64_ENCODE_TABLE[iB & 0x3F]; 0010f 8b 45 00 mov eax, DWORD PTR iB$[rbp] 00112 83 e0 3f and eax, 63 ; 0000003fH 00115 8b c0 mov eax, eax 00117 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 0011e ba 01 00 00 00 mov edx, 1 00123 48 6b d2 03 imul rdx, rdx, 3 00127 4c 8b 45 20 mov r8, QWORD PTR OutPtr$[rbp] 0012b 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0012f 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 180 : iB = iB >> 6; 00133 8b 45 00 mov eax, DWORD PTR iB$[rbp] 00136 c1 e8 06 shr eax, 6 00139 89 45 00 mov DWORD PTR iB$[rbp], eax ; 181 : OutPtr[2] = BASE64_ENCODE_TABLE[iB & 0x3F]; 0013c 8b 45 00 mov eax, DWORD PTR iB$[rbp] 0013f 83 e0 3f and eax, 63 ; 0000003fH 00142 8b c0 mov eax, eax 00144 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 0014b ba 01 00 00 00 mov edx, 1 00150 48 6b d2 02 imul rdx, rdx, 2 00154 4c 8b 45 20 mov r8, QWORD PTR OutPtr$[rbp] 00158 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0015c 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 182 : iB = iB >> 6; 00160 8b 45 00 mov eax, DWORD PTR iB$[rbp] 00163 c1 e8 06 shr eax, 6 00166 89 45 00 mov DWORD PTR iB$[rbp], eax ; 183 : OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F]; 00169 8b 45 00 mov eax, DWORD PTR iB$[rbp] 0016c 83 e0 3f and eax, 63 ; 0000003fH 0016f 8b c0 mov eax, eax 00171 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00178 ba 01 00 00 00 mov edx, 1 0017d 48 6b d2 01 imul rdx, rdx, 1 00181 4c 8b 45 20 mov r8, QWORD PTR OutPtr$[rbp] 00185 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00189 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 184 : iB = iB >> 6; 0018d 8b 45 00 mov eax, DWORD PTR iB$[rbp] 00190 c1 e8 06 shr eax, 6 00193 89 45 00 mov DWORD PTR iB$[rbp], eax ; 185 : OutPtr[0] = BASE64_ENCODE_TABLE[iB]; 00196 8b 45 00 mov eax, DWORD PTR iB$[rbp] 00199 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 001a0 ba 01 00 00 00 mov edx, 1 001a5 48 6b d2 00 imul rdx, rdx, 0 001a9 4c 8b 45 20 mov r8, QWORD PTR OutPtr$[rbp] 001ad 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001b1 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 186 : OutPtr+=4; 001b5 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 001b9 48 83 c0 04 add rax, 4 001bd 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax ; 187 : Len+=4; 001c1 8b 45 08 mov eax, DWORD PTR Len$[rbp] 001c4 83 c0 04 add eax, 4 001c7 89 45 08 mov DWORD PTR Len$[rbp], eax ; 188 : } 001ca e9 b2 fe ff ff jmp $LN4@base64_enc $LN5@base64_enc: ; 189 : if (Len >= m_LineWidth) 001cf 8b 05 00 00 00 00 mov eax, DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 001d5 39 45 08 cmp DWORD PTR Len$[rbp], eax 001d8 72 24 jb SHORT $LN10@base64_enc ; 190 : { ; 191 : *OutPtr++ = '\r'; //加上回车换行符 001da 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 001de c6 00 0d mov BYTE PTR [rax], 13 001e1 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 001e5 48 ff c0 inc rax 001e8 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax ; 192 : *OutPtr++ = '\n'; 001ec 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 001f0 c6 00 0a mov BYTE PTR [rax], 10 001f3 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 001f7 48 ff c0 inc rax 001fa 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax $LN10@base64_enc: ; 193 : } ; 194 : } 001fe e9 69 fe ff ff jmp $LN2@base64_enc $LN3@base64_enc: ; 195 : //设置尾部 ; 196 : switch (nSize - iInMax3) 00203 8b 45 04 mov eax, DWORD PTR iInMax3$[rbp] 00206 8b 8d 88 00 00 00 mov ecx, DWORD PTR nSize$[rbp] 0020c 2b c8 sub ecx, eax 0020e 8b c1 mov eax, ecx 00210 89 45 68 mov DWORD PTR tv153[rbp], eax 00213 83 7d 68 01 cmp DWORD PTR tv153[rbp], 1 00217 74 0f je SHORT $LN11@base64_enc 00219 83 7d 68 02 cmp DWORD PTR tv153[rbp], 2 0021d 0f 84 97 00 00 00 je $LN12@base64_enc 00223 e9 66 01 00 00 jmp $LN6@base64_enc $LN11@base64_enc: ; 197 : { ; 198 : case 1: ; 199 : iB = (unsigned char) *pInPtr; 00228 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 0022c 0f b6 00 movzx eax, BYTE PTR [rax] 0022f 89 45 00 mov DWORD PTR iB$[rbp], eax ; 200 : iB = iB << 4; 00232 8b 45 00 mov eax, DWORD PTR iB$[rbp] 00235 c1 e0 04 shl eax, 4 00238 89 45 00 mov DWORD PTR iB$[rbp], eax ; 201 : OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F]; 0023b 8b 45 00 mov eax, DWORD PTR iB$[rbp] 0023e 83 e0 3f and eax, 63 ; 0000003fH 00241 8b c0 mov eax, eax 00243 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 0024a ba 01 00 00 00 mov edx, 1 0024f 48 6b d2 01 imul rdx, rdx, 1 00253 4c 8b 45 20 mov r8, QWORD PTR OutPtr$[rbp] 00257 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0025b 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 202 : iB = iB >> 6; 0025f 8b 45 00 mov eax, DWORD PTR iB$[rbp] 00262 c1 e8 06 shr eax, 6 00265 89 45 00 mov DWORD PTR iB$[rbp], eax ; 203 : OutPtr[0] = BASE64_ENCODE_TABLE[iB]; 00268 8b 45 00 mov eax, DWORD PTR iB$[rbp] 0026b 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00272 ba 01 00 00 00 mov edx, 1 00277 48 6b d2 00 imul rdx, rdx, 0 0027b 4c 8b 45 20 mov r8, QWORD PTR OutPtr$[rbp] 0027f 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00283 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 204 : OutPtr[2] = '='; //用'='也就是64码填充剩余部分 00287 b8 01 00 00 00 mov eax, 1 0028c 48 6b c0 02 imul rax, rax, 2 00290 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 00294 c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 205 : OutPtr[3] = '='; 00298 b8 01 00 00 00 mov eax, 1 0029d 48 6b c0 03 imul rax, rax, 3 002a1 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 002a5 c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 206 : OutPtr+=4; 002a9 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 002ad 48 83 c0 04 add rax, 4 002b1 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax ; 207 : break; 002b5 e9 d4 00 00 00 jmp $LN6@base64_enc $LN12@base64_enc: ; 208 : case 2: ; 209 : iB = (unsigned char) *pInPtr++; 002ba 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 002be 0f b6 00 movzx eax, BYTE PTR [rax] 002c1 89 45 68 mov DWORD PTR tv176[rbp], eax 002c4 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 002c8 48 ff c0 inc rax 002cb 48 89 45 10 mov QWORD PTR pInPtr$[rbp], rax 002cf 8b 45 68 mov eax, DWORD PTR tv176[rbp] 002d2 89 45 00 mov DWORD PTR iB$[rbp], eax ; 210 : iB = iB << 8; 002d5 8b 45 00 mov eax, DWORD PTR iB$[rbp] 002d8 c1 e0 08 shl eax, 8 002db 89 45 00 mov DWORD PTR iB$[rbp], eax ; 211 : iB = iB | (unsigned char) *pInPtr; 002de 48 8b 45 10 mov rax, QWORD PTR pInPtr$[rbp] 002e2 0f b6 00 movzx eax, BYTE PTR [rax] 002e5 8b 4d 00 mov ecx, DWORD PTR iB$[rbp] 002e8 0b c8 or ecx, eax 002ea 8b c1 mov eax, ecx 002ec 89 45 00 mov DWORD PTR iB$[rbp], eax ; 212 : iB = iB << 2; 002ef 8b 45 00 mov eax, DWORD PTR iB$[rbp] 002f2 c1 e0 02 shl eax, 2 002f5 89 45 00 mov DWORD PTR iB$[rbp], eax ; 213 : OutPtr[2] = BASE64_ENCODE_TABLE[iB & 0x3F]; 002f8 8b 45 00 mov eax, DWORD PTR iB$[rbp] 002fb 83 e0 3f and eax, 63 ; 0000003fH 002fe 8b c0 mov eax, eax 00300 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00307 ba 01 00 00 00 mov edx, 1 0030c 48 6b d2 02 imul rdx, rdx, 2 00310 4c 8b 45 20 mov r8, QWORD PTR OutPtr$[rbp] 00314 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00318 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 214 : iB = iB >> 6; 0031c 8b 45 00 mov eax, DWORD PTR iB$[rbp] 0031f c1 e8 06 shr eax, 6 00322 89 45 00 mov DWORD PTR iB$[rbp], eax ; 215 : OutPtr[1] = BASE64_ENCODE_TABLE[iB & 0x3F]; 00325 8b 45 00 mov eax, DWORD PTR iB$[rbp] 00328 83 e0 3f and eax, 63 ; 0000003fH 0032b 8b c0 mov eax, eax 0032d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 00334 ba 01 00 00 00 mov edx, 1 00339 48 6b d2 01 imul rdx, rdx, 1 0033d 4c 8b 45 20 mov r8, QWORD PTR OutPtr$[rbp] 00341 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00345 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 216 : iB = iB >> 6; 00349 8b 45 00 mov eax, DWORD PTR iB$[rbp] 0034c c1 e8 06 shr eax, 6 0034f 89 45 00 mov DWORD PTR iB$[rbp], eax ; 217 : OutPtr[0] = BASE64_ENCODE_TABLE[iB]; 00352 8b 45 00 mov eax, DWORD PTR iB$[rbp] 00355 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:?BASE64_ENCODE_TABLE@CMailCoder@@2QBDB ; CMailCoder::BASE64_ENCODE_TABLE 0035c ba 01 00 00 00 mov edx, 1 00361 48 6b d2 00 imul rdx, rdx, 0 00365 4c 8b 45 20 mov r8, QWORD PTR OutPtr$[rbp] 00369 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0036d 41 88 04 10 mov BYTE PTR [r8+rdx], al ; 218 : OutPtr[3] = '='; // Fill remaining byte. 00371 b8 01 00 00 00 mov eax, 1 00376 48 6b c0 03 imul rax, rax, 3 0037a 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 0037e c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 219 : OutPtr+=4; 00382 48 8b 45 20 mov rax, QWORD PTR OutPtr$[rbp] 00386 48 83 c0 04 add rax, 4 0038a 48 89 45 20 mov QWORD PTR OutPtr$[rbp], rax $LN6@base64_enc: ; 220 : break; ; 221 : } ; 222 : return (unsigned int) (OutPtr - pDest); 0038e 48 8b 85 90 00 00 00 mov rax, QWORD PTR pDest$[rbp] 00395 48 8b 4d 20 mov rcx, QWORD PTR OutPtr$[rbp] 00399 48 2b c8 sub rcx, rax 0039c 48 8b c1 mov rax, rcx $LN1@base64_enc: ; 223 : } 0039f 48 8d 65 70 lea rsp, QWORD PTR [rbp+112] 003a3 5d pop rbp 003a4 c3 ret 0 ?base64_encode@CMailCoder@@SAHPEADI0@Z ENDP ; CMailCoder::base64_encode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?QuotedEncodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT nSize$ = 0 nCR$ = 4 iSize$ = 96 ?QuotedEncodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::QuotedEncodeSize, COMDAT ; 142 : { $LN3: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 55 push rbp 00005 48 83 ec 50 sub rsp, 80 ; 00000050H 00009 48 8b ec mov rbp, rsp ; 143 : int nSize = iSize * 3 + 1; 0000c 6b 45 60 03 imul eax, DWORD PTR iSize$[rbp], 3 00010 ff c0 inc eax 00012 89 45 00 mov DWORD PTR nSize$[rbp], eax ; 144 : int nCR = nSize / m_LineWidth; 00015 33 d2 xor edx, edx 00017 8b 45 00 mov eax, DWORD PTR nSize$[rbp] 0001a f7 35 00 00 00 00 div DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 00020 89 45 04 mov DWORD PTR nCR$[rbp], eax ; 145 : nSize+= nCR * 3; 00023 6b 45 04 03 imul eax, DWORD PTR nCR$[rbp], 3 00027 8b 4d 00 mov ecx, DWORD PTR nSize$[rbp] 0002a 03 c8 add ecx, eax 0002c 8b c1 mov eax, ecx 0002e 89 45 00 mov DWORD PTR nSize$[rbp], eax ; 146 : return nSize; 00031 8b 45 00 mov eax, DWORD PTR nSize$[rbp] ; 147 : } 00034 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00038 5d pop rbp 00039 c3 ret 0 ?QuotedEncodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::QuotedEncodeSize _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?UUDecodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT iSize$ = 80 ?UUDecodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::UUDecodeSize, COMDAT ; 134 : { $LN3: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 55 push rbp 00005 48 83 ec 40 sub rsp, 64 ; 00000040H 00009 48 8b ec mov rbp, rsp ; 135 : return (iSize + 3) / 4 * 3; 0000c 8b 45 50 mov eax, DWORD PTR iSize$[rbp] 0000f 83 c0 03 add eax, 3 00012 99 cdq 00013 83 e2 03 and edx, 3 00016 03 c2 add eax, edx 00018 c1 f8 02 sar eax, 2 0001b 6b c0 03 imul eax, eax, 3 ; 136 : } 0001e 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00022 5d pop rbp 00023 c3 ret 0 ?UUDecodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::UUDecodeSize _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?UUEncodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT nSize$ = 0 nCR$ = 4 iSize$ = 96 ?UUEncodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::UUEncodeSize, COMDAT ; 122 : { $LN3: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 55 push rbp 00005 48 83 ec 50 sub rsp, 80 ; 00000050H 00009 48 8b ec mov rbp, rsp ; 123 : int nSize, nCR; ; 124 : nSize = (iSize + 2) / 3 * 4 ; 0000c 8b 45 60 mov eax, DWORD PTR iSize$[rbp] 0000f 83 c0 02 add eax, 2 00012 99 cdq 00013 b9 03 00 00 00 mov ecx, 3 00018 f7 f9 idiv ecx 0001a c1 e0 02 shl eax, 2 0001d 89 45 00 mov DWORD PTR nSize$[rbp], eax ; 125 : nCR = nSize / m_LineWidth + 2; //计算回车数量 00020 33 d2 xor edx, edx 00022 8b 45 00 mov eax, DWORD PTR nSize$[rbp] 00025 f7 35 00 00 00 00 div DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 0002b 83 c0 02 add eax, 2 0002e 89 45 04 mov DWORD PTR nCR$[rbp], eax ; 126 : nSize+= nCR * 3 + 2; 00031 6b 45 04 03 imul eax, DWORD PTR nCR$[rbp], 3 00035 8b 4d 00 mov ecx, DWORD PTR nSize$[rbp] 00038 8d 44 01 02 lea eax, DWORD PTR [rcx+rax+2] 0003c 89 45 00 mov DWORD PTR nSize$[rbp], eax ; 127 : return nSize; 0003f 8b 45 00 mov eax, DWORD PTR nSize$[rbp] ; 128 : } 00042 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00046 5d pop rbp 00047 c3 ret 0 ?UUEncodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::UUEncodeSize _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?Base64DecodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT iSize$ = 80 ?Base64DecodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::Base64DecodeSize, COMDAT ; 114 : { $LN3: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 55 push rbp 00005 48 83 ec 40 sub rsp, 64 ; 00000040H 00009 48 8b ec mov rbp, rsp ; 115 : return (iSize + 3) / 4 * 3; 0000c 8b 45 50 mov eax, DWORD PTR iSize$[rbp] 0000f 83 c0 03 add eax, 3 00012 99 cdq 00013 83 e2 03 and edx, 3 00016 03 c2 add eax, edx 00018 c1 f8 02 sar eax, 2 0001b 6b c0 03 imul eax, eax, 3 ; 116 : } 0001e 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00022 5d pop rbp 00023 c3 ret 0 ?Base64DecodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::Base64DecodeSize _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?Base64EncodeSize@CMailCoder@@SAHH@Z _TEXT SEGMENT nSize$ = 0 nCR$ = 4 iSize$ = 96 ?Base64EncodeSize@CMailCoder@@SAHH@Z PROC ; CMailCoder::Base64EncodeSize, COMDAT ; 102 : { $LN3: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 55 push rbp 00005 48 83 ec 50 sub rsp, 80 ; 00000050H 00009 48 8b ec mov rbp, rsp ; 103 : int nSize, nCR; ; 104 : nSize = (iSize + 2) / 3 * 4 ; 0000c 8b 45 60 mov eax, DWORD PTR iSize$[rbp] 0000f 83 c0 02 add eax, 2 00012 99 cdq 00013 b9 03 00 00 00 mov ecx, 3 00018 f7 f9 idiv ecx 0001a c1 e0 02 shl eax, 2 0001d 89 45 00 mov DWORD PTR nSize$[rbp], eax ; 105 : nCR = nSize / m_LineWidth; //计算回车数量 00020 33 d2 xor edx, edx 00022 8b 45 00 mov eax, DWORD PTR nSize$[rbp] 00025 f7 35 00 00 00 00 div DWORD PTR ?m_LineWidth@CMailCoder@@2IA ; CMailCoder::m_LineWidth 0002b 89 45 04 mov DWORD PTR nCR$[rbp], eax ; 106 : nSize+= nCR * 2; 0002e 8b 45 00 mov eax, DWORD PTR nSize$[rbp] 00031 8b 4d 04 mov ecx, DWORD PTR nCR$[rbp] 00034 8d 04 48 lea eax, DWORD PTR [rax+rcx*2] 00037 89 45 00 mov DWORD PTR nSize$[rbp], eax ; 107 : return nSize; 0003a 8b 45 00 mov eax, DWORD PTR nSize$[rbp] ; 108 : } 0003d 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00041 5d pop rbp 00042 c3 ret 0 ?Base64EncodeSize@CMailCoder@@SAHH@Z ENDP ; CMailCoder::Base64EncodeSize _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?email_decode@CMailCoder@@QEAAHPEADI0@Z _TEXT SEGMENT iSize$ = 0 pSrc2$ = 8 iSrc2Len$ = 16 iDestLen$ = 20 iStart2$1 = 24 iStart$2 = 28 iEnd$3 = 32 iRet$4 = 36 iEnd$5 = 40 iRet$6 = 44 tv172 = 112 this$ = 144 pSrc$ = 152 nSize$ = 160 pDest$ = 168 ?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 55 push rbp 00015 48 81 ec a0 00 00 00 sub rsp, 160 ; 000000a0H 0001c 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 500 : int iSize=0; 00021 c7 45 00 00 00 00 00 mov DWORD PTR iSize$[rbp], 0 ; 501 : char * pSrc2=pSrc; 00028 48 8b 85 98 00 00 00 mov rax, QWORD PTR pSrc$[rbp] 0002f 48 89 45 08 mov QWORD PTR pSrc2$[rbp], rax ; 502 : int iSrc2Len=0; 00033 c7 45 10 00 00 00 00 mov DWORD PTR iSrc2Len$[rbp], 0 ; 503 : int iDestLen=0; 0003a c7 45 14 00 00 00 00 mov DWORD PTR iDestLen$[rbp], 0 $LN2@email_deco: ; 504 : while ( true ) 00041 33 c0 xor eax, eax 00043 83 f8 01 cmp eax, 1 00046 0f 84 b7 01 00 00 je $LN3@email_deco ; 505 : { ; 506 : int iStart2 = FoundChar(pSrc2,"=?"); 0004c 45 33 c9 xor r9d, r9d 0004f 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:??_C@_02HENDHKBC@?$DN?$DP@ 00056 48 8b 55 08 mov rdx, QWORD PTR pSrc2$[rbp] 0005a 48 8b 8d 90 00 00 00 mov rcx, QWORD PTR this$[rbp] 00061 e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 00066 89 45 18 mov DWORD PTR iStart2$1[rbp], eax ; 507 : if ( iStart2 >= 0 ) 00069 83 7d 18 00 cmp DWORD PTR iStart2$1[rbp], 0 0006d 0f 8c 89 01 00 00 jl $LN4@email_deco ; 508 : { ; 509 : strncpy(pDest+iDestLen,pSrc2,iStart2); 00073 48 63 45 18 movsxd rax, DWORD PTR iStart2$1[rbp] 00077 48 63 4d 14 movsxd rcx, DWORD PTR iDestLen$[rbp] 0007b 48 8b 95 a8 00 00 00 mov rdx, QWORD PTR pDest$[rbp] 00082 48 03 d1 add rdx, rcx 00085 48 8b ca mov rcx, rdx 00088 4c 8b c0 mov r8, rax 0008b 48 8b 55 08 mov rdx, QWORD PTR pSrc2$[rbp] 0008f e8 00 00 00 00 call strncpy ; 510 : iDestLen +=iStart2; 00094 8b 45 18 mov eax, DWORD PTR iStart2$1[rbp] 00097 8b 4d 14 mov ecx, DWORD PTR iDestLen$[rbp] 0009a 03 c8 add ecx, eax 0009c 8b c1 mov eax, ecx 0009e 89 45 14 mov DWORD PTR iDestLen$[rbp], eax ; 511 : pSrc2+=iStart2+2; //=?为2个字节 000a1 8b 45 18 mov eax, DWORD PTR iStart2$1[rbp] 000a4 83 c0 02 add eax, 2 000a7 48 98 cdqe 000a9 48 8b 4d 08 mov rcx, QWORD PTR pSrc2$[rbp] 000ad 48 03 c8 add rcx, rax 000b0 48 8b c1 mov rax, rcx 000b3 48 89 45 08 mov QWORD PTR pSrc2$[rbp], rax ; 512 : int iStart = FoundChar(pSrc2,"?B?"); 000b7 45 33 c9 xor r9d, r9d 000ba 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:??_C@_03FNDDLLIG@?$DPB?$DP@ 000c1 48 8b 55 08 mov rdx, QWORD PTR pSrc2$[rbp] 000c5 48 8b 8d 90 00 00 00 mov rcx, QWORD PTR this$[rbp] 000cc e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 000d1 89 45 1c mov DWORD PTR iStart$2[rbp], eax ; 513 : if ( iStart > 0 ) 000d4 83 7d 1c 00 cmp DWORD PTR iStart$2[rbp], 0 000d8 7e 7f jle SHORT $LN6@email_deco ; 514 : { ; 515 : //iStart += 3; //?B?为3个字节 ; 516 : pSrc2=pSrc2+iStart+3; //?B?为3个字节 000da 48 63 45 1c movsxd rax, DWORD PTR iStart$2[rbp] 000de 48 8b 4d 08 mov rcx, QWORD PTR pSrc2$[rbp] 000e2 48 8d 44 01 03 lea rax, QWORD PTR [rcx+rax+3] 000e7 48 89 45 08 mov QWORD PTR pSrc2$[rbp], rax ; 517 : int iEnd = FoundChar(pSrc2,"?="); 000eb 45 33 c9 xor r9d, r9d 000ee 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:??_C@_02EFGBMMPO@?$DP?$DN@ 000f5 48 8b 55 08 mov rdx, QWORD PTR pSrc2$[rbp] 000f9 48 8b 8d 90 00 00 00 mov rcx, QWORD PTR this$[rbp] 00100 e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 00105 89 45 20 mov DWORD PTR iEnd$3[rbp], eax ; 518 : if ( iEnd > 1 ) 00108 83 7d 20 01 cmp DWORD PTR iEnd$3[rbp], 1 0010c 7e 46 jle SHORT $LN8@email_deco ; 519 : { ; 520 : int iRet = base64_decode(pSrc2,iEnd,pDest+iDestLen); 0010e 48 63 45 14 movsxd rax, DWORD PTR iDestLen$[rbp] 00112 48 8b 8d a8 00 00 00 mov rcx, QWORD PTR pDest$[rbp] 00119 48 03 c8 add rcx, rax 0011c 48 8b c1 mov rax, rcx 0011f 4c 8b c0 mov r8, rax 00122 8b 55 20 mov edx, DWORD PTR iEnd$3[rbp] 00125 48 8b 4d 08 mov rcx, QWORD PTR pSrc2$[rbp] 00129 e8 00 00 00 00 call ?base64_decode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::base64_decode 0012e 89 45 24 mov DWORD PTR iRet$4[rbp], eax ; 521 : pSrc2 += iEnd+2; //"?="有两个字节 00131 8b 45 20 mov eax, DWORD PTR iEnd$3[rbp] 00134 83 c0 02 add eax, 2 00137 48 98 cdqe 00139 48 8b 4d 08 mov rcx, QWORD PTR pSrc2$[rbp] 0013d 48 03 c8 add rcx, rax 00140 48 8b c1 mov rax, rcx 00143 48 89 45 08 mov QWORD PTR pSrc2$[rbp], rax ; 522 : iDestLen += iRet; 00147 8b 45 24 mov eax, DWORD PTR iRet$4[rbp] 0014a 8b 4d 14 mov ecx, DWORD PTR iDestLen$[rbp] 0014d 03 c8 add ecx, eax 0014f 8b c1 mov eax, ecx 00151 89 45 14 mov DWORD PTR iDestLen$[rbp], eax $LN8@email_deco: ; 523 : } ; 524 : } 00154 e9 a1 00 00 00 jmp $LN7@email_deco $LN6@email_deco: ; 525 : else ; 526 : { ; 527 : iStart = FoundChar(pSrc2,"?Q?"); 00159 45 33 c9 xor r9d, r9d 0015c 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:??_C@_03EDFDKGKP@?$DPQ?$DP@ 00163 48 8b 55 08 mov rdx, QWORD PTR pSrc2$[rbp] 00167 48 8b 8d 90 00 00 00 mov rcx, QWORD PTR this$[rbp] 0016e e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 00173 89 45 1c mov DWORD PTR iStart$2[rbp], eax ; 528 : if ( iStart > 0 ) 00176 83 7d 1c 00 cmp DWORD PTR iStart$2[rbp], 0 0017a 7e 7c jle SHORT $LN9@email_deco ; 529 : { ; 530 : pSrc2=pSrc2+iStart+3; //?B?为3个字节 0017c 48 63 45 1c movsxd rax, DWORD PTR iStart$2[rbp] 00180 48 8b 4d 08 mov rcx, QWORD PTR pSrc2$[rbp] 00184 48 8d 44 01 03 lea rax, QWORD PTR [rcx+rax+3] 00189 48 89 45 08 mov QWORD PTR pSrc2$[rbp], rax ; 531 : int iEnd = FoundChar(pSrc2,"?="); 0018d 45 33 c9 xor r9d, r9d 00190 4c 8d 05 00 00 00 00 lea r8, OFFSET FLAT:??_C@_02EFGBMMPO@?$DP?$DN@ 00197 48 8b 55 08 mov rdx, QWORD PTR pSrc2$[rbp] 0019b 48 8b 8d 90 00 00 00 mov rcx, QWORD PTR this$[rbp] 001a2 e8 00 00 00 00 call ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ; CMailCoder::FoundChar 001a7 89 45 28 mov DWORD PTR iEnd$5[rbp], eax ; 532 : if ( iEnd > 1 ) 001aa 83 7d 28 01 cmp DWORD PTR iEnd$5[rbp], 1 001ae 7e 46 jle SHORT $LN11@email_deco ; 533 : { ; 534 : int iRet = quoted_decode(pSrc2,iEnd,pDest+iDestLen); 001b0 48 63 45 14 movsxd rax, DWORD PTR iDestLen$[rbp] 001b4 48 8b 8d a8 00 00 00 mov rcx, QWORD PTR pDest$[rbp] 001bb 48 03 c8 add rcx, rax 001be 48 8b c1 mov rax, rcx 001c1 4c 8b c0 mov r8, rax 001c4 8b 55 28 mov edx, DWORD PTR iEnd$5[rbp] 001c7 48 8b 4d 08 mov rcx, QWORD PTR pSrc2$[rbp] 001cb e8 00 00 00 00 call ?quoted_decode@CMailCoder@@SAHPEADI0@Z ; CMailCoder::quoted_decode 001d0 89 45 2c mov DWORD PTR iRet$6[rbp], eax ; 535 : pSrc2 += iEnd+2; //"?="有两个字节 001d3 8b 45 28 mov eax, DWORD PTR iEnd$5[rbp] 001d6 83 c0 02 add eax, 2 001d9 48 98 cdqe 001db 48 8b 4d 08 mov rcx, QWORD PTR pSrc2$[rbp] 001df 48 03 c8 add rcx, rax 001e2 48 8b c1 mov rax, rcx 001e5 48 89 45 08 mov QWORD PTR pSrc2$[rbp], rax ; 536 : iDestLen += iRet; 001e9 8b 45 2c mov eax, DWORD PTR iRet$6[rbp] 001ec 8b 4d 14 mov ecx, DWORD PTR iDestLen$[rbp] 001ef 03 c8 add ecx, eax 001f1 8b c1 mov eax, ecx 001f3 89 45 14 mov DWORD PTR iDestLen$[rbp], eax $LN11@email_deco: ; 537 : } ; 538 : } 001f6 eb 02 jmp SHORT $LN10@email_deco $LN9@email_deco: ; 539 : else ; 540 : { ; 541 : break; 001f8 eb 09 jmp SHORT $LN3@email_deco $LN10@email_deco: $LN7@email_deco: ; 542 : } ; 543 : } ; 544 : } 001fa eb 02 jmp SHORT $LN5@email_deco $LN4@email_deco: ; 545 : else ; 546 : { ; 547 : break; 001fc eb 05 jmp SHORT $LN3@email_deco $LN5@email_deco: ; 548 : } ; 549 : } 001fe e9 3e fe ff ff jmp $LN2@email_deco $LN3@email_deco: ; 550 : strncpy( pDest+iDestLen,pSrc+(pSrc2-pSrc),nSize-(pSrc2-pSrc) ); //复制最后的数据 00203 8b 85 a0 00 00 00 mov eax, DWORD PTR nSize$[rbp] 00209 48 8b 8d 98 00 00 00 mov rcx, QWORD PTR pSrc$[rbp] 00210 48 8b 55 08 mov rdx, QWORD PTR pSrc2$[rbp] 00214 48 2b d1 sub rdx, rcx 00217 48 8b ca mov rcx, rdx 0021a 48 2b c1 sub rax, rcx 0021d 48 8b 8d 98 00 00 00 mov rcx, QWORD PTR pSrc$[rbp] 00224 48 8b 55 08 mov rdx, QWORD PTR pSrc2$[rbp] 00228 48 2b d1 sub rdx, rcx 0022b 48 8b ca mov rcx, rdx 0022e 48 8b 95 98 00 00 00 mov rdx, QWORD PTR pSrc$[rbp] 00235 48 03 d1 add rdx, rcx 00238 48 8b ca mov rcx, rdx 0023b 48 63 55 14 movsxd rdx, DWORD PTR iDestLen$[rbp] 0023f 4c 8b 85 a8 00 00 00 mov r8, QWORD PTR pDest$[rbp] 00246 4c 03 c2 add r8, rdx 00249 49 8b d0 mov rdx, r8 0024c 48 89 55 70 mov QWORD PTR tv172[rbp], rdx 00250 4c 8b c0 mov r8, rax 00253 48 8b d1 mov rdx, rcx 00256 48 8b 45 70 mov rax, QWORD PTR tv172[rbp] 0025a 48 8b c8 mov rcx, rax 0025d e8 00 00 00 00 call strncpy ; 551 : ; 552 : return nSize; 00262 8b 85 a0 00 00 00 mov eax, DWORD PTR nSize$[rbp] ; 553 : } 00268 48 8d a5 80 00 00 00 lea rsp, QWORD PTR [rbp+128] 0026f 5d pop rbp 00270 c3 ret 0 ?email_decode@CMailCoder@@QEAAHPEADI0@Z ENDP ; CMailCoder::email_decode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z _TEXT SEGMENT pComp$ = 0 lLen2$ = 4096 j$ = 4100 i$1 = 4104 $T2 = 4624 __$ArrayPad$ = 4632 this$ = 4656 szSrc$ = 4664 pEx$ = 4672 lLen$ = 4680 ?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 55 push rbp 00015 b8 40 12 00 00 mov eax, 4672 ; 00001240H 0001a e8 00 00 00 00 call __chkstk 0001f 48 2b e0 sub rsp, rax 00022 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 00027 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 0002e 48 33 c5 xor rax, rbp 00031 48 89 85 18 12 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax ; 557 : char pComp[4096]; ; 558 : if ( lLen == 0 ) //如果没指定长度,则取原字符串长度 00038 83 bd 48 12 00 00 00 cmp DWORD PTR lLen$[rbp], 0 0003f 75 12 jne SHORT $LN5@FoundChar ; 559 : lLen = strlen( szSrc ); 00041 48 8b 8d 38 12 00 00 mov rcx, QWORD PTR szSrc$[rbp] 00048 e8 00 00 00 00 call strlen 0004d 89 85 48 12 00 00 mov DWORD PTR lLen$[rbp], eax $LN5@FoundChar: ; 560 : long lLen2= strlen( pEx ); 00053 48 8b 8d 40 12 00 00 mov rcx, QWORD PTR pEx$[rbp] 0005a e8 00 00 00 00 call strlen 0005f 89 85 00 10 00 00 mov DWORD PTR lLen2$[rbp], eax ; 561 : int j =0; 00065 c7 85 04 10 00 00 00 00 00 00 mov DWORD PTR j$[rbp], 0 ; 562 : for ( int i =0 ; i< lLen ; i++ ) 0006f c7 85 08 10 00 00 00 00 00 00 mov DWORD PTR i$1[rbp], 0 00079 eb 0e jmp SHORT $LN4@FoundChar $LN2@FoundChar: 0007b 8b 85 08 10 00 00 mov eax, DWORD PTR i$1[rbp] 00081 ff c0 inc eax 00083 89 85 08 10 00 00 mov DWORD PTR i$1[rbp], eax $LN4@FoundChar: 00089 8b 85 48 12 00 00 mov eax, DWORD PTR lLen$[rbp] 0008f 39 85 08 10 00 00 cmp DWORD PTR i$1[rbp], eax 00095 7d 79 jge SHORT $LN3@FoundChar ; 563 : { ; 564 : memcpy( pComp , szSrc+i , lLen2 ); 00097 48 63 85 00 10 00 00 movsxd rax, DWORD PTR lLen2$[rbp] 0009e 48 63 8d 08 10 00 00 movsxd rcx, DWORD PTR i$1[rbp] 000a5 48 8b 95 38 12 00 00 mov rdx, QWORD PTR szSrc$[rbp] 000ac 48 03 d1 add rdx, rcx 000af 48 8b ca mov rcx, rdx 000b2 4c 8b c0 mov r8, rax 000b5 48 8b d1 mov rdx, rcx 000b8 48 8d 4d 00 lea rcx, QWORD PTR pComp$[rbp] 000bc e8 00 00 00 00 call memcpy ; 565 : pComp[lLen2] = 0; 000c1 48 63 85 00 10 00 00 movsxd rax, DWORD PTR lLen2$[rbp] 000c8 48 89 85 10 12 00 00 mov QWORD PTR $T2[rbp], rax 000cf 48 81 bd 10 12 00 00 00 10 00 00 cmp QWORD PTR $T2[rbp], 4096 ; 00001000H 000da 73 02 jae SHORT $LN8@FoundChar 000dc eb 05 jmp SHORT $LN9@FoundChar $LN8@FoundChar: 000de e8 00 00 00 00 call __report_rangecheckfailure $LN9@FoundChar: 000e3 48 8b 85 10 12 00 00 mov rax, QWORD PTR $T2[rbp] 000ea c6 44 05 00 00 mov BYTE PTR pComp$[rbp+rax], 0 ; 566 : if (!strcmp( pComp , pEx ) ) 000ef 48 8b 95 40 12 00 00 mov rdx, QWORD PTR pEx$[rbp] 000f6 48 8d 4d 00 lea rcx, QWORD PTR pComp$[rbp] 000fa e8 00 00 00 00 call strcmp 000ff 85 c0 test eax, eax 00101 75 08 jne SHORT $LN6@FoundChar ; 567 : { ; 568 : return i; 00103 8b 85 08 10 00 00 mov eax, DWORD PTR i$1[rbp] 00109 eb 0a jmp SHORT $LN1@FoundChar $LN6@FoundChar: ; 569 : } ; 570 : } 0010b e9 6b ff ff ff jmp $LN2@FoundChar $LN3@FoundChar: ; 571 : return -1; 00110 b8 ff ff ff ff mov eax, -1 $LN1@FoundChar: $LN7@FoundChar: ; 572 : } 00115 48 8b 8d 18 12 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] 0011c 48 33 cd xor rcx, rbp 0011f e8 00 00 00 00 call __security_check_cookie 00124 48 8d a5 20 12 00 00 lea rsp, QWORD PTR [rbp+4640] 0012b 5d pop rbp 0012c c3 ret 0 ?FoundChar@CMailCoder@@QEAAHPEAD0J@Z ENDP ; CMailCoder::FoundChar _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?HexToDec@CMailCoder@@CAEE@Z _TEXT SEGMENT tv71 = 64 C$ = 96 ?HexToDec@CMailCoder@@CAEE@Z PROC ; CMailCoder::HexToDec, COMDAT ; 491 : { $LN5: 00000 88 4c 24 08 mov BYTE PTR [rsp+8], cl 00004 55 push rbp 00005 48 83 ec 50 sub rsp, 80 ; 00000050H 00009 48 8b ec mov rbp, rsp ; 492 : return C <= '9' ? C - '0' : C - 'A' + 10; 0000c 0f b6 45 60 movzx eax, BYTE PTR C$[rbp] 00010 83 f8 39 cmp eax, 57 ; 00000039H 00013 7f 0c jg SHORT $LN3@HexToDec 00015 0f b6 45 60 movzx eax, BYTE PTR C$[rbp] 00019 83 e8 30 sub eax, 48 ; 00000030H 0001c 89 45 40 mov DWORD PTR tv71[rbp], eax 0001f eb 0a jmp SHORT $LN4@HexToDec $LN3@HexToDec: 00021 0f b6 45 60 movzx eax, BYTE PTR C$[rbp] 00025 83 e8 37 sub eax, 55 ; 00000037H 00028 89 45 40 mov DWORD PTR tv71[rbp], eax $LN4@HexToDec: 0002b 0f b6 45 40 movzx eax, BYTE PTR tv71[rbp] ; 493 : } 0002f 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00033 5d pop rbp 00034 c3 ret 0 ?HexToDec@CMailCoder@@CAEE@Z ENDP ; CMailCoder::HexToDec _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?DecToHex@CMailCoder@@CAEE@Z _TEXT SEGMENT tv71 = 64 B$ = 96 ?DecToHex@CMailCoder@@CAEE@Z PROC ; CMailCoder::DecToHex, COMDAT ; 483 : { $LN5: 00000 88 4c 24 08 mov BYTE PTR [rsp+8], cl 00004 55 push rbp 00005 48 83 ec 50 sub rsp, 80 ; 00000050H 00009 48 8b ec mov rbp, rsp ; 484 : return B < 10 ? '0' + B:'A' + B - 10; 0000c 0f b6 45 60 movzx eax, BYTE PTR B$[rbp] 00010 83 f8 0a cmp eax, 10 00013 7d 0c jge SHORT $LN3@DecToHex 00015 0f b6 45 60 movzx eax, BYTE PTR B$[rbp] 00019 83 c0 30 add eax, 48 ; 00000030H 0001c 89 45 40 mov DWORD PTR tv71[rbp], eax 0001f eb 0a jmp SHORT $LN4@DecToHex $LN3@DecToHex: 00021 0f b6 45 60 movzx eax, BYTE PTR B$[rbp] 00025 83 c0 37 add eax, 55 ; 00000037H 00028 89 45 40 mov DWORD PTR tv71[rbp], eax $LN4@DecToHex: 0002b 0f b6 45 40 movzx eax, BYTE PTR tv71[rbp] ; 485 : } 0002f 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00033 5d pop rbp 00034 c3 ret 0 ?DecToHex@CMailCoder@@CAEE@Z ENDP ; CMailCoder::DecToHex _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z _TEXT SEGMENT __formal$ = 80 __formal$ = 88 __formal$ = 96 ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT $LN3: 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 55 push rbp 00010 48 83 ec 40 sub rsp, 64 ; 00000040H 00014 48 8b ec mov rbp, rsp 00017 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 0001b 5d pop rbp 0001c c3 ret 0 ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z ENDP ; __empty_global_delete _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z _TEXT SEGMENT __formal$ = 80 __formal$ = 88 ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT $LN3: 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 55 push rbp 0000b 48 83 ec 40 sub rsp, 64 ; 00000040H 0000f 48 8b ec mov rbp, rsp 00012 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00016 5d pop rbp 00017 c3 ret 0 ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z ENDP ; __empty_global_delete _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX_K@Z _TEXT SEGMENT __formal$ = 80 __formal$ = 88 ?__empty_global_delete@@YAXPEAX_K@Z PROC ; __empty_global_delete, COMDAT $LN3: 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 55 push rbp 0000b 48 83 ec 40 sub rsp, 64 ; 00000040H 0000f 48 8b ec mov rbp, rsp 00012 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00016 5d pop rbp 00017 c3 ret 0 ?__empty_global_delete@@YAXPEAX_K@Z ENDP ; __empty_global_delete _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\Pop3\MailCoder.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX@Z _TEXT SEGMENT __formal$ = 80 ?__empty_global_delete@@YAXPEAX@Z PROC ; __empty_global_delete, COMDAT $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp 0000d 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00011 5d pop rbp 00012 c3 ret 0 ?__empty_global_delete@@YAXPEAX@Z ENDP ; __empty_global_delete _TEXT ENDS END