; Listing generated by Microsoft (R) Optimizing Compiler Version 19.34.31933.0 include listing.inc INCLUDELIB LIBCMT INCLUDELIB OLDNAMES CONST SEGMENT $SG321467 DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123' DB '456789+/', 00H ORG $+15 $SG321506 DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123' DB '456789+/', 00H ORG $+15 $SG321544 DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123' DB '456789+/', 00H ORG $+15 $SG321581 DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123' DB '456789+/', 00H ORG $+15 $SG321617 DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123' DB '456789+/', 00H CONST 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 ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl PUBLIC ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data PUBLIC ?IsShared@CStringData@ATL@@QEBA_NXZ ; ATL::CStringData::IsShared PUBLIC ?Release@CStringData@ATL@@QEAAXXZ ; ATL::CStringData::Release PUBLIC ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer PUBLIC ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer PUBLIC ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN PUBLIC ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException PUBLIC ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach PUBLIC ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Fork PUBLIC ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData PUBLIC ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite PUBLIC ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2 PUBLIC ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Reallocate PUBLIC ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::SetLength PUBLIC ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize PUBLIC ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll PUBLIC ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt PUBLIC ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData PUBLIC ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ ; ATL::CSimpleStringT<char,0>::operator char const * PUBLIC ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::GetBuffer PUBLIC ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ ; ATL::CSimpleStringT<char,0>::GetLength PUBLIC ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer PUBLIC ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ; ATL::CSimpleStringT<char,0>::StringLengthN PUBLIC ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException PUBLIC ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach PUBLIC ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Fork PUBLIC ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData PUBLIC ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite PUBLIC ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite2 PUBLIC ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Reallocate PUBLIC ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::SetLength PUBLIC ?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ ; CBase64Coding::m_InitializeDecoderTable PUBLIC ??0CBase64Coding@@QEAA@XZ ; CBase64Coding::CBase64Coding PUBLIC ??1CBase64Coding@@UEAA@XZ ; CBase64Coding::~CBase64Coding PUBLIC ?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ; CBase64Coding::Decode PUBLIC ?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z ; CBase64Coding::Decode PUBLIC ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ; CBase64Coding::Encode PUBLIC ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ; CBase64Coding::Encode PUBLIC ?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ; CBase64Coding::Encode PUBLIC ?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z ; CBase64Coding::EncodeA PUBLIC ?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ; CBase64Coding::Encode2 PUBLIC ??_GCBase64Coding@@UEAAPEAXI@Z ; CBase64Coding::`scalar deleting destructor' PUBLIC ??_7CBase64Coding@@6B@ ; CBase64Coding::`vftable' PUBLIC ??_R4CBase64Coding@@6B@ ; CBase64Coding::`RTTI Complete Object Locator' PUBLIC ??_R0?AVCBase64Coding@@@8 ; CBase64Coding `RTTI Type Descriptor' PUBLIC ??_R3CBase64Coding@@8 ; CBase64Coding::`RTTI Class Hierarchy Descriptor' PUBLIC ??_R2CBase64Coding@@8 ; CBase64Coding::`RTTI Base Class Array' PUBLIC ??_R1A@?0A@EA@CBase64Coding@@8 ; CBase64Coding::`RTTI Base Class Descriptor at (0,-1,0,64)' PUBLIC __real@3fe8000000000000 EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete EXTRN _invalid_parameter_noinfo:PROC EXTRN _errno:PROC EXTRN memcpy:PROC EXTRN memset:PROC EXTRN wcsnlen:PROC EXTRN strnlen:PROC EXTRN ?AfxThrowMemoryException@@YAXXZ:PROC ; AfxThrowMemoryException EXTRN ?AfxThrowInvalidArgException@@YAXXZ:PROC ; AfxThrowInvalidArgException EXTRN ?AfxThrowOleException@@YAXJ@Z:PROC ; AfxThrowOleException EXTRN ?SetSize@CByteArray@@QEAAX_J0@Z:PROC ; CByteArray::SetSize EXTRN ??_ECBase64Coding@@UEAAPEAXI@Z:PROC ; CBase64Coding::`vector deleting destructor' EXTRN __CxxFrameHandler4:PROC EXTRN __GSHandlerCheck:PROC EXTRN __security_check_cookie:PROC EXTRN ??_7type_info@@6B@:BYTE ; type_info::`vftable' EXTRN __security_cookie:QWORD EXTRN _fltused:DWORD ; COMDAT pdata pdata SEGMENT $pdata$memcpy_s DD imagerel memcpy_s DD imagerel memcpy_s+313 DD imagerel $unwind$memcpy_s pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?AtlThrowImpl@ATL@@YAXJ@Z DD imagerel $LN5 DD imagerel $LN5+39 DD imagerel $unwind$?AtlThrowImpl@ATL@@YAXJ@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?IsShared@CStringData@ATL@@QEBA_NXZ DD imagerel $LN5 DD imagerel $LN5+45 DD imagerel $unwind$?IsShared@CStringData@ATL@@QEBA_NXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Release@CStringData@ATL@@QEAAXXZ DD imagerel $LN4 DD imagerel $LN4+87 DD imagerel $unwind$?Release@CStringData@ATL@@QEAAXXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z DD imagerel $LN3 DD imagerel $LN3+32 DD imagerel $unwind$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z DD imagerel $LN4 DD imagerel $LN4+81 DD imagerel $unwind$?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DD imagerel $LN4 DD imagerel $LN4+47 DD imagerel $unwind$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ DD imagerel $LN3 DD imagerel $LN3+19 DD imagerel $unwind$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD imagerel $LN3 DD imagerel $LN3+37 DD imagerel $unwind$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN6 DD imagerel $LN6+267 DD imagerel $unwind$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z DD imagerel $LN5 DD imagerel $LN5+125 DD imagerel $unwind$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN10 DD imagerel $LN10+196 DD imagerel $unwind$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN6 DD imagerel $LN6+149 DD imagerel $unwind$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD imagerel $LN5 DD imagerel $LN5+90 DD imagerel $unwind$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?RemoveAll@CByteArray@@QEAAXXZ DD imagerel $LN3 DD imagerel $LN3+33 DD imagerel $unwind$?RemoveAll@CByteArray@@QEAAXXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?SetAt@CByteArray@@QEAAX_JE@Z DD imagerel $LN5 DD imagerel $LN5+75 DD imagerel $unwind$?SetAt@CByteArray@@QEAAX_JE@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z DD imagerel $LN3 DD imagerel $LN3+32 DD imagerel $unwind$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ DD imagerel $LN3 DD imagerel $LN3+27 DD imagerel $unwind$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z DD imagerel $LN4 DD imagerel $LN4+81 DD imagerel $unwind$?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DD imagerel $LN4 DD imagerel $LN4+47 DD imagerel $unwind$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ DD imagerel $LN3 DD imagerel $LN3+19 DD imagerel $unwind$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD imagerel $LN3 DD imagerel $LN3+37 DD imagerel $unwind$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN6 DD imagerel $LN6+261 DD imagerel $unwind$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z DD imagerel $LN5 DD imagerel $LN5+125 DD imagerel $unwind$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN10 DD imagerel $LN10+196 DD imagerel $unwind$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN6 DD imagerel $LN6+149 DD imagerel $unwind$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD imagerel $LN5 DD imagerel $LN5+88 DD imagerel $unwind$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ DD imagerel $LN3 DD imagerel $LN3+1334 DD imagerel $unwind$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD imagerel $LN23 DD imagerel $LN23+1058 DD imagerel $unwind$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z DD imagerel $LN23 DD imagerel $LN23+1058 DD imagerel $unwind$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD imagerel $LN9 DD imagerel $LN9+1017 DD imagerel $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD imagerel $LN10 DD imagerel $LN10+1032 DD imagerel $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD imagerel $LN9 DD imagerel $LN9+951 DD imagerel $unwind$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z DD imagerel $LN9 DD imagerel $LN9+919 DD imagerel $unwind$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD imagerel $LN9 DD imagerel $LN9+943 DD imagerel $unwind$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$??_GCBase64Coding@@UEAAPEAXI@Z DD imagerel $LN4 DD imagerel $LN4+59 DD imagerel $unwind$??_GCBase64Coding@@UEAAPEAXI@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?__get_character@@YAEPEBE0AEAHH@Z DD imagerel ?__get_character@@YAEPEBE0AEAHH@Z DD imagerel ?__get_character@@YAEPEBE0AEAHH@Z+119 DD imagerel $unwind$?__get_character@@YAEPEBE0AEAHH@Z pdata ENDS ; COMDAT __real@3fe8000000000000 CONST SEGMENT __real@3fe8000000000000 DQ 03fe8000000000000r ; 0.75 CONST ENDS ; COMDAT ??_R1A@?0A@EA@CBase64Coding@@8 rdata$r SEGMENT ??_R1A@?0A@EA@CBase64Coding@@8 DD imagerel ??_R0?AVCBase64Coding@@@8 ; CBase64Coding::`RTTI Base Class Descriptor at (0,-1,0,64)' DD 00H DD 00H DD 0ffffffffH DD 00H DD 040H DD imagerel ??_R3CBase64Coding@@8 rdata$r ENDS ; COMDAT ??_R2CBase64Coding@@8 rdata$r SEGMENT ??_R2CBase64Coding@@8 DD imagerel ??_R1A@?0A@EA@CBase64Coding@@8 ; CBase64Coding::`RTTI Base Class Array' ORG $+3 rdata$r ENDS ; COMDAT ??_R3CBase64Coding@@8 rdata$r SEGMENT ??_R3CBase64Coding@@8 DD 00H ; CBase64Coding::`RTTI Class Hierarchy Descriptor' DD 00H DD 01H DD imagerel ??_R2CBase64Coding@@8 rdata$r ENDS ; COMDAT ??_R0?AVCBase64Coding@@@8 data$rs SEGMENT ??_R0?AVCBase64Coding@@@8 DQ FLAT:??_7type_info@@6B@ ; CBase64Coding `RTTI Type Descriptor' DQ 0000000000000000H DB '.?AVCBase64Coding@@', 00H data$rs ENDS ; COMDAT ??_R4CBase64Coding@@6B@ rdata$r SEGMENT ??_R4CBase64Coding@@6B@ DD 01H ; CBase64Coding::`RTTI Complete Object Locator' DD 00H DD 00H DD imagerel ??_R0?AVCBase64Coding@@@8 DD imagerel ??_R3CBase64Coding@@8 DD imagerel ??_R4CBase64Coding@@6B@ rdata$r ENDS ; COMDAT ??_7CBase64Coding@@6B@ CONST SEGMENT ??_7CBase64Coding@@6B@ DQ FLAT:??_R4CBase64Coding@@6B@ ; CBase64Coding::`vftable' DQ FLAT:?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ DQ FLAT:??_ECBase64Coding@@UEAAPEAXI@Z DQ FLAT:?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z DQ FLAT:?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DQ FLAT:?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DQ FLAT:?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DQ FLAT:?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DQ FLAT:?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z DQ FLAT:?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z CONST ENDS ; COMDAT xdata xdata SEGMENT $unwind$?__get_character@@YAEPEBE0AEAHH@Z DD 011801H DD 02218H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$??_GCBase64Coding@@UEAAPEAXI@Z DD 010d01H DD 0420dH xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 022H DW 0395H voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 042a19H DD 0170118H DD 060107011H DD imagerel __GSHandlerCheck DD 0a0H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 027H DW 037dH voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z DD 042f19H DD 017011dH DD 060157016H DD imagerel __GSHandlerCheck DD 0a0H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 027H DW 039dH voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 042f19H DD 017011dH DD 060157016H DD imagerel __GSHandlerCheck DD 0a0H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 022H DW 03eeH voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 042a19H DD 0170118H DD 060107011H DD imagerel __GSHandlerCheck DD 0a0H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 022H DW 03dfH voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD 042a19H DD 0150118H DD 060107011H DD imagerel __GSHandlerCheck DD 090H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z DD 011301H DD 0a213H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD 011301H DD 0a213H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ DD 010901H DD 04209H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 010d01H DD 0420dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 010d01H DD 0820dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 010d01H DD 0620dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z DD 010d01H DD 0620dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 010d01H DD 0c20dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD 010e01H DD 0420eH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ DD 010401H DD 04204H xdata ENDS ; COMDAT xdata xdata SEGMENT $ip2state$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DB 02H DB 00H DB 00H xdata ENDS ; COMDAT xdata xdata SEGMENT $cppxdata$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DB 040H DD imagerel $ip2state$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z DD 010e19H DD 0420eH DD imagerel __CxxFrameHandler4 DD imagerel $cppxdata$?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z DD 010d01H DD 0620dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ DD 010901H DD 04209H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z DD 010d01H DD 0420dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?SetAt@CByteArray@@QEAAX_JE@Z DD 011301H DD 04213H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?RemoveAll@CByteArray@@QEAAXXZ DD 010901H DD 04209H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 010d01H DD 0420dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 010d01H DD 0820dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 010d01H DD 0620dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z DD 010d01H DD 0620dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 010d01H DD 0c20dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD 010e01H DD 0420eH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ DD 010401H DD 04204H xdata ENDS ; COMDAT xdata xdata SEGMENT $ip2state$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DB 02H DB 00H DB 00H xdata ENDS ; COMDAT xdata xdata SEGMENT $cppxdata$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DB 040H DD imagerel $ip2state$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z DD 010e19H DD 0420eH DD imagerel __CxxFrameHandler4 DD imagerel $cppxdata$?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z DD 010d01H DD 0620dH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z DD 010d01H DD 0420dH xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DB 017H voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Release@CStringData@ATL@@QEAAXXZ DD 010901H DD 06209H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?IsShared@CStringData@ATL@@QEBA_NXZ DD 010901H DD 02209H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?AtlThrowImpl@ATL@@YAXJ@Z DD 010801H DD 04208H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$memcpy_s DD 011801H DD 08218H xdata ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?__get_character@@YAEPEBE0AEAHH@Z _TEXT SEGMENT return_value$ = 0 buffer$ = 32 decoder_table$ = 40 index$ = 48 size_of_buffer$ = 56 ?__get_character@@YAEPEBE0AEAHH@Z PROC ; __get_character, COMDAT ; 41 : { 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 48 83 ec 18 sub rsp, 24 ; 42 : BYTE return_value = 0; 00018 c6 04 24 00 mov BYTE PTR return_value$[rsp], 0 $LN4@get_charac: ; 43 : ; 44 : do ; 45 : { ; 46 : if ( index >= size_of_buffer ) 0001c 48 8b 44 24 30 mov rax, QWORD PTR index$[rsp] 00021 8b 4c 24 38 mov ecx, DWORD PTR size_of_buffer$[rsp] 00025 39 08 cmp DWORD PTR [rax], ecx 00027 7c 04 jl SHORT $LN5@get_charac ; 47 : { ; 48 : return( BASE64_END_OF_BUFFER ); 00029 b0 fd mov al, 253 ; 000000fdH 0002b eb 45 jmp SHORT $LN1@get_charac $LN5@get_charac: ; 49 : } ; 50 : ; 51 : return_value = buffer[ index ]; 0002d 48 8b 44 24 30 mov rax, QWORD PTR index$[rsp] 00032 48 63 00 movsxd rax, DWORD PTR [rax] 00035 48 8b 4c 24 20 mov rcx, QWORD PTR buffer$[rsp] 0003a 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0003e 88 04 24 mov BYTE PTR return_value$[rsp], al ; 52 : index++; 00041 48 8b 44 24 30 mov rax, QWORD PTR index$[rsp] 00046 8b 00 mov eax, DWORD PTR [rax] 00048 ff c0 inc eax 0004a 48 8b 4c 24 30 mov rcx, QWORD PTR index$[rsp] 0004f 89 01 mov DWORD PTR [rcx], eax ; 53 : } ; 54 : while( return_value != END_OF_BASE64_ENCODED_DATA && 00051 0f b6 04 24 movzx eax, BYTE PTR return_value$[rsp] 00055 83 f8 3d cmp eax, 61 ; 0000003dH 00058 74 14 je SHORT $LN6@get_charac 0005a 0f b6 04 24 movzx eax, BYTE PTR return_value$[rsp] 0005e 48 8b 4c 24 28 mov rcx, QWORD PTR decoder_table$[rsp] 00063 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00067 3d fe 00 00 00 cmp eax, 254 ; 000000feH 0006c 74 ae je SHORT $LN4@get_charac $LN6@get_charac: ; 55 : decoder_table[ return_value ] == BASE64_IGNORABLE_CHARACTER ); ; 56 : ; 57 : return( return_value ); 0006e 0f b6 04 24 movzx eax, BYTE PTR return_value$[rsp] $LN1@get_charac: ; 58 : } 00072 48 83 c4 18 add rsp, 24 00076 c3 ret 0 ?__get_character@@YAEPEBE0AEAHH@Z ENDP ; __get_character _TEXT ENDS ; Function compile flags: /Odtp ; COMDAT ??_GCBase64Coding@@UEAAPEAXI@Z _TEXT SEGMENT this$ = 48 __flags$ = 56 ??_GCBase64Coding@@UEAAPEAXI@Z PROC ; CBase64Coding::`scalar deleting destructor', COMDAT $LN4: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 28 sub rsp, 40 ; 00000028H 0000d 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00012 e8 00 00 00 00 call ??1CBase64Coding@@UEAA@XZ ; CBase64Coding::~CBase64Coding 00017 8b 44 24 38 mov eax, DWORD PTR __flags$[rsp] 0001b 83 e0 01 and eax, 1 0001e 85 c0 test eax, eax 00020 74 0f je SHORT $LN2@scalar 00022 ba 08 01 00 00 mov edx, 264 ; 00000108H 00027 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0002c e8 00 00 00 00 call ??3@YAXPEAX_K@Z ; operator delete $LN2@scalar: 00031 48 8b 44 24 30 mov rax, QWORD PTR this$[rsp] 00036 48 83 c4 28 add rsp, 40 ; 00000028H 0003a c3 ret 0 ??_GCBase64Coding@@UEAAPEAXI@Z ENDP ; CBase64Coding::`scalar deleting destructor' _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z _TEXT SEGMENT byte_to_add$ = 32 number_of_bytes_encoded$ = 36 byte_2$ = 40 byte_3$ = 41 byte_1$ = 42 loop_index$ = 44 destination$ = 48 number_of_bytes_to_encode$ = 56 input_buffer$ = 64 alphabet$ = 80 __$ArrayPad$ = 160 this$ = 208 source$ = 216 destination_string$ = 224 ?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::Encode2, COMDAT ; 980 : { $LN9: 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 56 push rsi 00010 57 push rdi 00011 48 81 ec b8 00 00 00 sub rsp, 184 ; 000000b8H 00018 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 0001f 48 33 c4 xor rax, rsp 00022 48 89 84 24 a0 00 00 00 mov QWORD PTR __$ArrayPad$[rsp], rax ; 981 : ; 982 : const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 0002a 48 8d 44 24 50 lea rax, QWORD PTR alphabet$[rsp] 0002f 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:$SG321617 00036 48 8b f8 mov rdi, rax 00039 48 8b f1 mov rsi, rcx 0003c b9 41 00 00 00 mov ecx, 65 ; 00000041H 00041 f3 a4 rep movsb ; 983 : ; 984 : int loop_index = 0; 00043 c7 44 24 2c 00 00 00 00 mov DWORD PTR loop_index$[rsp], 0 ; 985 : int number_of_bytes_to_encode = (int)source.GetSize(); 0004b 48 8b 8c 24 d8 00 00 00 mov rcx, QWORD PTR source$[rsp] 00053 e8 00 00 00 00 call ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize 00058 89 44 24 38 mov DWORD PTR number_of_bytes_to_encode$[rsp], eax ; 986 : ; 987 : BYTE byte_to_add = 0; 0005c c6 44 24 20 00 mov BYTE PTR byte_to_add$[rsp], 0 ; 988 : BYTE byte_1 = 0; 00061 c6 44 24 2a 00 mov BYTE PTR byte_1$[rsp], 0 ; 989 : BYTE byte_2 = 0; 00066 c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 990 : BYTE byte_3 = 0; 0006b c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 991 : ; 992 : const BYTE * input_buffer = source.GetData(); 00070 48 8b 8c 24 d8 00 00 00 mov rcx, QWORD PTR source$[rsp] 00078 e8 00 00 00 00 call ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData 0007d 48 89 44 24 40 mov QWORD PTR input_buffer$[rsp], rax ; 993 : ; 994 : DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 00082 f2 0f 2a 44 24 38 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp] 00088 f2 0f 5e 05 00 00 00 00 divsd xmm0, QWORD PTR __real@3fe8000000000000 00090 f2 48 0f 2c c0 cvttsd2si rax, xmm0 00095 ff c0 inc eax 00097 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 995 : ; 996 : // Now add in the CR/LF pairs, each line is truncated at 72 characters ; 997 : ; 998 : // 2000-05-12 ; 999 : // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here. ; 1000 : // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded. ; 1001 : ; 1002 : number_of_bytes_encoded+=2; 0009b 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0009f 83 c0 02 add eax, 2 000a2 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 1003 : // number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 ); ; 1004 : ; 1005 : LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded ); 000a6 8b 54 24 24 mov edx, DWORD PTR number_of_bytes_encoded$[rsp] 000aa 48 8b 8c 24 e0 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 000b2 e8 00 00 00 00 call ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer 000b7 48 89 44 24 30 mov QWORD PTR destination$[rsp], rax ; 1006 : ; 1007 : number_of_bytes_encoded = 0; 000bc c7 44 24 24 00 00 00 00 mov DWORD PTR number_of_bytes_encoded$[rsp], 0 $LN2@Encode2: ; 1008 : ; 1009 : while( loop_index < number_of_bytes_to_encode ) 000c4 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 000c8 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 000cc 0f 8d 87 02 00 00 jge $LN3@Encode2 ; 1010 : { ; 1011 : // Output the first byte ; 1012 : ; 1013 : byte_1 = input_buffer[ loop_index ]; 000d2 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 000d7 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 000dc 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000e0 88 44 24 2a mov BYTE PTR byte_1$[rsp], al ; 1014 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000e4 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 000e9 c1 f8 02 sar eax, 2 000ec 48 98 cdqe 000ee 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 000f3 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 1015 : ; 1016 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 000f7 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 000fc 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00100 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00105 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1017 : number_of_bytes_encoded++; 00109 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0010d ff c0 inc eax 0010f 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 1018 : ; 1019 : loop_index++; 00113 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 00117 ff c0 inc eax 00119 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 1020 : ; 1021 : if ( loop_index >= number_of_bytes_to_encode ) 0011d 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 00121 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 00125 0f 8c a6 00 00 00 jl $LN4@Encode2 ; 1022 : { ; 1023 : // We're at the end of the data to encode ; 1024 : ; 1025 : byte_2 = 0; 0012b c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 1026 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 00130 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 00135 83 e0 03 and eax, 3 00138 c1 e0 04 shl eax, 4 0013b 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 00140 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 00146 c1 f9 04 sar ecx, 4 00149 0b c1 or eax, ecx 0014b 48 98 cdqe 0014d 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00152 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 1027 : ; 1028 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00156 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0015b 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 0015f 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00164 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1029 : number_of_bytes_encoded++; 00168 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0016c ff c0 inc eax 0016e 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 1030 : ; 1031 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00172 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00176 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 0017b 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00180 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1032 : number_of_bytes_encoded++; 00184 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00188 ff c0 inc eax 0018a 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 1033 : ; 1034 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 0018e 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00192 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00197 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0019c 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1035 : ; 1036 : // 1999-09-01 ; 1037 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 1038 : // We must NULL terminate the string before letting CString have the buffer back. ; 1039 : ; 1040 : destination[ number_of_bytes_encoded + 1 ] = 0; 001a0 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 001a4 ff c0 inc eax 001a6 8b c0 mov eax, eax 001a8 33 c9 xor ecx, ecx 001aa 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 001af 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1041 : ; 1042 : destination_string.ReleaseBuffer( -1 ); 001b3 ba ff ff ff ff mov edx, -1 001b8 48 8b 8c 24 e0 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 001c0 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 1043 : ; 1044 : return( TRUE ); 001c5 b8 01 00 00 00 mov eax, 1 001ca e9 c6 01 00 00 jmp $LN1@Encode2 ; 1045 : } 001cf eb 12 jmp SHORT $LN5@Encode2 $LN4@Encode2: ; 1046 : else ; 1047 : { ; 1048 : byte_2 = input_buffer[ loop_index ]; 001d1 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 001d6 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 001db 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001df 88 44 24 28 mov BYTE PTR byte_2$[rsp], al $LN5@Encode2: ; 1049 : } ; 1050 : ; 1051 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 001e3 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 001e8 83 e0 03 and eax, 3 001eb c1 e0 04 shl eax, 4 001ee 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 001f3 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 001f9 c1 f9 04 sar ecx, 4 001fc 0b c1 or eax, ecx 001fe 48 98 cdqe 00200 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00205 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 1052 : ; 1053 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00209 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0020e 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00212 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00217 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1054 : number_of_bytes_encoded++; 0021b 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0021f ff c0 inc eax 00221 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 1055 : ; 1056 : loop_index++; 00225 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 00229 ff c0 inc eax 0022b 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 1057 : ; 1058 : if ( loop_index >= number_of_bytes_to_encode ) 0022f 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 00233 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 00237 0f 8c 8a 00 00 00 jl $LN6@Encode2 ; 1059 : { ; 1060 : // We ran out of bytes, we need to add the last half of byte_2 and pad ; 1061 : byte_3 = 0; 0023d c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 1062 : ; 1063 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 00242 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 00247 83 e0 0f and eax, 15 0024a c1 e0 02 shl eax, 2 0024d 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 00252 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00258 c1 f9 06 sar ecx, 6 0025b 0b c1 or eax, ecx 0025d 48 98 cdqe 0025f 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00264 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 1064 : ; 1065 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00268 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0026d 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00271 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00276 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1066 : number_of_bytes_encoded++; 0027a 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0027e ff c0 inc eax 00280 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 1067 : ; 1068 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00284 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00288 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 0028d 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00292 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1069 : ; 1070 : // 1999-09-01 ; 1071 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 1072 : // We must NULL terminate the string before letting CString have the buffer back. ; 1073 : ; 1074 : destination[ number_of_bytes_encoded + 1 ] = 0; 00296 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0029a ff c0 inc eax 0029c 8b c0 mov eax, eax 0029e 33 c9 xor ecx, ecx 002a0 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 002a5 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1075 : ; 1076 : destination_string.ReleaseBuffer( -1 ); 002a9 ba ff ff ff ff mov edx, -1 002ae 48 8b 8c 24 e0 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 002b6 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 1077 : ; 1078 : return( TRUE ); 002bb b8 01 00 00 00 mov eax, 1 002c0 e9 d0 00 00 00 jmp $LN1@Encode2 ; 1079 : } 002c5 eb 12 jmp SHORT $LN7@Encode2 $LN6@Encode2: ; 1080 : else ; 1081 : { ; 1082 : byte_3 = input_buffer[ loop_index ]; 002c7 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 002cc 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 002d1 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 002d5 88 44 24 29 mov BYTE PTR byte_3$[rsp], al $LN7@Encode2: ; 1083 : } ; 1084 : ; 1085 : loop_index++; 002d9 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 002dd ff c0 inc eax 002df 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 1086 : ; 1087 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 002e3 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 002e8 83 e0 0f and eax, 15 002eb c1 e0 02 shl eax, 2 002ee 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 002f3 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 002f9 c1 f9 06 sar ecx, 6 002fc 0b c1 or eax, ecx 002fe 48 98 cdqe 00300 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00305 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 1088 : ; 1089 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00309 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0030e 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00312 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00317 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1090 : number_of_bytes_encoded++; 0031b 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0031f ff c0 inc eax 00321 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 1091 : ; 1092 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 00325 0f b6 44 24 29 movzx eax, BYTE PTR byte_3$[rsp] 0032a 83 e0 3f and eax, 63 ; 0000003fH 0032d 48 98 cdqe 0032f 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00334 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 1093 : ; 1094 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00338 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0033d 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00341 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00346 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1095 : number_of_bytes_encoded++; 0034a 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0034e ff c0 inc eax 00350 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 1096 : ; 1097 : // if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 ) ; 1098 : // { ; 1099 : // destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN ); ; 1100 : // number_of_bytes_encoded++; ; 1101 : // ; 1102 : // destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED ); ; 1103 : // number_of_bytes_encoded++; ; 1104 : // } ; 1105 : } 00354 e9 6b fd ff ff jmp $LN2@Encode2 $LN3@Encode2: ; 1106 : ; 1107 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00359 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0035d b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00362 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00367 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1108 : ; 1109 : // 1999-09-01 ; 1110 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 1111 : // We must NULL terminate the string before letting CString have the buffer back. ; 1112 : ; 1113 : destination[ number_of_bytes_encoded + 1 ] = 0; 0036b 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0036f ff c0 inc eax 00371 8b c0 mov eax, eax 00373 33 c9 xor ecx, ecx 00375 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0037a 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1114 : ; 1115 : destination_string.ReleaseBuffer( -1 ); 0037e ba ff ff ff ff mov edx, -1 00383 48 8b 8c 24 e0 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 0038b e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 1116 : ; 1117 : return( TRUE ); 00390 b8 01 00 00 00 mov eax, 1 $LN1@Encode2: ; 1118 : } 00395 48 8b 8c 24 a0 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rsp] 0039d 48 33 cc xor rcx, rsp 003a0 e8 00 00 00 00 call __security_check_cookie 003a5 48 81 c4 b8 00 00 00 add rsp, 184 ; 000000b8H 003ac 5f pop rdi 003ad 5e pop rsi 003ae c3 ret 0 ?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode2 _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z _TEXT SEGMENT byte_to_add$ = 32 number_of_bytes_encoded$ = 36 byte_2$ = 40 byte_3$ = 41 byte_1$ = 42 loop_index$ = 44 destination$ = 48 number_of_bytes_to_encode$ = 56 input_buffer$ = 64 alphabet$ = 80 __$ArrayPad$ = 160 this$ = 208 pSource$ = 216 lSource$ = 224 destination_string$ = 232 ?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::EncodeA, COMDAT ; 837 : { $LN9: 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 56 push rsi 00015 57 push rdi 00016 48 81 ec b8 00 00 00 sub rsp, 184 ; 000000b8H 0001d 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 00024 48 33 c4 xor rax, rsp 00027 48 89 84 24 a0 00 00 00 mov QWORD PTR __$ArrayPad$[rsp], rax ; 838 : ; 839 : const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 0002f 48 8d 44 24 50 lea rax, QWORD PTR alphabet$[rsp] 00034 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:$SG321581 0003b 48 8b f8 mov rdi, rax 0003e 48 8b f1 mov rsi, rcx 00041 b9 41 00 00 00 mov ecx, 65 ; 00000041H 00046 f3 a4 rep movsb ; 840 : ; 841 : int loop_index = 0; 00048 c7 44 24 2c 00 00 00 00 mov DWORD PTR loop_index$[rsp], 0 ; 842 : int number_of_bytes_to_encode = lSource; 00050 8b 84 24 e0 00 00 00 mov eax, DWORD PTR lSource$[rsp] 00057 89 44 24 38 mov DWORD PTR number_of_bytes_to_encode$[rsp], eax ; 843 : ; 844 : BYTE byte_to_add = 0; 0005b c6 44 24 20 00 mov BYTE PTR byte_to_add$[rsp], 0 ; 845 : BYTE byte_1 = 0; 00060 c6 44 24 2a 00 mov BYTE PTR byte_1$[rsp], 0 ; 846 : BYTE byte_2 = 0; 00065 c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 847 : BYTE byte_3 = 0; 0006a c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 848 : ; 849 : const BYTE * input_buffer = pSource; 0006f 48 8b 84 24 d8 00 00 00 mov rax, QWORD PTR pSource$[rsp] 00077 48 89 44 24 40 mov QWORD PTR input_buffer$[rsp], rax ; 850 : ; 851 : DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 0007c f2 0f 2a 44 24 38 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp] 00082 f2 0f 5e 05 00 00 00 00 divsd xmm0, QWORD PTR __real@3fe8000000000000 0008a f2 48 0f 2c c0 cvttsd2si rax, xmm0 0008f ff c0 inc eax 00091 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 852 : ; 853 : // Now add in the CR/LF pairs, each line is truncated at 72 characters ; 854 : ; 855 : // 2000-05-12 ; 856 : // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here. ; 857 : // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded. ; 858 : ; 859 : number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 ); 00095 33 d2 xor edx, edx 00097 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0009b b9 48 00 00 00 mov ecx, 72 ; 00000048H 000a0 f7 f1 div ecx 000a2 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 000a6 8d 44 41 02 lea eax, DWORD PTR [rcx+rax*2+2] 000aa 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 860 : ; 861 : char * destination = destination_string.GetBuffer( number_of_bytes_encoded ); 000ae 8b 54 24 24 mov edx, DWORD PTR number_of_bytes_encoded$[rsp] 000b2 48 8b 8c 24 e8 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 000ba e8 00 00 00 00 call ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::GetBuffer 000bf 48 89 44 24 30 mov QWORD PTR destination$[rsp], rax ; 862 : ; 863 : number_of_bytes_encoded = 0; 000c4 c7 44 24 24 00 00 00 00 mov DWORD PTR number_of_bytes_encoded$[rsp], 0 $LN2@EncodeA: ; 864 : ; 865 : while( loop_index < number_of_bytes_to_encode ) 000cc 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 000d0 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 000d4 0f 8d 6e 02 00 00 jge $LN3@EncodeA ; 866 : { ; 867 : // Output the first byte ; 868 : ; 869 : byte_1 = input_buffer[ loop_index ]; 000da 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 000df 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 000e4 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000e8 88 44 24 2a mov BYTE PTR byte_1$[rsp], al ; 870 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000ec 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 000f1 c1 f8 02 sar eax, 2 000f4 48 98 cdqe 000f6 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 000fb 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 871 : ; 872 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 000ff 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00103 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00108 0f b6 54 24 20 movzx edx, BYTE PTR byte_to_add$[rsp] 0010d 88 14 01 mov BYTE PTR [rcx+rax], dl ; 873 : number_of_bytes_encoded++; 00110 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00114 ff c0 inc eax 00116 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 874 : ; 875 : loop_index++; 0011a 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 0011e ff c0 inc eax 00120 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 876 : ; 877 : if ( loop_index >= number_of_bytes_to_encode ) 00124 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 00128 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 0012c 0f 8c 99 00 00 00 jl $LN4@EncodeA ; 878 : { ; 879 : // We're at the end of the data to encode ; 880 : ; 881 : byte_2 = 0; 00132 c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 882 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 00137 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 0013c 83 e0 03 and eax, 3 0013f c1 e0 04 shl eax, 4 00142 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 00147 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 0014d c1 f9 04 sar ecx, 4 00150 0b c1 or eax, ecx 00152 48 98 cdqe 00154 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00159 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 883 : ; 884 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 0015d 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00161 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00166 0f b6 54 24 20 movzx edx, BYTE PTR byte_to_add$[rsp] 0016b 88 14 01 mov BYTE PTR [rcx+rax], dl ; 885 : number_of_bytes_encoded++; 0016e 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00172 ff c0 inc eax 00174 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 886 : ; 887 : destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA ); 00178 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0017c 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00181 c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 888 : number_of_bytes_encoded++; 00185 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00189 ff c0 inc eax 0018b 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 889 : ; 890 : destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA ); 0018f 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00193 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00198 c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 891 : ; 892 : // 1999-09-01 ; 893 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 894 : // We must NULL terminate the string before letting CString have the buffer back. ; 895 : ; 896 : destination[ number_of_bytes_encoded + 1 ] = 0; 0019c 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 001a0 ff c0 inc eax 001a2 8b c0 mov eax, eax 001a4 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 001a9 c6 04 01 00 mov BYTE PTR [rcx+rax], 0 ; 897 : ; 898 : destination_string.ReleaseBuffer( -1 ); 001ad ba ff ff ff ff mov edx, -1 001b2 48 8b 8c 24 e8 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 001ba e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer ; 899 : ; 900 : return( TRUE ); 001bf b8 01 00 00 00 mov eax, 1 001c4 e9 b4 01 00 00 jmp $LN1@EncodeA ; 901 : } 001c9 eb 12 jmp SHORT $LN5@EncodeA $LN4@EncodeA: ; 902 : else ; 903 : { ; 904 : byte_2 = input_buffer[ loop_index ]; 001cb 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 001d0 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 001d5 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001d9 88 44 24 28 mov BYTE PTR byte_2$[rsp], al $LN5@EncodeA: ; 905 : } ; 906 : ; 907 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 001dd 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 001e2 83 e0 03 and eax, 3 001e5 c1 e0 04 shl eax, 4 001e8 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 001ed 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 001f3 c1 f9 04 sar ecx, 4 001f6 0b c1 or eax, ecx 001f8 48 98 cdqe 001fa 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 001ff 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 908 : ; 909 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 00203 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00207 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 0020c 0f b6 54 24 20 movzx edx, BYTE PTR byte_to_add$[rsp] 00211 88 14 01 mov BYTE PTR [rcx+rax], dl ; 910 : number_of_bytes_encoded++; 00214 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00218 ff c0 inc eax 0021a 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 911 : ; 912 : loop_index++; 0021e 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 00222 ff c0 inc eax 00224 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 913 : ; 914 : if ( loop_index >= number_of_bytes_to_encode ) 00228 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 0022c 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 00230 0f 8c 82 00 00 00 jl $LN6@EncodeA ; 915 : { ; 916 : // We ran out of bytes, we need to add the last half of byte_2 and pad ; 917 : byte_3 = 0; 00236 c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 918 : ; 919 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 0023b 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 00240 83 e0 0f and eax, 15 00243 c1 e0 02 shl eax, 2 00246 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 0024b 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00251 c1 f9 06 sar ecx, 6 00254 0b c1 or eax, ecx 00256 48 98 cdqe 00258 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 0025d 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 920 : ; 921 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 00261 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00265 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 0026a 0f b6 54 24 20 movzx edx, BYTE PTR byte_to_add$[rsp] 0026f 88 14 01 mov BYTE PTR [rcx+rax], dl ; 922 : number_of_bytes_encoded++; 00272 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00276 ff c0 inc eax 00278 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 923 : ; 924 : destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA ); 0027c 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00280 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00285 c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 925 : ; 926 : // 1999-09-01 ; 927 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 928 : // We must NULL terminate the string before letting CString have the buffer back. ; 929 : ; 930 : destination[ number_of_bytes_encoded + 1 ] = 0; 00289 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0028d ff c0 inc eax 0028f 8b c0 mov eax, eax 00291 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00296 c6 04 01 00 mov BYTE PTR [rcx+rax], 0 ; 931 : ; 932 : destination_string.ReleaseBuffer( -1 ); 0029a ba ff ff ff ff mov edx, -1 0029f 48 8b 8c 24 e8 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 002a7 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer ; 933 : ; 934 : return( TRUE ); 002ac b8 01 00 00 00 mov eax, 1 002b1 e9 c7 00 00 00 jmp $LN1@EncodeA ; 935 : } 002b6 eb 12 jmp SHORT $LN7@EncodeA $LN6@EncodeA: ; 936 : else ; 937 : { ; 938 : byte_3 = input_buffer[ loop_index ]; 002b8 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 002bd 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 002c2 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 002c6 88 44 24 29 mov BYTE PTR byte_3$[rsp], al $LN7@EncodeA: ; 939 : } ; 940 : ; 941 : loop_index++; 002ca 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 002ce ff c0 inc eax 002d0 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 942 : ; 943 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 002d4 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 002d9 83 e0 0f and eax, 15 002dc c1 e0 02 shl eax, 2 002df 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 002e4 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 002ea c1 f9 06 sar ecx, 6 002ed 0b c1 or eax, ecx 002ef 48 98 cdqe 002f1 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 002f6 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 944 : ; 945 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 002fa 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 002fe 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00303 0f b6 54 24 20 movzx edx, BYTE PTR byte_to_add$[rsp] 00308 88 14 01 mov BYTE PTR [rcx+rax], dl ; 946 : number_of_bytes_encoded++; 0030b 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0030f ff c0 inc eax 00311 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 947 : ; 948 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 00315 0f b6 44 24 29 movzx eax, BYTE PTR byte_3$[rsp] 0031a 83 e0 3f and eax, 63 ; 0000003fH 0031d 48 98 cdqe 0031f 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00324 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 949 : ; 950 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 00328 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0032c 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00331 0f b6 54 24 20 movzx edx, BYTE PTR byte_to_add$[rsp] 00336 88 14 01 mov BYTE PTR [rcx+rax], dl ; 951 : number_of_bytes_encoded++; 00339 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0033d ff c0 inc eax 0033f 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 952 : ; 953 : /* ; 954 : if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 ) ; 955 : { ; 956 : destination[ number_of_bytes_encoded ] = static_cast< char >( CARRIAGE_RETURN ); ; 957 : number_of_bytes_encoded++; ; 958 : ; 959 : destination[ number_of_bytes_encoded ] = static_cast< char >( LINE_FEED ); ; 960 : number_of_bytes_encoded++; ; 961 : } ; 962 : */ ; 963 : } 00343 e9 84 fd ff ff jmp $LN2@EncodeA $LN3@EncodeA: ; 964 : ; 965 : destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA ); 00348 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0034c 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00351 c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 966 : ; 967 : // 1999-09-01 ; 968 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 969 : // We must NULL terminate the string before letting CString have the buffer back. ; 970 : ; 971 : destination[ number_of_bytes_encoded + 1 ] = 0; 00355 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00359 ff c0 inc eax 0035b 8b c0 mov eax, eax 0035d 48 8b 4c 24 30 mov rcx, QWORD PTR destination$[rsp] 00362 c6 04 01 00 mov BYTE PTR [rcx+rax], 0 ; 972 : ; 973 : destination_string.ReleaseBuffer( -1 ); 00366 ba ff ff ff ff mov edx, -1 0036b 48 8b 8c 24 e8 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 00373 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer ; 974 : ; 975 : return( TRUE ); 00378 b8 01 00 00 00 mov eax, 1 $LN1@EncodeA: ; 976 : } 0037d 48 8b 8c 24 a0 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rsp] 00385 48 33 cc xor rcx, rsp 00388 e8 00 00 00 00 call __security_check_cookie 0038d 48 81 c4 b8 00 00 00 add rsp, 184 ; 000000b8H 00394 5f pop rdi 00395 5e pop rsi 00396 c3 ret 0 ?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::EncodeA _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z _TEXT SEGMENT byte_to_add$ = 32 number_of_bytes_encoded$ = 36 byte_2$ = 40 byte_3$ = 41 byte_1$ = 42 loop_index$ = 44 destination$ = 48 number_of_bytes_to_encode$ = 56 input_buffer$ = 64 alphabet$ = 80 __$ArrayPad$ = 160 this$ = 208 pSource$ = 216 lSource$ = 224 destination_string$ = 232 ?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::Encode, COMDAT ; 695 : { $LN9: 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 56 push rsi 00015 57 push rdi 00016 48 81 ec b8 00 00 00 sub rsp, 184 ; 000000b8H 0001d 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 00024 48 33 c4 xor rax, rsp 00027 48 89 84 24 a0 00 00 00 mov QWORD PTR __$ArrayPad$[rsp], rax ; 696 : ; 697 : const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 0002f 48 8d 44 24 50 lea rax, QWORD PTR alphabet$[rsp] 00034 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:$SG321544 0003b 48 8b f8 mov rdi, rax 0003e 48 8b f1 mov rsi, rcx 00041 b9 41 00 00 00 mov ecx, 65 ; 00000041H 00046 f3 a4 rep movsb ; 698 : ; 699 : int loop_index = 0; 00048 c7 44 24 2c 00 00 00 00 mov DWORD PTR loop_index$[rsp], 0 ; 700 : int number_of_bytes_to_encode = lSource; 00050 8b 84 24 e0 00 00 00 mov eax, DWORD PTR lSource$[rsp] 00057 89 44 24 38 mov DWORD PTR number_of_bytes_to_encode$[rsp], eax ; 701 : ; 702 : BYTE byte_to_add = 0; 0005b c6 44 24 20 00 mov BYTE PTR byte_to_add$[rsp], 0 ; 703 : BYTE byte_1 = 0; 00060 c6 44 24 2a 00 mov BYTE PTR byte_1$[rsp], 0 ; 704 : BYTE byte_2 = 0; 00065 c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 705 : BYTE byte_3 = 0; 0006a c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 706 : ; 707 : const BYTE * input_buffer = pSource; 0006f 48 8b 84 24 d8 00 00 00 mov rax, QWORD PTR pSource$[rsp] 00077 48 89 44 24 40 mov QWORD PTR input_buffer$[rsp], rax ; 708 : ; 709 : DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 0007c f2 0f 2a 44 24 38 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp] 00082 f2 0f 5e 05 00 00 00 00 divsd xmm0, QWORD PTR __real@3fe8000000000000 0008a f2 48 0f 2c c0 cvttsd2si rax, xmm0 0008f ff c0 inc eax 00091 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 710 : ; 711 : // Now add in the CR/LF pairs, each line is truncated at 72 characters ; 712 : ; 713 : // 2000-05-12 ; 714 : // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here. ; 715 : // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded. ; 716 : ; 717 : number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 ); 00095 33 d2 xor edx, edx 00097 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0009b b9 48 00 00 00 mov ecx, 72 ; 00000048H 000a0 f7 f1 div ecx 000a2 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 000a6 8d 44 41 02 lea eax, DWORD PTR [rcx+rax*2+2] 000aa 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 718 : ; 719 : LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded ); 000ae 8b 54 24 24 mov edx, DWORD PTR number_of_bytes_encoded$[rsp] 000b2 48 8b 8c 24 e8 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 000ba e8 00 00 00 00 call ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer 000bf 48 89 44 24 30 mov QWORD PTR destination$[rsp], rax ; 720 : ; 721 : number_of_bytes_encoded = 0; 000c4 c7 44 24 24 00 00 00 00 mov DWORD PTR number_of_bytes_encoded$[rsp], 0 $LN2@Encode: ; 722 : ; 723 : while( loop_index < number_of_bytes_to_encode ) 000cc 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 000d0 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 000d4 0f 8d 87 02 00 00 jge $LN3@Encode ; 724 : { ; 725 : // Output the first byte ; 726 : ; 727 : byte_1 = input_buffer[ loop_index ]; 000da 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 000df 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 000e4 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000e8 88 44 24 2a mov BYTE PTR byte_1$[rsp], al ; 728 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000ec 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 000f1 c1 f8 02 sar eax, 2 000f4 48 98 cdqe 000f6 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 000fb 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 729 : ; 730 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 000ff 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 00104 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00108 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0010d 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 731 : number_of_bytes_encoded++; 00111 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00115 ff c0 inc eax 00117 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 732 : ; 733 : loop_index++; 0011b 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 0011f ff c0 inc eax 00121 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 734 : ; 735 : if ( loop_index >= number_of_bytes_to_encode ) 00125 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 00129 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 0012d 0f 8c a6 00 00 00 jl $LN4@Encode ; 736 : { ; 737 : // We're at the end of the data to encode ; 738 : ; 739 : byte_2 = 0; 00133 c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 740 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 00138 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 0013d 83 e0 03 and eax, 3 00140 c1 e0 04 shl eax, 4 00143 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 00148 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 0014e c1 f9 04 sar ecx, 4 00151 0b c1 or eax, ecx 00153 48 98 cdqe 00155 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 0015a 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 741 : ; 742 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 0015e 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 00163 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00167 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0016c 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 743 : number_of_bytes_encoded++; 00170 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00174 ff c0 inc eax 00176 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 744 : ; 745 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 0017a 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0017e b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00183 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00188 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 746 : number_of_bytes_encoded++; 0018c 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00190 ff c0 inc eax 00192 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 747 : ; 748 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00196 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0019a b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 0019f 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 001a4 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 749 : ; 750 : // 1999-09-01 ; 751 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 752 : // We must NULL terminate the string before letting CString have the buffer back. ; 753 : ; 754 : destination[ number_of_bytes_encoded + 1 ] = 0; 001a8 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 001ac ff c0 inc eax 001ae 8b c0 mov eax, eax 001b0 33 c9 xor ecx, ecx 001b2 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 001b7 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 755 : ; 756 : destination_string.ReleaseBuffer( -1 ); 001bb ba ff ff ff ff mov edx, -1 001c0 48 8b 8c 24 e8 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 001c8 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 757 : ; 758 : return( TRUE ); 001cd b8 01 00 00 00 mov eax, 1 001d2 e9 c6 01 00 00 jmp $LN1@Encode ; 759 : } 001d7 eb 12 jmp SHORT $LN5@Encode $LN4@Encode: ; 760 : else ; 761 : { ; 762 : byte_2 = input_buffer[ loop_index ]; 001d9 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 001de 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 001e3 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001e7 88 44 24 28 mov BYTE PTR byte_2$[rsp], al $LN5@Encode: ; 763 : } ; 764 : ; 765 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 001eb 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 001f0 83 e0 03 and eax, 3 001f3 c1 e0 04 shl eax, 4 001f6 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 001fb 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 00201 c1 f9 04 sar ecx, 4 00204 0b c1 or eax, ecx 00206 48 98 cdqe 00208 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 0020d 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 766 : ; 767 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00211 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 00216 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 0021a 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0021f 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 768 : number_of_bytes_encoded++; 00223 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00227 ff c0 inc eax 00229 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 769 : ; 770 : loop_index++; 0022d 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 00231 ff c0 inc eax 00233 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 771 : ; 772 : if ( loop_index >= number_of_bytes_to_encode ) 00237 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 0023b 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 0023f 0f 8c 8a 00 00 00 jl $LN6@Encode ; 773 : { ; 774 : // We ran out of bytes, we need to add the last half of byte_2 and pad ; 775 : byte_3 = 0; 00245 c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 776 : ; 777 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 0024a 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 0024f 83 e0 0f and eax, 15 00252 c1 e0 02 shl eax, 2 00255 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 0025a 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00260 c1 f9 06 sar ecx, 6 00263 0b c1 or eax, ecx 00265 48 98 cdqe 00267 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 0026c 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 778 : ; 779 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00270 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 00275 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00279 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0027e 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 780 : number_of_bytes_encoded++; 00282 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00286 ff c0 inc eax 00288 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 781 : ; 782 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 0028c 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00290 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00295 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0029a 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 783 : ; 784 : // 1999-09-01 ; 785 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 786 : // We must NULL terminate the string before letting CString have the buffer back. ; 787 : ; 788 : destination[ number_of_bytes_encoded + 1 ] = 0; 0029e 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 002a2 ff c0 inc eax 002a4 8b c0 mov eax, eax 002a6 33 c9 xor ecx, ecx 002a8 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 002ad 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 789 : ; 790 : destination_string.ReleaseBuffer( -1 ); 002b1 ba ff ff ff ff mov edx, -1 002b6 48 8b 8c 24 e8 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 002be e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 791 : ; 792 : return( TRUE ); 002c3 b8 01 00 00 00 mov eax, 1 002c8 e9 d0 00 00 00 jmp $LN1@Encode ; 793 : } 002cd eb 12 jmp SHORT $LN7@Encode $LN6@Encode: ; 794 : else ; 795 : { ; 796 : byte_3 = input_buffer[ loop_index ]; 002cf 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 002d4 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 002d9 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 002dd 88 44 24 29 mov BYTE PTR byte_3$[rsp], al $LN7@Encode: ; 797 : } ; 798 : ; 799 : loop_index++; 002e1 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 002e5 ff c0 inc eax 002e7 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 800 : ; 801 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 002eb 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 002f0 83 e0 0f and eax, 15 002f3 c1 e0 02 shl eax, 2 002f6 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 002fb 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00301 c1 f9 06 sar ecx, 6 00304 0b c1 or eax, ecx 00306 48 98 cdqe 00308 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 0030d 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 802 : ; 803 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00311 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 00316 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 0031a 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0031f 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 804 : number_of_bytes_encoded++; 00323 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00327 ff c0 inc eax 00329 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 805 : ; 806 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 0032d 0f b6 44 24 29 movzx eax, BYTE PTR byte_3$[rsp] 00332 83 e0 3f and eax, 63 ; 0000003fH 00335 48 98 cdqe 00337 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 0033c 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 807 : ; 808 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00340 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 00345 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00349 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0034e 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 809 : number_of_bytes_encoded++; 00352 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00356 ff c0 inc eax 00358 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 810 : ; 811 : /* ; 812 : if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 ) ; 813 : { ; 814 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN ); ; 815 : number_of_bytes_encoded++; ; 816 : ; 817 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED ); ; 818 : number_of_bytes_encoded++; ; 819 : } ; 820 : */ ; 821 : } 0035c e9 6b fd ff ff jmp $LN2@Encode $LN3@Encode: ; 822 : ; 823 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00361 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00365 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 0036a 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0036f 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 824 : ; 825 : // 1999-09-01 ; 826 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 827 : // We must NULL terminate the string before letting CString have the buffer back. ; 828 : ; 829 : destination[ number_of_bytes_encoded + 1 ] = 0; 00373 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00377 ff c0 inc eax 00379 8b c0 mov eax, eax 0037b 33 c9 xor ecx, ecx 0037d 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00382 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 830 : ; 831 : destination_string.ReleaseBuffer( -1 ); 00386 ba ff ff ff ff mov edx, -1 0038b 48 8b 8c 24 e8 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 00393 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 832 : ; 833 : return( TRUE ); 00398 b8 01 00 00 00 mov eax, 1 $LN1@Encode: ; 834 : } 0039d 48 8b 8c 24 a0 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rsp] 003a5 48 33 cc xor rcx, rsp 003a8 e8 00 00 00 00 call __security_check_cookie 003ad 48 81 c4 b8 00 00 00 add rsp, 184 ; 000000b8H 003b4 5f pop rdi 003b5 5e pop rsi 003b6 c3 ret 0 ?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z _TEXT SEGMENT byte_to_add$ = 32 number_of_bytes_encoded$ = 36 byte_2$ = 40 byte_3$ = 41 byte_1$ = 42 loop_index$ = 44 destination$ = 48 number_of_bytes_to_encode$ = 56 input_buffer$ = 64 alphabet$ = 80 __$ArrayPad$ = 160 this$ = 208 source$ = 216 destination_string$ = 224 ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z PROC ; CBase64Coding::Encode, COMDAT ; 555 : { $LN10: 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 56 push rsi 00010 57 push rdi 00011 48 81 ec b8 00 00 00 sub rsp, 184 ; 000000b8H 00018 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 0001f 48 33 c4 xor rax, rsp 00022 48 89 84 24 a0 00 00 00 mov QWORD PTR __$ArrayPad$[rsp], rax ; 556 : ; 557 : const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 0002a 48 8d 44 24 50 lea rax, QWORD PTR alphabet$[rsp] 0002f 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:$SG321506 00036 48 8b f8 mov rdi, rax 00039 48 8b f1 mov rsi, rcx 0003c b9 41 00 00 00 mov ecx, 65 ; 00000041H 00041 f3 a4 rep movsb ; 558 : ; 559 : int loop_index = 0; 00043 c7 44 24 2c 00 00 00 00 mov DWORD PTR loop_index$[rsp], 0 ; 560 : int number_of_bytes_to_encode = (int)source.GetSize(); 0004b 48 8b 8c 24 d8 00 00 00 mov rcx, QWORD PTR source$[rsp] 00053 e8 00 00 00 00 call ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize 00058 89 44 24 38 mov DWORD PTR number_of_bytes_to_encode$[rsp], eax ; 561 : ; 562 : BYTE byte_to_add = 0; 0005c c6 44 24 20 00 mov BYTE PTR byte_to_add$[rsp], 0 ; 563 : BYTE byte_1 = 0; 00061 c6 44 24 2a 00 mov BYTE PTR byte_1$[rsp], 0 ; 564 : BYTE byte_2 = 0; 00066 c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 565 : BYTE byte_3 = 0; 0006b c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 566 : ; 567 : const BYTE * input_buffer = source.GetData(); 00070 48 8b 8c 24 d8 00 00 00 mov rcx, QWORD PTR source$[rsp] 00078 e8 00 00 00 00 call ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData 0007d 48 89 44 24 40 mov QWORD PTR input_buffer$[rsp], rax ; 568 : ; 569 : DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 00082 f2 0f 2a 44 24 38 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp] 00088 f2 0f 5e 05 00 00 00 00 divsd xmm0, QWORD PTR __real@3fe8000000000000 00090 f2 48 0f 2c c0 cvttsd2si rax, xmm0 00095 ff c0 inc eax 00097 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 570 : ; 571 : // Now add in the CR/LF pairs, each line is truncated at 72 characters ; 572 : ; 573 : // 2000-05-12 ; 574 : // Thanks go to Ilia Golubev (ilia@varicom.co.il) for finding a bug here. ; 575 : // I was using number_of_bytes_to_encode rather than number_of_bytes_encoded. ; 576 : ; 577 : number_of_bytes_encoded += (DWORD)( ( ( number_of_bytes_encoded / BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) + 1 ) * 2 ); 0009b 33 d2 xor edx, edx 0009d 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 000a1 b9 48 00 00 00 mov ecx, 72 ; 00000048H 000a6 f7 f1 div ecx 000a8 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 000ac 8d 44 41 02 lea eax, DWORD PTR [rcx+rax*2+2] 000b0 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 578 : ; 579 : LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded ); 000b4 8b 54 24 24 mov edx, DWORD PTR number_of_bytes_encoded$[rsp] 000b8 48 8b 8c 24 e0 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 000c0 e8 00 00 00 00 call ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer 000c5 48 89 44 24 30 mov QWORD PTR destination$[rsp], rax ; 580 : ; 581 : number_of_bytes_encoded = 0; 000ca c7 44 24 24 00 00 00 00 mov DWORD PTR number_of_bytes_encoded$[rsp], 0 $LN2@Encode: ; 582 : ; 583 : while( loop_index < number_of_bytes_to_encode ) 000d2 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 000d6 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 000da 0f 8d d2 02 00 00 jge $LN3@Encode ; 584 : { ; 585 : // Output the first byte ; 586 : ; 587 : byte_1 = input_buffer[ loop_index ]; 000e0 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 000e5 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 000ea 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000ee 88 44 24 2a mov BYTE PTR byte_1$[rsp], al ; 588 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000f2 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 000f7 c1 f8 02 sar eax, 2 000fa 48 98 cdqe 000fc 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00101 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 589 : ; 590 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00105 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0010a 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 0010e 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00113 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 591 : number_of_bytes_encoded++; 00117 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0011b ff c0 inc eax 0011d 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 592 : ; 593 : loop_index++; 00121 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 00125 ff c0 inc eax 00127 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 594 : ; 595 : if ( loop_index >= number_of_bytes_to_encode ) 0012b 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 0012f 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 00133 0f 8c a6 00 00 00 jl $LN4@Encode ; 596 : { ; 597 : // We're at the end of the data to encode ; 598 : ; 599 : byte_2 = 0; 00139 c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 600 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 0013e 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 00143 83 e0 03 and eax, 3 00146 c1 e0 04 shl eax, 4 00149 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 0014e 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 00154 c1 f9 04 sar ecx, 4 00157 0b c1 or eax, ecx 00159 48 98 cdqe 0015b 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00160 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 601 : ; 602 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00164 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 00169 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 0016d 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00172 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 603 : number_of_bytes_encoded++; 00176 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0017a ff c0 inc eax 0017c 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 604 : ; 605 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00180 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00184 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00189 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0018e 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 606 : number_of_bytes_encoded++; 00192 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00196 ff c0 inc eax 00198 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 607 : ; 608 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 0019c 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 001a0 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 001a5 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 001aa 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 609 : ; 610 : // 1999-09-01 ; 611 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 612 : // We must NULL terminate the string before letting CString have the buffer back. ; 613 : ; 614 : destination[ number_of_bytes_encoded + 1 ] = 0; 001ae 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 001b2 ff c0 inc eax 001b4 8b c0 mov eax, eax 001b6 33 c9 xor ecx, ecx 001b8 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 001bd 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 615 : ; 616 : destination_string.ReleaseBuffer( -1 ); 001c1 ba ff ff ff ff mov edx, -1 001c6 48 8b 8c 24 e0 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 001ce e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 617 : ; 618 : return( TRUE ); 001d3 b8 01 00 00 00 mov eax, 1 001d8 e9 11 02 00 00 jmp $LN1@Encode ; 619 : } 001dd eb 12 jmp SHORT $LN5@Encode $LN4@Encode: ; 620 : else ; 621 : { ; 622 : byte_2 = input_buffer[ loop_index ]; 001df 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 001e4 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 001e9 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001ed 88 44 24 28 mov BYTE PTR byte_2$[rsp], al $LN5@Encode: ; 623 : } ; 624 : ; 625 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 001f1 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 001f6 83 e0 03 and eax, 3 001f9 c1 e0 04 shl eax, 4 001fc 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 00201 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 00207 c1 f9 04 sar ecx, 4 0020a 0b c1 or eax, ecx 0020c 48 98 cdqe 0020e 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00213 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 626 : ; 627 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00217 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0021c 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00220 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00225 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 628 : number_of_bytes_encoded++; 00229 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0022d ff c0 inc eax 0022f 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 629 : ; 630 : loop_index++; 00233 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 00237 ff c0 inc eax 00239 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 631 : ; 632 : if ( loop_index >= number_of_bytes_to_encode ) 0023d 8b 44 24 38 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 00241 39 44 24 2c cmp DWORD PTR loop_index$[rsp], eax 00245 0f 8c 8a 00 00 00 jl $LN6@Encode ; 633 : { ; 634 : // We ran out of bytes, we need to add the last half of byte_2 and pad ; 635 : byte_3 = 0; 0024b c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 636 : ; 637 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 00250 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 00255 83 e0 0f and eax, 15 00258 c1 e0 02 shl eax, 2 0025b 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 00260 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00266 c1 f9 06 sar ecx, 6 00269 0b c1 or eax, ecx 0026b 48 98 cdqe 0026d 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00272 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 638 : ; 639 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00276 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0027b 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 0027f 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00284 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 640 : number_of_bytes_encoded++; 00288 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0028c ff c0 inc eax 0028e 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 641 : ; 642 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00292 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00296 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 0029b 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 002a0 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 643 : ; 644 : // 1999-09-01 ; 645 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 646 : // We must NULL terminate the string before letting CString have the buffer back. ; 647 : ; 648 : destination[ number_of_bytes_encoded + 1 ] = 0; 002a4 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 002a8 ff c0 inc eax 002aa 8b c0 mov eax, eax 002ac 33 c9 xor ecx, ecx 002ae 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 002b3 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 649 : ; 650 : destination_string.ReleaseBuffer( -1 ); 002b7 ba ff ff ff ff mov edx, -1 002bc 48 8b 8c 24 e0 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 002c4 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 651 : ; 652 : return( TRUE ); 002c9 b8 01 00 00 00 mov eax, 1 002ce e9 1b 01 00 00 jmp $LN1@Encode ; 653 : } 002d3 eb 12 jmp SHORT $LN7@Encode $LN6@Encode: ; 654 : else ; 655 : { ; 656 : byte_3 = input_buffer[ loop_index ]; 002d5 48 63 44 24 2c movsxd rax, DWORD PTR loop_index$[rsp] 002da 48 8b 4c 24 40 mov rcx, QWORD PTR input_buffer$[rsp] 002df 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 002e3 88 44 24 29 mov BYTE PTR byte_3$[rsp], al $LN7@Encode: ; 657 : } ; 658 : ; 659 : loop_index++; 002e7 8b 44 24 2c mov eax, DWORD PTR loop_index$[rsp] 002eb ff c0 inc eax 002ed 89 44 24 2c mov DWORD PTR loop_index$[rsp], eax ; 660 : ; 661 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 002f1 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 002f6 83 e0 0f and eax, 15 002f9 c1 e0 02 shl eax, 2 002fc 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 00301 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00307 c1 f9 06 sar ecx, 6 0030a 0b c1 or eax, ecx 0030c 48 98 cdqe 0030e 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00313 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 662 : ; 663 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00317 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0031c 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 00320 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00325 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 664 : number_of_bytes_encoded++; 00329 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0032d ff c0 inc eax 0032f 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 665 : ; 666 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 00333 0f b6 44 24 29 movzx eax, BYTE PTR byte_3$[rsp] 00338 83 e0 3f and eax, 63 ; 0000003fH 0033b 48 98 cdqe 0033d 0f b6 44 04 50 movzx eax, BYTE PTR alphabet$[rsp+rax] 00342 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 667 : ; 668 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00346 0f b6 44 24 20 movzx eax, BYTE PTR byte_to_add$[rsp] 0034b 8b 4c 24 24 mov ecx, DWORD PTR number_of_bytes_encoded$[rsp] 0034f 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00354 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 669 : number_of_bytes_encoded++; 00358 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0035c ff c0 inc eax 0035e 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 670 : ; 671 : if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 ) 00362 33 d2 xor edx, edx 00364 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00368 b9 48 00 00 00 mov ecx, 72 ; 00000048H 0036d f7 f1 div ecx 0036f 8b c2 mov eax, edx 00371 85 c0 test eax, eax 00373 75 38 jne SHORT $LN8@Encode ; 672 : { ; 673 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN ); 00375 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00379 b9 0d 00 00 00 mov ecx, 13 0037e 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 00383 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 674 : number_of_bytes_encoded++; 00387 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 0038b ff c0 inc eax 0038d 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax ; 675 : ; 676 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED ); 00391 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 00395 b9 0a 00 00 00 mov ecx, 10 0039a 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 0039f 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 677 : number_of_bytes_encoded++; 003a3 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 003a7 ff c0 inc eax 003a9 89 44 24 24 mov DWORD PTR number_of_bytes_encoded$[rsp], eax $LN8@Encode: ; 678 : } ; 679 : } 003ad e9 20 fd ff ff jmp $LN2@Encode $LN3@Encode: ; 680 : ; 681 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 003b2 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 003b6 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 003bb 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 003c0 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 682 : ; 683 : // 1999-09-01 ; 684 : // Thanks go to Yurong Lin (ylin@dial.pipex.com) for finding a bug here. ; 685 : // We must NULL terminate the string before letting CString have the buffer back. ; 686 : ; 687 : destination[ number_of_bytes_encoded + 1 ] = 0; 003c4 8b 44 24 24 mov eax, DWORD PTR number_of_bytes_encoded$[rsp] 003c8 ff c0 inc eax 003ca 8b c0 mov eax, eax 003cc 33 c9 xor ecx, ecx 003ce 48 8b 54 24 30 mov rdx, QWORD PTR destination$[rsp] 003d3 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 688 : ; 689 : destination_string.ReleaseBuffer( -1 ); 003d7 ba ff ff ff ff mov edx, -1 003dc 48 8b 8c 24 e0 00 00 00 mov rcx, QWORD PTR destination_string$[rsp] 003e4 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 690 : ; 691 : return( TRUE ); 003e9 b8 01 00 00 00 mov eax, 1 $LN1@Encode: ; 692 : } 003ee 48 8b 8c 24 a0 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rsp] 003f6 48 33 cc xor rcx, rsp 003f9 e8 00 00 00 00 call __security_check_cookie 003fe 48 81 c4 b8 00 00 00 add rsp, 184 ; 000000b8H 00405 5f pop rdi 00406 5e pop rsi 00407 c3 ret 0 ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z _TEXT SEGMENT byte_to_add$ = 32 add_index$ = 36 byte_2$ = 40 byte_3$ = 41 byte_1$ = 42 source_index$ = 44 number_of_bytes_to_encode$ = 48 input_buffer$ = 56 alphabet$ = 64 __$ArrayPad$ = 144 this$ = 192 source$ = 200 destination$ = 208 ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z PROC ; CBase64Coding::Encode, COMDAT ; 448 : { $LN9: 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 56 push rsi 00010 57 push rdi 00011 48 81 ec a8 00 00 00 sub rsp, 168 ; 000000a8H 00018 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 0001f 48 33 c4 xor rax, rsp 00022 48 89 84 24 90 00 00 00 mov QWORD PTR __$ArrayPad$[rsp], rax ; 449 : ; 450 : // We don't want to make this static so we can reduce our ; 451 : // footprint in the library ; 452 : ; 453 : const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 0002a 48 8d 44 24 40 lea rax, QWORD PTR alphabet$[rsp] 0002f 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:$SG321467 00036 48 8b f8 mov rdi, rax 00039 48 8b f1 mov rsi, rcx 0003c b9 41 00 00 00 mov ecx, 65 ; 00000041H 00041 f3 a4 rep movsb ; 454 : ; 455 : int source_index = 0; 00043 c7 44 24 2c 00 00 00 00 mov DWORD PTR source_index$[rsp], 0 ; 456 : int number_of_bytes_to_encode = (int)source.GetSize(); 0004b 48 8b 8c 24 c8 00 00 00 mov rcx, QWORD PTR source$[rsp] 00053 e8 00 00 00 00 call ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize 00058 89 44 24 30 mov DWORD PTR number_of_bytes_to_encode$[rsp], eax ; 457 : ; 458 : BYTE byte_to_add = 0; 0005c c6 44 24 20 00 mov BYTE PTR byte_to_add$[rsp], 0 ; 459 : BYTE byte_1 = 0; 00061 c6 44 24 2a 00 mov BYTE PTR byte_1$[rsp], 0 ; 460 : BYTE byte_2 = 0; 00066 c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 461 : BYTE byte_3 = 0; 0006b c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 462 : ; 463 : const BYTE * input_buffer = source.GetData(); 00070 48 8b 8c 24 c8 00 00 00 mov rcx, QWORD PTR source$[rsp] 00078 e8 00 00 00 00 call ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData 0007d 48 89 44 24 38 mov QWORD PTR input_buffer$[rsp], rax ; 464 : ; 465 : DWORD add_index = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 00082 f2 0f 2a 44 24 30 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rsp] 00088 f2 0f 5e 05 00 00 00 00 divsd xmm0, QWORD PTR __real@3fe8000000000000 00090 f2 48 0f 2c c0 cvttsd2si rax, xmm0 00095 ff c0 inc eax 00097 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 466 : add_index += ( ( number_of_bytes_to_encode % 3 ) + 1 ); 0009b 8b 44 24 30 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 0009f 99 cdq 000a0 b9 03 00 00 00 mov ecx, 3 000a5 f7 f9 idiv ecx 000a7 8b c2 mov eax, edx 000a9 8b 4c 24 24 mov ecx, DWORD PTR add_index$[rsp] 000ad 8d 44 01 01 lea eax, DWORD PTR [rcx+rax+1] 000b1 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 467 : ; 468 : destination.SetSize( add_index ); 000b5 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 000b9 49 c7 c0 ff ff ff ff mov r8, -1 000c0 8b d0 mov edx, eax 000c2 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 000ca e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 469 : add_index = 0; 000cf c7 44 24 24 00 00 00 00 mov DWORD PTR add_index$[rsp], 0 $LN2@Encode: ; 470 : ; 471 : while( source_index < number_of_bytes_to_encode ) 000d7 8b 44 24 30 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 000db 39 44 24 2c cmp DWORD PTR source_index$[rsp], eax 000df 0f 8d bb 02 00 00 jge $LN3@Encode ; 472 : { ; 473 : // Output the first byte ; 474 : ; 475 : byte_1 = input_buffer[ source_index ]; 000e5 48 63 44 24 2c movsxd rax, DWORD PTR source_index$[rsp] 000ea 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 000ef 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000f3 88 44 24 2a mov BYTE PTR byte_1$[rsp], al ; 476 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000f7 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 000fc c1 f8 02 sar eax, 2 000ff 48 98 cdqe 00101 0f b6 44 04 40 movzx eax, BYTE PTR alphabet$[rsp+rax] 00106 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 477 : ; 478 : destination.SetAt( add_index, byte_to_add ); 0010a 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 0010e 44 0f b6 44 24 20 movzx r8d, BYTE PTR byte_to_add$[rsp] 00114 8b d0 mov edx, eax 00116 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 0011e e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 479 : add_index++; 00123 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 00127 ff c0 inc eax 00129 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 480 : ; 481 : source_index++; 0012d 8b 44 24 2c mov eax, DWORD PTR source_index$[rsp] 00131 ff c0 inc eax 00133 89 44 24 2c mov DWORD PTR source_index$[rsp], eax ; 482 : ; 483 : if ( source_index >= number_of_bytes_to_encode ) 00137 8b 44 24 30 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 0013b 39 44 24 2c cmp DWORD PTR source_index$[rsp], eax 0013f 0f 8c b4 00 00 00 jl $LN4@Encode ; 484 : { ; 485 : // We're at the end of the data to encode ; 486 : ; 487 : byte_2 = 0; 00145 c6 44 24 28 00 mov BYTE PTR byte_2$[rsp], 0 ; 488 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 0014a 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 0014f 83 e0 03 and eax, 3 00152 c1 e0 04 shl eax, 4 00155 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 0015a 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 00160 c1 f9 04 sar ecx, 4 00163 0b c1 or eax, ecx 00165 48 98 cdqe 00167 0f b6 44 04 40 movzx eax, BYTE PTR alphabet$[rsp+rax] 0016c 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 489 : ; 490 : destination.SetAt( add_index, byte_to_add ); 00170 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 00174 44 0f b6 44 24 20 movzx r8d, BYTE PTR byte_to_add$[rsp] 0017a 8b d0 mov edx, eax 0017c 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 00184 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 491 : add_index++; 00189 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 0018d ff c0 inc eax 0018f 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 492 : ; 493 : destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA ); 00193 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 00197 41 b0 3d mov r8b, 61 ; 0000003dH 0019a 8b d0 mov edx, eax 0019c 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 001a4 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 494 : add_index++; 001a9 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 001ad ff c0 inc eax 001af 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 495 : ; 496 : destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA ); 001b3 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 001b7 41 b0 3d mov r8b, 61 ; 0000003dH 001ba 8b d0 mov edx, eax 001bc 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 001c4 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 497 : add_index++; 001c9 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 001cd ff c0 inc eax 001cf 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 498 : ; 499 : destination.SetSize( add_index ); 001d3 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 001d7 49 c7 c0 ff ff ff ff mov r8, -1 001de 8b d0 mov edx, eax 001e0 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 001e8 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 500 : return( TRUE ); 001ed b8 01 00 00 00 mov eax, 1 001f2 e9 e8 01 00 00 jmp $LN1@Encode ; 501 : } 001f7 eb 12 jmp SHORT $LN5@Encode $LN4@Encode: ; 502 : else ; 503 : { ; 504 : byte_2 = input_buffer[ source_index ]; 001f9 48 63 44 24 2c movsxd rax, DWORD PTR source_index$[rsp] 001fe 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 00203 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00207 88 44 24 28 mov BYTE PTR byte_2$[rsp], al $LN5@Encode: ; 505 : } ; 506 : ; 507 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 0020b 0f b6 44 24 2a movzx eax, BYTE PTR byte_1$[rsp] 00210 83 e0 03 and eax, 3 00213 c1 e0 04 shl eax, 4 00216 0f b6 4c 24 28 movzx ecx, BYTE PTR byte_2$[rsp] 0021b 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 00221 c1 f9 04 sar ecx, 4 00224 0b c1 or eax, ecx 00226 48 98 cdqe 00228 0f b6 44 04 40 movzx eax, BYTE PTR alphabet$[rsp+rax] 0022d 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 508 : destination.SetAt( add_index, byte_to_add ); 00231 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 00235 44 0f b6 44 24 20 movzx r8d, BYTE PTR byte_to_add$[rsp] 0023b 8b d0 mov edx, eax 0023d 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 00245 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 509 : add_index++; 0024a 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 0024e ff c0 inc eax 00250 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 510 : ; 511 : source_index++; 00254 8b 44 24 2c mov eax, DWORD PTR source_index$[rsp] 00258 ff c0 inc eax 0025a 89 44 24 2c mov DWORD PTR source_index$[rsp], eax ; 512 : ; 513 : if ( source_index >= number_of_bytes_to_encode ) 0025e 8b 44 24 30 mov eax, DWORD PTR number_of_bytes_to_encode$[rsp] 00262 39 44 24 2c cmp DWORD PTR source_index$[rsp], eax 00266 0f 8c 94 00 00 00 jl $LN6@Encode ; 514 : { ; 515 : // We ran out of bytes, we need to add the last half of byte_2 and pad ; 516 : byte_3 = 0; 0026c c6 44 24 29 00 mov BYTE PTR byte_3$[rsp], 0 ; 517 : ; 518 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 00271 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 00276 83 e0 0f and eax, 15 00279 c1 e0 02 shl eax, 2 0027c 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 00281 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00287 c1 f9 06 sar ecx, 6 0028a 0b c1 or eax, ecx 0028c 48 98 cdqe 0028e 0f b6 44 04 40 movzx eax, BYTE PTR alphabet$[rsp+rax] 00293 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 519 : ; 520 : destination.SetAt( add_index, byte_to_add ); 00297 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 0029b 44 0f b6 44 24 20 movzx r8d, BYTE PTR byte_to_add$[rsp] 002a1 8b d0 mov edx, eax 002a3 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 002ab e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 521 : add_index++; 002b0 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 002b4 ff c0 inc eax 002b6 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 522 : ; 523 : destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA ); 002ba 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 002be 41 b0 3d mov r8b, 61 ; 0000003dH 002c1 8b d0 mov edx, eax 002c3 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 002cb e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 524 : add_index++; 002d0 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 002d4 ff c0 inc eax 002d6 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 525 : ; 526 : destination.SetSize( add_index ); 002da 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 002de 49 c7 c0 ff ff ff ff mov r8, -1 002e5 8b d0 mov edx, eax 002e7 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 002ef e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 527 : return( TRUE ); 002f4 b8 01 00 00 00 mov eax, 1 002f9 e9 e1 00 00 00 jmp $LN1@Encode ; 528 : } 002fe eb 12 jmp SHORT $LN7@Encode $LN6@Encode: ; 529 : else ; 530 : { ; 531 : byte_3 = input_buffer[ source_index ]; 00300 48 63 44 24 2c movsxd rax, DWORD PTR source_index$[rsp] 00305 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 0030a 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0030e 88 44 24 29 mov BYTE PTR byte_3$[rsp], al $LN7@Encode: ; 532 : } ; 533 : ; 534 : source_index++; 00312 8b 44 24 2c mov eax, DWORD PTR source_index$[rsp] 00316 ff c0 inc eax 00318 89 44 24 2c mov DWORD PTR source_index$[rsp], eax ; 535 : ; 536 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 0031c 0f b6 44 24 28 movzx eax, BYTE PTR byte_2$[rsp] 00321 83 e0 0f and eax, 15 00324 c1 e0 02 shl eax, 2 00327 0f b6 4c 24 29 movzx ecx, BYTE PTR byte_3$[rsp] 0032c 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00332 c1 f9 06 sar ecx, 6 00335 0b c1 or eax, ecx 00337 48 98 cdqe 00339 0f b6 44 04 40 movzx eax, BYTE PTR alphabet$[rsp+rax] 0033e 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 537 : ; 538 : destination.SetAt( add_index, byte_to_add ); 00342 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 00346 44 0f b6 44 24 20 movzx r8d, BYTE PTR byte_to_add$[rsp] 0034c 8b d0 mov edx, eax 0034e 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 00356 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 539 : add_index++; 0035b 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 0035f ff c0 inc eax 00361 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 540 : ; 541 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 00365 0f b6 44 24 29 movzx eax, BYTE PTR byte_3$[rsp] 0036a 83 e0 3f and eax, 63 ; 0000003fH 0036d 48 98 cdqe 0036f 0f b6 44 04 40 movzx eax, BYTE PTR alphabet$[rsp+rax] 00374 88 44 24 20 mov BYTE PTR byte_to_add$[rsp], al ; 542 : ; 543 : destination.SetAt( add_index, byte_to_add ); 00378 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 0037c 44 0f b6 44 24 20 movzx r8d, BYTE PTR byte_to_add$[rsp] 00382 8b d0 mov edx, eax 00384 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 0038c e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 544 : add_index++; 00391 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 00395 ff c0 inc eax 00397 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 545 : } 0039b e9 37 fd ff ff jmp $LN2@Encode $LN3@Encode: ; 546 : ; 547 : destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA ); 003a0 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 003a4 41 b0 3d mov r8b, 61 ; 0000003dH 003a7 8b d0 mov edx, eax 003a9 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 003b1 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 548 : add_index++; 003b6 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 003ba ff c0 inc eax 003bc 89 44 24 24 mov DWORD PTR add_index$[rsp], eax ; 549 : ; 550 : destination.SetSize( add_index ); 003c0 8b 44 24 24 mov eax, DWORD PTR add_index$[rsp] 003c4 49 c7 c0 ff ff ff ff mov r8, -1 003cb 8b d0 mov edx, eax 003cd 48 8b 8c 24 d0 00 00 00 mov rcx, QWORD PTR destination$[rsp] 003d5 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 551 : return( TRUE ); 003da b8 01 00 00 00 mov eax, 1 $LN1@Encode: ; 552 : } 003df 48 8b 8c 24 90 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rsp] 003e7 48 33 cc xor rcx, rsp 003ea e8 00 00 00 00 call __security_check_cookie 003ef 48 81 c4 a8 00 00 00 add rsp, 168 ; 000000a8H 003f6 5f pop rdi 003f7 5e pop rsi 003f8 c3 ret 0 ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ENDP ; CBase64Coding::Encode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z _TEXT SEGMENT character_3$ = 32 character_4$ = 33 character_2$ = 34 character_1$ = 35 byte_to_add$ = 36 add_index$ = 40 number_of_bytes_to_decode$ = 44 index$ = 48 input_buffer$ = 56 return_value$ = 64 this$ = 96 source$ = 104 destination$ = 112 ?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z PROC ; CBase64Coding::Decode, COMDAT ; 302 : { $LN23: 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 48 83 ec 58 sub rsp, 88 ; 00000058H ; 303 : ; 304 : if ( m_DecoderTable[ 0 ] == 0x00 ) 00013 b8 01 00 00 00 mov eax, 1 00018 48 6b c0 00 imul rax, rax, 0 0001c 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00021 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00026 85 c0 test eax, eax 00028 75 0f jne SHORT $LN4@Decode ; 305 : { ; 306 : m_InitializeDecoderTable(); 0002a 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 0002f 48 8b 00 mov rax, QWORD PTR [rax] 00032 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00037 ff 10 call QWORD PTR [rax] $LN4@Decode: ; 307 : } ; 308 : ; 309 : BOOL return_value = TRUE; //Ĭ�Ϸ��سɹ� 00039 c7 44 24 40 01 00 00 00 mov DWORD PTR return_value$[rsp], 1 ; 310 : ; 311 : BYTE byte_to_add = 0; 00041 c6 44 24 24 00 mov BYTE PTR byte_to_add$[rsp], 0 ; 312 : BYTE character_1 = 0; 00046 c6 44 24 23 00 mov BYTE PTR character_1$[rsp], 0 ; 313 : BYTE character_2 = 0; 0004b c6 44 24 22 00 mov BYTE PTR character_2$[rsp], 0 ; 314 : BYTE character_3 = 0; 00050 c6 44 24 20 00 mov BYTE PTR character_3$[rsp], 0 ; 315 : BYTE character_4 = 0; 00055 c6 44 24 21 00 mov BYTE PTR character_4$[rsp], 0 ; 316 : ; 317 : int index = 0; 0005a c7 44 24 30 00 00 00 00 mov DWORD PTR index$[rsp], 0 ; 318 : int number_of_bytes_to_decode = source.GetLength(); 00062 48 8b 4c 24 68 mov rcx, QWORD PTR source$[rsp] 00067 e8 00 00 00 00 call ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ ; ATL::CSimpleStringT<char,0>::GetLength 0006c 89 44 24 2c mov DWORD PTR number_of_bytes_to_decode$[rsp], eax ; 319 : ; 320 : DWORD add_index = (DWORD) ( (double) number_of_bytes_to_decode * (double) 0.75 ) + 1; 00070 f2 0f 2a 44 24 2c cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_decode$[rsp] 00076 f2 0f 59 05 00 00 00 00 mulsd xmm0, QWORD PTR __real@3fe8000000000000 0007e f2 48 0f 2c c0 cvttsd2si rax, xmm0 00083 ff c0 inc eax 00085 89 44 24 28 mov DWORD PTR add_index$[rsp], eax ; 321 : ; 322 : destination.SetSize( add_index ); 00089 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 0008d 49 c7 c0 ff ff ff ff mov r8, -1 00094 8b d0 mov edx, eax 00096 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0009b e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 323 : add_index = 0; 000a0 c7 44 24 28 00 00 00 00 mov DWORD PTR add_index$[rsp], 0 ; 324 : ; 325 : // Since we're decoding, we are most likely in a performance-minded ; 326 : // part of an application, let's go for a speedy method for accessing ; 327 : // the source data. ; 328 : ; 329 : char * input_buffer = (char*)(const char *)source; 000a8 48 8b 4c 24 68 mov rcx, QWORD PTR source$[rsp] 000ad e8 00 00 00 00 call ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ ; ATL::CSimpleStringT<char,0>::operator char const * 000b2 48 89 44 24 38 mov QWORD PTR input_buffer$[rsp], rax $LN2@Decode: ; 330 : ; 331 : while( index < number_of_bytes_to_decode ) 000b7 8b 44 24 2c mov eax, DWORD PTR number_of_bytes_to_decode$[rsp] 000bb 39 44 24 30 cmp DWORD PTR index$[rsp], eax 000bf 0f 8d 3d 03 00 00 jge $LN3@Decode ; 332 : { ; 333 : character_1 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode ); 000c5 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 000ca 48 83 c0 08 add rax, 8 000ce 44 8b 4c 24 2c mov r9d, DWORD PTR number_of_bytes_to_decode$[rsp] 000d3 4c 8d 44 24 30 lea r8, QWORD PTR index$[rsp] 000d8 48 8b d0 mov rdx, rax 000db 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 000e0 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 000e5 88 44 24 23 mov BYTE PTR character_1$[rsp], al ; 334 : ; 335 : if ( character_1 != END_OF_BASE64_ENCODED_DATA ) 000e9 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 000ee 83 f8 3d cmp eax, 61 ; 0000003dH 000f1 0f 84 78 01 00 00 je $LN5@Decode ; 336 : { ; 337 : if ( m_DecoderTable[ character_1 ] == BASE64_UNKNOWN_VALUE ) 000f7 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 000fc 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00101 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00106 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 0010b 75 11 jne SHORT $LN7@Decode ; 338 : { ; 339 : destination.RemoveAll(); 0010d 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 00112 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 340 : return( FALSE ); 00117 33 c0 xor eax, eax 00119 e9 ff 02 00 00 jmp $LN1@Decode $LN7@Decode: ; 341 : } ; 342 : ; 343 : character_2 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode ); 0011e 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 00123 48 83 c0 08 add rax, 8 00127 44 8b 4c 24 2c mov r9d, DWORD PTR number_of_bytes_to_decode$[rsp] 0012c 4c 8d 44 24 30 lea r8, QWORD PTR index$[rsp] 00131 48 8b d0 mov rdx, rax 00134 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 00139 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 0013e 88 44 24 22 mov BYTE PTR character_2$[rsp], al ; 344 : ; 345 : if ( character_2 != END_OF_BASE64_ENCODED_DATA ) 00142 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 00147 83 f8 3d cmp eax, 61 ; 0000003dH 0014a 0f 84 13 01 00 00 je $LN8@Decode ; 346 : { ; 347 : if ( m_DecoderTable[ character_2 ] == BASE64_UNKNOWN_VALUE ) 00150 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 00155 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 0015a 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0015f 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 00164 75 11 jne SHORT $LN10@Decode ; 348 : { ; 349 : destination.RemoveAll(); 00166 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0016b e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 350 : return( FALSE ); 00170 33 c0 xor eax, eax 00172 e9 a6 02 00 00 jmp $LN1@Decode $LN10@Decode: ; 351 : } ; 352 : ; 353 : character_3 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode ); 00177 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 0017c 48 83 c0 08 add rax, 8 00180 44 8b 4c 24 2c mov r9d, DWORD PTR number_of_bytes_to_decode$[rsp] 00185 4c 8d 44 24 30 lea r8, QWORD PTR index$[rsp] 0018a 48 8b d0 mov rdx, rax 0018d 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 00192 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 00197 88 44 24 20 mov BYTE PTR character_3$[rsp], al ; 354 : ; 355 : if ( character_3 != END_OF_BASE64_ENCODED_DATA ) 0019b 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 001a0 83 f8 3d cmp eax, 61 ; 0000003dH 001a3 0f 84 b3 00 00 00 je $LN11@Decode ; 356 : { ; 357 : if ( m_DecoderTable[ character_3 ] == BASE64_UNKNOWN_VALUE ) 001a9 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 001ae 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 001b3 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 001b8 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 001bd 75 11 jne SHORT $LN13@Decode ; 358 : { ; 359 : destination.RemoveAll(); 001bf 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 001c4 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 360 : return( FALSE ); 001c9 33 c0 xor eax, eax 001cb e9 4d 02 00 00 jmp $LN1@Decode $LN13@Decode: ; 361 : } ; 362 : ; 363 : character_4 = __get_character( reinterpret_cast< const BYTE * >( input_buffer ), m_DecoderTable, index, number_of_bytes_to_decode ); 001d0 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 001d5 48 83 c0 08 add rax, 8 001d9 44 8b 4c 24 2c mov r9d, DWORD PTR number_of_bytes_to_decode$[rsp] 001de 4c 8d 44 24 30 lea r8, QWORD PTR index$[rsp] 001e3 48 8b d0 mov rdx, rax 001e6 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 001eb e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 001f0 88 44 24 21 mov BYTE PTR character_4$[rsp], al ; 364 : ; 365 : if ( character_4 != END_OF_BASE64_ENCODED_DATA ) 001f4 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 001f9 83 f8 3d cmp eax, 61 ; 0000003dH 001fc 74 27 je SHORT $LN14@Decode ; 366 : { ; 367 : if ( m_DecoderTable[ character_4 ] == BASE64_UNKNOWN_VALUE ) 001fe 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 00203 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00208 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0020d 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 00212 75 11 jne SHORT $LN15@Decode ; 368 : { ; 369 : destination.RemoveAll(); 00214 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 00219 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 370 : return( FALSE ); 0021e 33 c0 xor eax, eax 00220 e9 f8 01 00 00 jmp $LN1@Decode $LN15@Decode: $LN14@Decode: ; 371 : } ; 372 : } ; 373 : ; 374 : if ( character_2 == BASE64_END_OF_BUFFER || ; 375 : character_3 == BASE64_END_OF_BUFFER || 00225 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 0022a 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 0022f 74 18 je SHORT $LN17@Decode 00231 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 00236 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 0023b 74 0c je SHORT $LN17@Decode 0023d 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 00242 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 00247 75 11 jne SHORT $LN16@Decode $LN17@Decode: ; 376 : character_4 == BASE64_END_OF_BUFFER ) ; 377 : { ; 378 : destination.RemoveAll(); 00249 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0024e e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 379 : return( FALSE ); 00253 33 c0 xor eax, eax 00255 e9 c3 01 00 00 jmp $LN1@Decode $LN16@Decode: ; 380 : } ; 381 : } 0025a eb 05 jmp SHORT $LN12@Decode $LN11@Decode: ; 382 : else ; 383 : { ; 384 : character_4 = END_OF_BASE64_ENCODED_DATA; 0025c c6 44 24 21 3d mov BYTE PTR character_4$[rsp], 61 ; 0000003dH $LN12@Decode: ; 385 : } ; 386 : } 00261 eb 0a jmp SHORT $LN9@Decode $LN8@Decode: ; 387 : else ; 388 : { ; 389 : character_3 = END_OF_BASE64_ENCODED_DATA; 00263 c6 44 24 20 3d mov BYTE PTR character_3$[rsp], 61 ; 0000003dH ; 390 : character_4 = END_OF_BASE64_ENCODED_DATA; 00268 c6 44 24 21 3d mov BYTE PTR character_4$[rsp], 61 ; 0000003dH $LN9@Decode: ; 391 : } ; 392 : } 0026d eb 0f jmp SHORT $LN6@Decode $LN5@Decode: ; 393 : else ; 394 : { ; 395 : character_2 = END_OF_BASE64_ENCODED_DATA; 0026f c6 44 24 22 3d mov BYTE PTR character_2$[rsp], 61 ; 0000003dH ; 396 : character_3 = END_OF_BASE64_ENCODED_DATA; 00274 c6 44 24 20 3d mov BYTE PTR character_3$[rsp], 61 ; 0000003dH ; 397 : character_4 = END_OF_BASE64_ENCODED_DATA; 00279 c6 44 24 21 3d mov BYTE PTR character_4$[rsp], 61 ; 0000003dH $LN6@Decode: ; 398 : } ; 399 : ; 400 : if ( character_1 == END_OF_BASE64_ENCODED_DATA || 0027e 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 00283 83 f8 3d cmp eax, 61 ; 0000003dH 00286 74 0a je SHORT $LN19@Decode 00288 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 0028d 83 f8 3d cmp eax, 61 ; 0000003dH 00290 75 21 jne SHORT $LN18@Decode $LN19@Decode: ; 401 : character_2 == END_OF_BASE64_ENCODED_DATA ) ; 402 : { ; 403 : destination.SetSize( add_index ); 00292 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00296 49 c7 c0 ff ff ff ff mov r8, -1 0029d 8b d0 mov edx, eax 0029f 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 002a4 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 404 : return( TRUE ); 002a9 b8 01 00 00 00 mov eax, 1 002ae e9 6a 01 00 00 jmp $LN1@Decode $LN18@Decode: ; 405 : } ; 406 : ; 407 : character_1 = m_DecoderTable[ character_1 ]; 002b3 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 002b8 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 002bd 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 002c2 88 44 24 23 mov BYTE PTR character_1$[rsp], al ; 408 : character_2 = m_DecoderTable[ character_2 ]; 002c6 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 002cb 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 002d0 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 002d5 88 44 24 22 mov BYTE PTR character_2$[rsp], al ; 409 : ; 410 : byte_to_add = static_cast< BYTE>( ( ( character_1 << 2 ) | ( ( character_2 & 0x30 ) >> 4 ) ) ); 002d9 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 002de c1 e0 02 shl eax, 2 002e1 0f b6 4c 24 22 movzx ecx, BYTE PTR character_2$[rsp] 002e6 83 e1 30 and ecx, 48 ; 00000030H 002e9 c1 f9 04 sar ecx, 4 002ec 0b c1 or eax, ecx 002ee 88 44 24 24 mov BYTE PTR byte_to_add$[rsp], al ; 411 : ; 412 : destination.SetAt( add_index, byte_to_add ); 002f2 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 002f6 44 0f b6 44 24 24 movzx r8d, BYTE PTR byte_to_add$[rsp] 002fc 8b d0 mov edx, eax 002fe 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 00303 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 413 : add_index++; 00308 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 0030c ff c0 inc eax 0030e 89 44 24 28 mov DWORD PTR add_index$[rsp], eax ; 414 : ; 415 : if ( character_3 == END_OF_BASE64_ENCODED_DATA ) 00312 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 00317 83 f8 3d cmp eax, 61 ; 0000003dH 0031a 75 21 jne SHORT $LN20@Decode ; 416 : { ; 417 : destination.SetSize( add_index ); 0031c 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00320 49 c7 c0 ff ff ff ff mov r8, -1 00327 8b d0 mov edx, eax 00329 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0032e e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 418 : return( TRUE ); 00333 b8 01 00 00 00 mov eax, 1 00338 e9 e0 00 00 00 jmp $LN1@Decode $LN20@Decode: ; 419 : } ; 420 : ; 421 : character_3 = m_DecoderTable[ character_3 ]; 0033d 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 00342 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00347 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0034c 88 44 24 20 mov BYTE PTR character_3$[rsp], al ; 422 : ; 423 : byte_to_add = static_cast< BYTE >( ( ( ( ( character_2 & 0x0F ) << 4 ) | ( ( character_3 & 0x3C ) >> 2 ) ) ) ); 00350 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 00355 83 e0 0f and eax, 15 00358 c1 e0 04 shl eax, 4 0035b 0f b6 4c 24 20 movzx ecx, BYTE PTR character_3$[rsp] 00360 83 e1 3c and ecx, 60 ; 0000003cH 00363 c1 f9 02 sar ecx, 2 00366 0b c1 or eax, ecx 00368 88 44 24 24 mov BYTE PTR byte_to_add$[rsp], al ; 424 : ; 425 : destination.SetAt( add_index, byte_to_add ); 0036c 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00370 44 0f b6 44 24 24 movzx r8d, BYTE PTR byte_to_add$[rsp] 00376 8b d0 mov edx, eax 00378 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0037d e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 426 : add_index++; 00382 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00386 ff c0 inc eax 00388 89 44 24 28 mov DWORD PTR add_index$[rsp], eax ; 427 : ; 428 : if ( character_4 == END_OF_BASE64_ENCODED_DATA ) 0038c 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 00391 83 f8 3d cmp eax, 61 ; 0000003dH 00394 75 1e jne SHORT $LN21@Decode ; 429 : { ; 430 : destination.SetSize( add_index ); 00396 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 0039a 49 c7 c0 ff ff ff ff mov r8, -1 003a1 8b d0 mov edx, eax 003a3 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 003a8 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 431 : return( TRUE ); 003ad b8 01 00 00 00 mov eax, 1 003b2 eb 69 jmp SHORT $LN1@Decode $LN21@Decode: ; 432 : } ; 433 : ; 434 : character_4 = m_DecoderTable[ character_4 ]; 003b4 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 003b9 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 003be 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 003c3 88 44 24 21 mov BYTE PTR character_4$[rsp], al ; 435 : ; 436 : byte_to_add = static_cast< BYTE >( ( ( ( character_3 & 0x03 ) << 6 ) | character_4 ) ); 003c7 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 003cc 83 e0 03 and eax, 3 003cf c1 e0 06 shl eax, 6 003d2 0f b6 4c 24 21 movzx ecx, BYTE PTR character_4$[rsp] 003d7 0b c1 or eax, ecx 003d9 88 44 24 24 mov BYTE PTR byte_to_add$[rsp], al ; 437 : ; 438 : destination.SetAt( add_index, byte_to_add ); 003dd 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 003e1 44 0f b6 44 24 24 movzx r8d, BYTE PTR byte_to_add$[rsp] 003e7 8b d0 mov edx, eax 003e9 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 003ee e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 439 : add_index++; 003f3 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 003f7 ff c0 inc eax 003f9 89 44 24 28 mov DWORD PTR add_index$[rsp], eax ; 440 : } 003fd e9 b5 fc ff ff jmp $LN2@Decode $LN3@Decode: ; 441 : ; 442 : destination.SetSize( add_index ); 00402 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00406 49 c7 c0 ff ff ff ff mov r8, -1 0040d 8b d0 mov edx, eax 0040f 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 00414 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 443 : ; 444 : return( return_value ); 00419 8b 44 24 40 mov eax, DWORD PTR return_value$[rsp] $LN1@Decode: ; 445 : } 0041d 48 83 c4 58 add rsp, 88 ; 00000058H 00421 c3 ret 0 ?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z ENDP ; CBase64Coding::Decode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z _TEXT SEGMENT character_3$ = 32 character_4$ = 33 character_2$ = 34 character_1$ = 35 byte_to_add$ = 36 add_index$ = 40 number_of_bytes_to_decode$ = 44 index$ = 48 input_buffer$ = 56 return_value$ = 64 this$ = 96 source$ = 104 destination$ = 112 ?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z PROC ; CBase64Coding::Decode, COMDAT ; 156 : { $LN23: 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 48 83 ec 58 sub rsp, 88 ; 00000058H ; 157 : ; 158 : if ( m_DecoderTable[ 0 ] == 0x00 ) 00013 b8 01 00 00 00 mov eax, 1 00018 48 6b c0 00 imul rax, rax, 0 0001c 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00021 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00026 85 c0 test eax, eax 00028 75 0f jne SHORT $LN4@Decode ; 159 : { ; 160 : m_InitializeDecoderTable(); 0002a 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 0002f 48 8b 00 mov rax, QWORD PTR [rax] 00032 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00037 ff 10 call QWORD PTR [rax] $LN4@Decode: ; 161 : } ; 162 : ; 163 : BOOL return_value = FALSE; 00039 c7 44 24 40 00 00 00 00 mov DWORD PTR return_value$[rsp], 0 ; 164 : ; 165 : BYTE byte_to_add = 0; 00041 c6 44 24 24 00 mov BYTE PTR byte_to_add$[rsp], 0 ; 166 : BYTE character_1 = 0; 00046 c6 44 24 23 00 mov BYTE PTR character_1$[rsp], 0 ; 167 : BYTE character_2 = 0; 0004b c6 44 24 22 00 mov BYTE PTR character_2$[rsp], 0 ; 168 : BYTE character_3 = 0; 00050 c6 44 24 20 00 mov BYTE PTR character_3$[rsp], 0 ; 169 : BYTE character_4 = 0; 00055 c6 44 24 21 00 mov BYTE PTR character_4$[rsp], 0 ; 170 : ; 171 : int index = 0; 0005a c7 44 24 30 00 00 00 00 mov DWORD PTR index$[rsp], 0 ; 172 : int number_of_bytes_to_decode = (int)source.GetSize(); 00062 48 8b 4c 24 68 mov rcx, QWORD PTR source$[rsp] 00067 e8 00 00 00 00 call ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize 0006c 89 44 24 2c mov DWORD PTR number_of_bytes_to_decode$[rsp], eax ; 173 : ; 174 : DWORD add_index = (DWORD) ( (double) number_of_bytes_to_decode * (double) 0.75 ) + 1; 00070 f2 0f 2a 44 24 2c cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_decode$[rsp] 00076 f2 0f 59 05 00 00 00 00 mulsd xmm0, QWORD PTR __real@3fe8000000000000 0007e f2 48 0f 2c c0 cvttsd2si rax, xmm0 00083 ff c0 inc eax 00085 89 44 24 28 mov DWORD PTR add_index$[rsp], eax ; 175 : ; 176 : destination.SetSize( add_index ); 00089 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 0008d 49 c7 c0 ff ff ff ff mov r8, -1 00094 8b d0 mov edx, eax 00096 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0009b e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 177 : add_index = 0; 000a0 c7 44 24 28 00 00 00 00 mov DWORD PTR add_index$[rsp], 0 ; 178 : ; 179 : // Since we're decoding, we are most likely in a performance-minded ; 180 : // part of an application, let's go for a speedy method for accessing ; 181 : // the source data. ; 182 : ; 183 : const BYTE * input_buffer = source.GetData(); 000a8 48 8b 4c 24 68 mov rcx, QWORD PTR source$[rsp] 000ad e8 00 00 00 00 call ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData 000b2 48 89 44 24 38 mov QWORD PTR input_buffer$[rsp], rax $LN2@Decode: ; 184 : ; 185 : while( index < number_of_bytes_to_decode ) 000b7 8b 44 24 2c mov eax, DWORD PTR number_of_bytes_to_decode$[rsp] 000bb 39 44 24 30 cmp DWORD PTR index$[rsp], eax 000bf 0f 8d 3d 03 00 00 jge $LN3@Decode ; 186 : { ; 187 : character_1 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode ); 000c5 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 000ca 48 83 c0 08 add rax, 8 000ce 44 8b 4c 24 2c mov r9d, DWORD PTR number_of_bytes_to_decode$[rsp] 000d3 4c 8d 44 24 30 lea r8, QWORD PTR index$[rsp] 000d8 48 8b d0 mov rdx, rax 000db 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 000e0 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 000e5 88 44 24 23 mov BYTE PTR character_1$[rsp], al ; 188 : ; 189 : if ( character_1 != END_OF_BASE64_ENCODED_DATA ) 000e9 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 000ee 83 f8 3d cmp eax, 61 ; 0000003dH 000f1 0f 84 78 01 00 00 je $LN5@Decode ; 190 : { ; 191 : if ( m_DecoderTable[ character_1 ] == BASE64_UNKNOWN_VALUE ) 000f7 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 000fc 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00101 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00106 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 0010b 75 11 jne SHORT $LN7@Decode ; 192 : { ; 193 : destination.RemoveAll(); 0010d 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 00112 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 194 : return( FALSE ); 00117 33 c0 xor eax, eax 00119 e9 ff 02 00 00 jmp $LN1@Decode $LN7@Decode: ; 195 : } ; 196 : ; 197 : character_2 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode ); 0011e 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 00123 48 83 c0 08 add rax, 8 00127 44 8b 4c 24 2c mov r9d, DWORD PTR number_of_bytes_to_decode$[rsp] 0012c 4c 8d 44 24 30 lea r8, QWORD PTR index$[rsp] 00131 48 8b d0 mov rdx, rax 00134 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 00139 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 0013e 88 44 24 22 mov BYTE PTR character_2$[rsp], al ; 198 : ; 199 : if ( character_2 != END_OF_BASE64_ENCODED_DATA ) 00142 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 00147 83 f8 3d cmp eax, 61 ; 0000003dH 0014a 0f 84 13 01 00 00 je $LN8@Decode ; 200 : { ; 201 : if ( m_DecoderTable[ character_2 ] == BASE64_UNKNOWN_VALUE ) 00150 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 00155 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 0015a 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0015f 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 00164 75 11 jne SHORT $LN10@Decode ; 202 : { ; 203 : destination.RemoveAll(); 00166 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0016b e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 204 : return( FALSE ); 00170 33 c0 xor eax, eax 00172 e9 a6 02 00 00 jmp $LN1@Decode $LN10@Decode: ; 205 : } ; 206 : ; 207 : character_3 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode ); 00177 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 0017c 48 83 c0 08 add rax, 8 00180 44 8b 4c 24 2c mov r9d, DWORD PTR number_of_bytes_to_decode$[rsp] 00185 4c 8d 44 24 30 lea r8, QWORD PTR index$[rsp] 0018a 48 8b d0 mov rdx, rax 0018d 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 00192 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 00197 88 44 24 20 mov BYTE PTR character_3$[rsp], al ; 208 : ; 209 : if ( character_3 != END_OF_BASE64_ENCODED_DATA ) 0019b 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 001a0 83 f8 3d cmp eax, 61 ; 0000003dH 001a3 0f 84 b3 00 00 00 je $LN11@Decode ; 210 : { ; 211 : if ( m_DecoderTable[ character_3 ] == BASE64_UNKNOWN_VALUE ) 001a9 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 001ae 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 001b3 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 001b8 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 001bd 75 11 jne SHORT $LN13@Decode ; 212 : { ; 213 : destination.RemoveAll(); 001bf 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 001c4 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 214 : return( FALSE ); 001c9 33 c0 xor eax, eax 001cb e9 4d 02 00 00 jmp $LN1@Decode $LN13@Decode: ; 215 : } ; 216 : ; 217 : character_4 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode ); 001d0 48 8b 44 24 60 mov rax, QWORD PTR this$[rsp] 001d5 48 83 c0 08 add rax, 8 001d9 44 8b 4c 24 2c mov r9d, DWORD PTR number_of_bytes_to_decode$[rsp] 001de 4c 8d 44 24 30 lea r8, QWORD PTR index$[rsp] 001e3 48 8b d0 mov rdx, rax 001e6 48 8b 4c 24 38 mov rcx, QWORD PTR input_buffer$[rsp] 001eb e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 001f0 88 44 24 21 mov BYTE PTR character_4$[rsp], al ; 218 : ; 219 : if ( character_4 != END_OF_BASE64_ENCODED_DATA ) 001f4 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 001f9 83 f8 3d cmp eax, 61 ; 0000003dH 001fc 74 27 je SHORT $LN14@Decode ; 220 : { ; 221 : if ( m_DecoderTable[ character_4 ] == BASE64_UNKNOWN_VALUE ) 001fe 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 00203 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00208 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0020d 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 00212 75 11 jne SHORT $LN15@Decode ; 222 : { ; 223 : destination.RemoveAll(); 00214 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 00219 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 224 : return( FALSE ); 0021e 33 c0 xor eax, eax 00220 e9 f8 01 00 00 jmp $LN1@Decode $LN15@Decode: $LN14@Decode: ; 225 : } ; 226 : } ; 227 : ; 228 : if ( character_2 == BASE64_END_OF_BUFFER || ; 229 : character_3 == BASE64_END_OF_BUFFER || 00225 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 0022a 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 0022f 74 18 je SHORT $LN17@Decode 00231 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 00236 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 0023b 74 0c je SHORT $LN17@Decode 0023d 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 00242 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 00247 75 11 jne SHORT $LN16@Decode $LN17@Decode: ; 230 : character_4 == BASE64_END_OF_BUFFER ) ; 231 : { ; 232 : destination.RemoveAll(); 00249 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0024e e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 233 : return( FALSE ); 00253 33 c0 xor eax, eax 00255 e9 c3 01 00 00 jmp $LN1@Decode $LN16@Decode: ; 234 : } ; 235 : } 0025a eb 05 jmp SHORT $LN12@Decode $LN11@Decode: ; 236 : else ; 237 : { ; 238 : character_4 = END_OF_BASE64_ENCODED_DATA; 0025c c6 44 24 21 3d mov BYTE PTR character_4$[rsp], 61 ; 0000003dH $LN12@Decode: ; 239 : } ; 240 : } 00261 eb 0a jmp SHORT $LN9@Decode $LN8@Decode: ; 241 : else ; 242 : { ; 243 : character_3 = END_OF_BASE64_ENCODED_DATA; 00263 c6 44 24 20 3d mov BYTE PTR character_3$[rsp], 61 ; 0000003dH ; 244 : character_4 = END_OF_BASE64_ENCODED_DATA; 00268 c6 44 24 21 3d mov BYTE PTR character_4$[rsp], 61 ; 0000003dH $LN9@Decode: ; 245 : } ; 246 : } 0026d eb 0f jmp SHORT $LN6@Decode $LN5@Decode: ; 247 : else ; 248 : { ; 249 : character_2 = END_OF_BASE64_ENCODED_DATA; 0026f c6 44 24 22 3d mov BYTE PTR character_2$[rsp], 61 ; 0000003dH ; 250 : character_3 = END_OF_BASE64_ENCODED_DATA; 00274 c6 44 24 20 3d mov BYTE PTR character_3$[rsp], 61 ; 0000003dH ; 251 : character_4 = END_OF_BASE64_ENCODED_DATA; 00279 c6 44 24 21 3d mov BYTE PTR character_4$[rsp], 61 ; 0000003dH $LN6@Decode: ; 252 : } ; 253 : ; 254 : if ( character_1 == END_OF_BASE64_ENCODED_DATA || 0027e 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 00283 83 f8 3d cmp eax, 61 ; 0000003dH 00286 74 0a je SHORT $LN19@Decode 00288 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 0028d 83 f8 3d cmp eax, 61 ; 0000003dH 00290 75 21 jne SHORT $LN18@Decode $LN19@Decode: ; 255 : character_2 == END_OF_BASE64_ENCODED_DATA ) ; 256 : { ; 257 : destination.SetSize( add_index ); 00292 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00296 49 c7 c0 ff ff ff ff mov r8, -1 0029d 8b d0 mov edx, eax 0029f 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 002a4 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 258 : return( TRUE ); 002a9 b8 01 00 00 00 mov eax, 1 002ae e9 6a 01 00 00 jmp $LN1@Decode $LN18@Decode: ; 259 : } ; 260 : ; 261 : character_1 = m_DecoderTable[ character_1 ]; 002b3 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 002b8 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 002bd 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 002c2 88 44 24 23 mov BYTE PTR character_1$[rsp], al ; 262 : character_2 = m_DecoderTable[ character_2 ]; 002c6 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 002cb 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 002d0 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 002d5 88 44 24 22 mov BYTE PTR character_2$[rsp], al ; 263 : ; 264 : byte_to_add = static_cast< BYTE>( ( ( character_1 << 2 ) | ( ( character_2 & 0x30 ) >> 4 ) ) ); 002d9 0f b6 44 24 23 movzx eax, BYTE PTR character_1$[rsp] 002de c1 e0 02 shl eax, 2 002e1 0f b6 4c 24 22 movzx ecx, BYTE PTR character_2$[rsp] 002e6 83 e1 30 and ecx, 48 ; 00000030H 002e9 c1 f9 04 sar ecx, 4 002ec 0b c1 or eax, ecx 002ee 88 44 24 24 mov BYTE PTR byte_to_add$[rsp], al ; 265 : ; 266 : destination.SetAt( add_index, byte_to_add ); 002f2 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 002f6 44 0f b6 44 24 24 movzx r8d, BYTE PTR byte_to_add$[rsp] 002fc 8b d0 mov edx, eax 002fe 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 00303 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 267 : add_index++; 00308 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 0030c ff c0 inc eax 0030e 89 44 24 28 mov DWORD PTR add_index$[rsp], eax ; 268 : ; 269 : if ( character_3 == END_OF_BASE64_ENCODED_DATA ) 00312 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 00317 83 f8 3d cmp eax, 61 ; 0000003dH 0031a 75 21 jne SHORT $LN20@Decode ; 270 : { ; 271 : destination.SetSize( add_index ); 0031c 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00320 49 c7 c0 ff ff ff ff mov r8, -1 00327 8b d0 mov edx, eax 00329 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0032e e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 272 : return( TRUE ); 00333 b8 01 00 00 00 mov eax, 1 00338 e9 e0 00 00 00 jmp $LN1@Decode $LN20@Decode: ; 273 : } ; 274 : ; 275 : character_3 = m_DecoderTable[ character_3 ]; 0033d 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 00342 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 00347 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0034c 88 44 24 20 mov BYTE PTR character_3$[rsp], al ; 276 : ; 277 : byte_to_add = static_cast< BYTE >( ( ( ( ( character_2 & 0x0F ) << 4 ) | ( ( character_3 & 0x3C ) >> 2 ) ) ) ); 00350 0f b6 44 24 22 movzx eax, BYTE PTR character_2$[rsp] 00355 83 e0 0f and eax, 15 00358 c1 e0 04 shl eax, 4 0035b 0f b6 4c 24 20 movzx ecx, BYTE PTR character_3$[rsp] 00360 83 e1 3c and ecx, 60 ; 0000003cH 00363 c1 f9 02 sar ecx, 2 00366 0b c1 or eax, ecx 00368 88 44 24 24 mov BYTE PTR byte_to_add$[rsp], al ; 278 : ; 279 : destination.SetAt( add_index, byte_to_add ); 0036c 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00370 44 0f b6 44 24 24 movzx r8d, BYTE PTR byte_to_add$[rsp] 00376 8b d0 mov edx, eax 00378 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 0037d e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 280 : add_index++; 00382 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00386 ff c0 inc eax 00388 89 44 24 28 mov DWORD PTR add_index$[rsp], eax ; 281 : ; 282 : if ( character_4 == END_OF_BASE64_ENCODED_DATA ) 0038c 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 00391 83 f8 3d cmp eax, 61 ; 0000003dH 00394 75 1e jne SHORT $LN21@Decode ; 283 : { ; 284 : destination.SetSize( add_index ); 00396 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 0039a 49 c7 c0 ff ff ff ff mov r8, -1 003a1 8b d0 mov edx, eax 003a3 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 003a8 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 285 : return( TRUE ); 003ad b8 01 00 00 00 mov eax, 1 003b2 eb 69 jmp SHORT $LN1@Decode $LN21@Decode: ; 286 : } ; 287 : ; 288 : character_4 = m_DecoderTable[ character_4 ]; 003b4 0f b6 44 24 21 movzx eax, BYTE PTR character_4$[rsp] 003b9 48 8b 4c 24 60 mov rcx, QWORD PTR this$[rsp] 003be 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 003c3 88 44 24 21 mov BYTE PTR character_4$[rsp], al ; 289 : ; 290 : byte_to_add = static_cast< BYTE >( ( ( ( character_3 & 0x03 ) << 6 ) | character_4 ) ); 003c7 0f b6 44 24 20 movzx eax, BYTE PTR character_3$[rsp] 003cc 83 e0 03 and eax, 3 003cf c1 e0 06 shl eax, 6 003d2 0f b6 4c 24 21 movzx ecx, BYTE PTR character_4$[rsp] 003d7 0b c1 or eax, ecx 003d9 88 44 24 24 mov BYTE PTR byte_to_add$[rsp], al ; 291 : ; 292 : destination.SetAt( add_index, byte_to_add ); 003dd 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 003e1 44 0f b6 44 24 24 movzx r8d, BYTE PTR byte_to_add$[rsp] 003e7 8b d0 mov edx, eax 003e9 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 003ee e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 293 : add_index++; 003f3 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 003f7 ff c0 inc eax 003f9 89 44 24 28 mov DWORD PTR add_index$[rsp], eax ; 294 : } 003fd e9 b5 fc ff ff jmp $LN2@Decode $LN3@Decode: ; 295 : ; 296 : destination.SetSize( add_index ); 00402 8b 44 24 28 mov eax, DWORD PTR add_index$[rsp] 00406 49 c7 c0 ff ff ff ff mov r8, -1 0040d 8b d0 mov edx, eax 0040f 48 8b 4c 24 70 mov rcx, QWORD PTR destination$[rsp] 00414 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 297 : ; 298 : return( return_value ); 00419 8b 44 24 40 mov eax, DWORD PTR return_value$[rsp] $LN1@Decode: ; 299 : } 0041d 48 83 c4 58 add rsp, 88 ; 00000058H 00421 c3 ret 0 ?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ENDP ; CBase64Coding::Decode _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ??1CBase64Coding@@UEAA@XZ _TEXT SEGMENT this$ = 8 ??1CBase64Coding@@UEAA@XZ PROC ; CBase64Coding::~CBase64Coding, COMDAT ; 66 : { 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 8b 44 24 08 mov rax, QWORD PTR this$[rsp] 0000a 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_7CBase64Coding@@6B@ 00011 48 89 08 mov QWORD PTR [rax], rcx ; 67 : } 00014 c3 ret 0 ??1CBase64Coding@@UEAA@XZ ENDP ; CBase64Coding::~CBase64Coding _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ??0CBase64Coding@@QEAA@XZ _TEXT SEGMENT this$ = 8 ??0CBase64Coding@@QEAA@XZ PROC ; CBase64Coding::CBase64Coding, COMDAT ; 61 : { 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 8b 44 24 08 mov rax, QWORD PTR this$[rsp] 0000a 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_7CBase64Coding@@6B@ 00011 48 89 08 mov QWORD PTR [rax], rcx ; 62 : m_DecoderTable[ 0 ] = 0x00; 00014 b8 01 00 00 00 mov eax, 1 00019 48 6b c0 00 imul rax, rax, 0 0001d 48 8b 4c 24 08 mov rcx, QWORD PTR this$[rsp] 00022 c6 44 01 08 00 mov BYTE PTR [rcx+rax+8], 0 ; 63 : } 00027 48 8b 44 24 08 mov rax, QWORD PTR this$[rsp] 0002c c3 ret 0 ??0CBase64Coding@@QEAA@XZ ENDP ; CBase64Coding::CBase64Coding _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ _TEXT SEGMENT this$ = 48 ?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ PROC ; CBase64Coding::m_InitializeDecoderTable, COMDAT ; 70 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 83 ec 28 sub rsp, 40 ; 00000028H ; 71 : ; 72 : // Fill the table with an invalid value. If the decoder receives ; 73 : // this value as a result of a lookup, it knows that the input ; 74 : // character must have been an invalid one. ; 75 : ; 76 : ::memset( m_DecoderTable, BASE64_UNKNOWN_VALUE, sizeof( m_DecoderTable ) ); 00009 48 8b 44 24 30 mov rax, QWORD PTR this$[rsp] 0000e 48 83 c0 08 add rax, 8 00012 41 b8 00 01 00 00 mov r8d, 256 ; 00000100H 00018 ba ff 00 00 00 mov edx, 255 ; 000000ffH 0001d 48 8b c8 mov rcx, rax 00020 e8 00 00 00 00 call memset ; 77 : ; 78 : // Now let's fill the table with translatable values ; 79 : // The table is loaded with table[ ASCII_VALUE ] = TRANSLATED_VALUE ; 80 : ; 81 : m_DecoderTable[ 43 ] = 62; 00025 b8 01 00 00 00 mov eax, 1 0002a 48 6b c0 2b imul rax, rax, 43 ; 0000002bH 0002e 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00033 c6 44 01 08 3e mov BYTE PTR [rcx+rax+8], 62 ; 0000003eH ; 82 : m_DecoderTable[ 47 ] = 63; 00038 b8 01 00 00 00 mov eax, 1 0003d 48 6b c0 2f imul rax, rax, 47 ; 0000002fH 00041 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00046 c6 44 01 08 3f mov BYTE PTR [rcx+rax+8], 63 ; 0000003fH ; 83 : m_DecoderTable[ 48 ] = 52; 0004b b8 01 00 00 00 mov eax, 1 00050 48 6b c0 30 imul rax, rax, 48 ; 00000030H 00054 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00059 c6 44 01 08 34 mov BYTE PTR [rcx+rax+8], 52 ; 00000034H ; 84 : m_DecoderTable[ 49 ] = 53; 0005e b8 01 00 00 00 mov eax, 1 00063 48 6b c0 31 imul rax, rax, 49 ; 00000031H 00067 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0006c c6 44 01 08 35 mov BYTE PTR [rcx+rax+8], 53 ; 00000035H ; 85 : m_DecoderTable[ 50 ] = 54; 00071 b8 01 00 00 00 mov eax, 1 00076 48 6b c0 32 imul rax, rax, 50 ; 00000032H 0007a 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0007f c6 44 01 08 36 mov BYTE PTR [rcx+rax+8], 54 ; 00000036H ; 86 : m_DecoderTable[ 51 ] = 55; 00084 b8 01 00 00 00 mov eax, 1 00089 48 6b c0 33 imul rax, rax, 51 ; 00000033H 0008d 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00092 c6 44 01 08 37 mov BYTE PTR [rcx+rax+8], 55 ; 00000037H ; 87 : m_DecoderTable[ 52 ] = 56; 00097 b8 01 00 00 00 mov eax, 1 0009c 48 6b c0 34 imul rax, rax, 52 ; 00000034H 000a0 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 000a5 c6 44 01 08 38 mov BYTE PTR [rcx+rax+8], 56 ; 00000038H ; 88 : m_DecoderTable[ 53 ] = 57; 000aa b8 01 00 00 00 mov eax, 1 000af 48 6b c0 35 imul rax, rax, 53 ; 00000035H 000b3 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 000b8 c6 44 01 08 39 mov BYTE PTR [rcx+rax+8], 57 ; 00000039H ; 89 : m_DecoderTable[ 54 ] = 58; 000bd b8 01 00 00 00 mov eax, 1 000c2 48 6b c0 36 imul rax, rax, 54 ; 00000036H 000c6 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 000cb c6 44 01 08 3a mov BYTE PTR [rcx+rax+8], 58 ; 0000003aH ; 90 : m_DecoderTable[ 55 ] = 59; 000d0 b8 01 00 00 00 mov eax, 1 000d5 48 6b c0 37 imul rax, rax, 55 ; 00000037H 000d9 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 000de c6 44 01 08 3b mov BYTE PTR [rcx+rax+8], 59 ; 0000003bH ; 91 : m_DecoderTable[ 56 ] = 60; 000e3 b8 01 00 00 00 mov eax, 1 000e8 48 6b c0 38 imul rax, rax, 56 ; 00000038H 000ec 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 000f1 c6 44 01 08 3c mov BYTE PTR [rcx+rax+8], 60 ; 0000003cH ; 92 : m_DecoderTable[ 57 ] = 61; 000f6 b8 01 00 00 00 mov eax, 1 000fb 48 6b c0 39 imul rax, rax, 57 ; 00000039H 000ff 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00104 c6 44 01 08 3d mov BYTE PTR [rcx+rax+8], 61 ; 0000003dH ; 93 : m_DecoderTable[ 65 ] = 0; 00109 b8 01 00 00 00 mov eax, 1 0010e 48 6b c0 41 imul rax, rax, 65 ; 00000041H 00112 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00117 c6 44 01 08 00 mov BYTE PTR [rcx+rax+8], 0 ; 94 : m_DecoderTable[ 66 ] = 1; 0011c b8 01 00 00 00 mov eax, 1 00121 48 6b c0 42 imul rax, rax, 66 ; 00000042H 00125 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0012a c6 44 01 08 01 mov BYTE PTR [rcx+rax+8], 1 ; 95 : m_DecoderTable[ 67 ] = 2; 0012f b8 01 00 00 00 mov eax, 1 00134 48 6b c0 43 imul rax, rax, 67 ; 00000043H 00138 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0013d c6 44 01 08 02 mov BYTE PTR [rcx+rax+8], 2 ; 96 : m_DecoderTable[ 68 ] = 3; 00142 b8 01 00 00 00 mov eax, 1 00147 48 6b c0 44 imul rax, rax, 68 ; 00000044H 0014b 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00150 c6 44 01 08 03 mov BYTE PTR [rcx+rax+8], 3 ; 97 : m_DecoderTable[ 69 ] = 4; 00155 b8 01 00 00 00 mov eax, 1 0015a 48 6b c0 45 imul rax, rax, 69 ; 00000045H 0015e 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00163 c6 44 01 08 04 mov BYTE PTR [rcx+rax+8], 4 ; 98 : m_DecoderTable[ 70 ] = 5; 00168 b8 01 00 00 00 mov eax, 1 0016d 48 6b c0 46 imul rax, rax, 70 ; 00000046H 00171 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00176 c6 44 01 08 05 mov BYTE PTR [rcx+rax+8], 5 ; 99 : m_DecoderTable[ 71 ] = 6; 0017b b8 01 00 00 00 mov eax, 1 00180 48 6b c0 47 imul rax, rax, 71 ; 00000047H 00184 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00189 c6 44 01 08 06 mov BYTE PTR [rcx+rax+8], 6 ; 100 : m_DecoderTable[ 72 ] = 7; 0018e b8 01 00 00 00 mov eax, 1 00193 48 6b c0 48 imul rax, rax, 72 ; 00000048H 00197 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0019c c6 44 01 08 07 mov BYTE PTR [rcx+rax+8], 7 ; 101 : m_DecoderTable[ 73 ] = 8; 001a1 b8 01 00 00 00 mov eax, 1 001a6 48 6b c0 49 imul rax, rax, 73 ; 00000049H 001aa 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 001af c6 44 01 08 08 mov BYTE PTR [rcx+rax+8], 8 ; 102 : m_DecoderTable[ 74 ] = 9; 001b4 b8 01 00 00 00 mov eax, 1 001b9 48 6b c0 4a imul rax, rax, 74 ; 0000004aH 001bd 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 001c2 c6 44 01 08 09 mov BYTE PTR [rcx+rax+8], 9 ; 103 : m_DecoderTable[ 75 ] = 10; 001c7 b8 01 00 00 00 mov eax, 1 001cc 48 6b c0 4b imul rax, rax, 75 ; 0000004bH 001d0 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 001d5 c6 44 01 08 0a mov BYTE PTR [rcx+rax+8], 10 ; 104 : m_DecoderTable[ 76 ] = 11; 001da b8 01 00 00 00 mov eax, 1 001df 48 6b c0 4c imul rax, rax, 76 ; 0000004cH 001e3 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 001e8 c6 44 01 08 0b mov BYTE PTR [rcx+rax+8], 11 ; 105 : m_DecoderTable[ 77 ] = 12; 001ed b8 01 00 00 00 mov eax, 1 001f2 48 6b c0 4d imul rax, rax, 77 ; 0000004dH 001f6 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 001fb c6 44 01 08 0c mov BYTE PTR [rcx+rax+8], 12 ; 106 : m_DecoderTable[ 78 ] = 13; 00200 b8 01 00 00 00 mov eax, 1 00205 48 6b c0 4e imul rax, rax, 78 ; 0000004eH 00209 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0020e c6 44 01 08 0d mov BYTE PTR [rcx+rax+8], 13 ; 107 : m_DecoderTable[ 79 ] = 14; 00213 b8 01 00 00 00 mov eax, 1 00218 48 6b c0 4f imul rax, rax, 79 ; 0000004fH 0021c 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00221 c6 44 01 08 0e mov BYTE PTR [rcx+rax+8], 14 ; 108 : m_DecoderTable[ 80 ] = 15; 00226 b8 01 00 00 00 mov eax, 1 0022b 48 6b c0 50 imul rax, rax, 80 ; 00000050H 0022f 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00234 c6 44 01 08 0f mov BYTE PTR [rcx+rax+8], 15 ; 109 : m_DecoderTable[ 81 ] = 16; 00239 b8 01 00 00 00 mov eax, 1 0023e 48 6b c0 51 imul rax, rax, 81 ; 00000051H 00242 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00247 c6 44 01 08 10 mov BYTE PTR [rcx+rax+8], 16 ; 110 : m_DecoderTable[ 82 ] = 17; 0024c b8 01 00 00 00 mov eax, 1 00251 48 6b c0 52 imul rax, rax, 82 ; 00000052H 00255 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0025a c6 44 01 08 11 mov BYTE PTR [rcx+rax+8], 17 ; 111 : m_DecoderTable[ 83 ] = 18; 0025f b8 01 00 00 00 mov eax, 1 00264 48 6b c0 53 imul rax, rax, 83 ; 00000053H 00268 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0026d c6 44 01 08 12 mov BYTE PTR [rcx+rax+8], 18 ; 112 : m_DecoderTable[ 84 ] = 19; 00272 b8 01 00 00 00 mov eax, 1 00277 48 6b c0 54 imul rax, rax, 84 ; 00000054H 0027b 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00280 c6 44 01 08 13 mov BYTE PTR [rcx+rax+8], 19 ; 113 : m_DecoderTable[ 85 ] = 20; 00285 b8 01 00 00 00 mov eax, 1 0028a 48 6b c0 55 imul rax, rax, 85 ; 00000055H 0028e 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00293 c6 44 01 08 14 mov BYTE PTR [rcx+rax+8], 20 ; 114 : m_DecoderTable[ 86 ] = 21; 00298 b8 01 00 00 00 mov eax, 1 0029d 48 6b c0 56 imul rax, rax, 86 ; 00000056H 002a1 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 002a6 c6 44 01 08 15 mov BYTE PTR [rcx+rax+8], 21 ; 115 : m_DecoderTable[ 87 ] = 22; 002ab b8 01 00 00 00 mov eax, 1 002b0 48 6b c0 57 imul rax, rax, 87 ; 00000057H 002b4 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 002b9 c6 44 01 08 16 mov BYTE PTR [rcx+rax+8], 22 ; 116 : m_DecoderTable[ 88 ] = 23; 002be b8 01 00 00 00 mov eax, 1 002c3 48 6b c0 58 imul rax, rax, 88 ; 00000058H 002c7 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 002cc c6 44 01 08 17 mov BYTE PTR [rcx+rax+8], 23 ; 117 : m_DecoderTable[ 89 ] = 24; 002d1 b8 01 00 00 00 mov eax, 1 002d6 48 6b c0 59 imul rax, rax, 89 ; 00000059H 002da 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 002df c6 44 01 08 18 mov BYTE PTR [rcx+rax+8], 24 ; 118 : m_DecoderTable[ 90 ] = 25; 002e4 b8 01 00 00 00 mov eax, 1 002e9 48 6b c0 5a imul rax, rax, 90 ; 0000005aH 002ed 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 002f2 c6 44 01 08 19 mov BYTE PTR [rcx+rax+8], 25 ; 119 : m_DecoderTable[ 97 ] = 26; 002f7 b8 01 00 00 00 mov eax, 1 002fc 48 6b c0 61 imul rax, rax, 97 ; 00000061H 00300 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00305 c6 44 01 08 1a mov BYTE PTR [rcx+rax+8], 26 ; 120 : m_DecoderTable[ 98 ] = 27; 0030a b8 01 00 00 00 mov eax, 1 0030f 48 6b c0 62 imul rax, rax, 98 ; 00000062H 00313 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00318 c6 44 01 08 1b mov BYTE PTR [rcx+rax+8], 27 ; 121 : m_DecoderTable[ 99 ] = 28; 0031d b8 01 00 00 00 mov eax, 1 00322 48 6b c0 63 imul rax, rax, 99 ; 00000063H 00326 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0032b c6 44 01 08 1c mov BYTE PTR [rcx+rax+8], 28 ; 122 : m_DecoderTable[ 100 ] = 29; 00330 b8 01 00 00 00 mov eax, 1 00335 48 6b c0 64 imul rax, rax, 100 ; 00000064H 00339 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0033e c6 44 01 08 1d mov BYTE PTR [rcx+rax+8], 29 ; 123 : m_DecoderTable[ 101 ] = 30; 00343 b8 01 00 00 00 mov eax, 1 00348 48 6b c0 65 imul rax, rax, 101 ; 00000065H 0034c 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00351 c6 44 01 08 1e mov BYTE PTR [rcx+rax+8], 30 ; 124 : m_DecoderTable[ 102 ] = 31; 00356 b8 01 00 00 00 mov eax, 1 0035b 48 6b c0 66 imul rax, rax, 102 ; 00000066H 0035f 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00364 c6 44 01 08 1f mov BYTE PTR [rcx+rax+8], 31 ; 125 : m_DecoderTable[ 103 ] = 32; 00369 b8 01 00 00 00 mov eax, 1 0036e 48 6b c0 67 imul rax, rax, 103 ; 00000067H 00372 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00377 c6 44 01 08 20 mov BYTE PTR [rcx+rax+8], 32 ; 00000020H ; 126 : m_DecoderTable[ 104 ] = 33; 0037c b8 01 00 00 00 mov eax, 1 00381 48 6b c0 68 imul rax, rax, 104 ; 00000068H 00385 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0038a c6 44 01 08 21 mov BYTE PTR [rcx+rax+8], 33 ; 00000021H ; 127 : m_DecoderTable[ 105 ] = 34; 0038f b8 01 00 00 00 mov eax, 1 00394 48 6b c0 69 imul rax, rax, 105 ; 00000069H 00398 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0039d c6 44 01 08 22 mov BYTE PTR [rcx+rax+8], 34 ; 00000022H ; 128 : m_DecoderTable[ 106 ] = 35; 003a2 b8 01 00 00 00 mov eax, 1 003a7 48 6b c0 6a imul rax, rax, 106 ; 0000006aH 003ab 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 003b0 c6 44 01 08 23 mov BYTE PTR [rcx+rax+8], 35 ; 00000023H ; 129 : m_DecoderTable[ 107 ] = 36; 003b5 b8 01 00 00 00 mov eax, 1 003ba 48 6b c0 6b imul rax, rax, 107 ; 0000006bH 003be 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 003c3 c6 44 01 08 24 mov BYTE PTR [rcx+rax+8], 36 ; 00000024H ; 130 : m_DecoderTable[ 108 ] = 37; 003c8 b8 01 00 00 00 mov eax, 1 003cd 48 6b c0 6c imul rax, rax, 108 ; 0000006cH 003d1 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 003d6 c6 44 01 08 25 mov BYTE PTR [rcx+rax+8], 37 ; 00000025H ; 131 : m_DecoderTable[ 109 ] = 38; 003db b8 01 00 00 00 mov eax, 1 003e0 48 6b c0 6d imul rax, rax, 109 ; 0000006dH 003e4 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 003e9 c6 44 01 08 26 mov BYTE PTR [rcx+rax+8], 38 ; 00000026H ; 132 : m_DecoderTable[ 110 ] = 39; 003ee b8 01 00 00 00 mov eax, 1 003f3 48 6b c0 6e imul rax, rax, 110 ; 0000006eH 003f7 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 003fc c6 44 01 08 27 mov BYTE PTR [rcx+rax+8], 39 ; 00000027H ; 133 : m_DecoderTable[ 111 ] = 40; 00401 b8 01 00 00 00 mov eax, 1 00406 48 6b c0 6f imul rax, rax, 111 ; 0000006fH 0040a 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0040f c6 44 01 08 28 mov BYTE PTR [rcx+rax+8], 40 ; 00000028H ; 134 : m_DecoderTable[ 112 ] = 41; 00414 b8 01 00 00 00 mov eax, 1 00419 48 6b c0 70 imul rax, rax, 112 ; 00000070H 0041d 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00422 c6 44 01 08 29 mov BYTE PTR [rcx+rax+8], 41 ; 00000029H ; 135 : m_DecoderTable[ 113 ] = 42; 00427 b8 01 00 00 00 mov eax, 1 0042c 48 6b c0 71 imul rax, rax, 113 ; 00000071H 00430 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00435 c6 44 01 08 2a mov BYTE PTR [rcx+rax+8], 42 ; 0000002aH ; 136 : m_DecoderTable[ 114 ] = 43; 0043a b8 01 00 00 00 mov eax, 1 0043f 48 6b c0 72 imul rax, rax, 114 ; 00000072H 00443 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00448 c6 44 01 08 2b mov BYTE PTR [rcx+rax+8], 43 ; 0000002bH ; 137 : m_DecoderTable[ 115 ] = 44; 0044d b8 01 00 00 00 mov eax, 1 00452 48 6b c0 73 imul rax, rax, 115 ; 00000073H 00456 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0045b c6 44 01 08 2c mov BYTE PTR [rcx+rax+8], 44 ; 0000002cH ; 138 : m_DecoderTable[ 116 ] = 45; 00460 b8 01 00 00 00 mov eax, 1 00465 48 6b c0 74 imul rax, rax, 116 ; 00000074H 00469 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0046e c6 44 01 08 2d mov BYTE PTR [rcx+rax+8], 45 ; 0000002dH ; 139 : m_DecoderTable[ 117 ] = 46; 00473 b8 01 00 00 00 mov eax, 1 00478 48 6b c0 75 imul rax, rax, 117 ; 00000075H 0047c 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00481 c6 44 01 08 2e mov BYTE PTR [rcx+rax+8], 46 ; 0000002eH ; 140 : m_DecoderTable[ 118 ] = 47; 00486 b8 01 00 00 00 mov eax, 1 0048b 48 6b c0 76 imul rax, rax, 118 ; 00000076H 0048f 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00494 c6 44 01 08 2f mov BYTE PTR [rcx+rax+8], 47 ; 0000002fH ; 141 : m_DecoderTable[ 119 ] = 48; 00499 b8 01 00 00 00 mov eax, 1 0049e 48 6b c0 77 imul rax, rax, 119 ; 00000077H 004a2 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 004a7 c6 44 01 08 30 mov BYTE PTR [rcx+rax+8], 48 ; 00000030H ; 142 : m_DecoderTable[ 120 ] = 49; 004ac b8 01 00 00 00 mov eax, 1 004b1 48 6b c0 78 imul rax, rax, 120 ; 00000078H 004b5 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 004ba c6 44 01 08 31 mov BYTE PTR [rcx+rax+8], 49 ; 00000031H ; 143 : m_DecoderTable[ 121 ] = 50; 004bf b8 01 00 00 00 mov eax, 1 004c4 48 6b c0 79 imul rax, rax, 121 ; 00000079H 004c8 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 004cd c6 44 01 08 32 mov BYTE PTR [rcx+rax+8], 50 ; 00000032H ; 144 : m_DecoderTable[ 122 ] = 51; 004d2 b8 01 00 00 00 mov eax, 1 004d7 48 6b c0 7a imul rax, rax, 122 ; 0000007aH 004db 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 004e0 c6 44 01 08 33 mov BYTE PTR [rcx+rax+8], 51 ; 00000033H ; 145 : ; 146 : // OK, there's our translation table, now let's be a little ; 147 : // forgiving about end-of-lines, tabs, spaces, etc. ; 148 : ; 149 : m_DecoderTable[ 9 ] = BASE64_IGNORABLE_CHARACTER; // TAB character (Tabs suck!) 004e5 b8 01 00 00 00 mov eax, 1 004ea 48 6b c0 09 imul rax, rax, 9 004ee 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 004f3 c6 44 01 08 fe mov BYTE PTR [rcx+rax+8], 254 ; 000000feH ; 150 : m_DecoderTable[ 32 ] = BASE64_IGNORABLE_CHARACTER; // Space character 004f8 b8 01 00 00 00 mov eax, 1 004fd 48 6b c0 20 imul rax, rax, 32 ; 00000020H 00501 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00506 c6 44 01 08 fe mov BYTE PTR [rcx+rax+8], 254 ; 000000feH ; 151 : m_DecoderTable[ CARRIAGE_RETURN ] = BASE64_IGNORABLE_CHARACTER; 0050b b8 01 00 00 00 mov eax, 1 00510 48 6b c0 0d imul rax, rax, 13 00514 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00519 c6 44 01 08 fe mov BYTE PTR [rcx+rax+8], 254 ; 000000feH ; 152 : m_DecoderTable[ LINE_FEED ] = BASE64_IGNORABLE_CHARACTER; 0051e b8 01 00 00 00 mov eax, 1 00523 48 6b c0 0a imul rax, rax, 10 00527 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0052c c6 44 01 08 fe mov BYTE PTR [rcx+rax+8], 254 ; 000000feH ; 153 : } 00531 48 83 c4 28 add rsp, 40 ; 00000028H 00535 c3 ret 0 ?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ ENDP ; CBase64Coding::m_InitializeDecoderTable _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z _TEXT SEGMENT this$ = 48 nLength$ = 56 ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<char,0>::SetLength, COMDAT ; 867 : { $LN5: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 28 sub rsp, 40 ; 00000028H ; 868 : ATLASSERT( nLength >= 0 ); ; 869 : ATLASSERT( nLength <= GetData()->nAllocLength ); ; 870 : ; 871 : if( nLength < 0 || nLength > GetData()->nAllocLength) 0000d 83 7c 24 38 00 cmp DWORD PTR nLength$[rsp], 0 00012 7c 13 jl SHORT $LN3@SetLength 00014 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00019 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 0001e 8b 40 0c mov eax, DWORD PTR [rax+12] 00021 39 44 24 38 cmp DWORD PTR nLength$[rsp], eax 00025 7e 0a jle SHORT $LN2@SetLength $LN3@SetLength: ; 872 : AtlThrow(E_INVALIDARG); 00027 b9 57 00 07 80 mov ecx, -2147024809 ; ffffffff80070057H 0002c e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@SetLength: ; 873 : ; 874 : GetData()->nDataLength = nLength; 00031 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00036 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 0003b 8b 4c 24 38 mov ecx, DWORD PTR nLength$[rsp] 0003f 89 48 08 mov DWORD PTR [rax+8], ecx ; 875 : m_pszData[nLength] = 0; 00042 48 63 44 24 38 movsxd rax, DWORD PTR nLength$[rsp] 00047 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0004c 48 8b 09 mov rcx, QWORD PTR [rcx] 0004f c6 04 01 00 mov BYTE PTR [rcx+rax], 0 $LN4@SetLength: ; 876 : } 00053 48 83 c4 28 add rsp, 40 ; 00000028H 00057 c3 ret 0 ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::SetLength _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z _TEXT SEGMENT pOldData$ = 32 pStringMgr$ = 40 pNewData$ = 48 tv78 = 56 this$ = 80 nLength$ = 88 ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<char,0>::Reallocate, COMDAT ; 849 : { $LN6: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 48 sub rsp, 72 ; 00000048H ; 850 : CStringData* pOldData = GetData(); 0000d 48 8b 4c 24 50 mov rcx, QWORD PTR this$[rsp] 00012 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 00017 48 89 44 24 20 mov QWORD PTR pOldData$[rsp], rax ; 851 : ATLASSERT( pOldData->nAllocLength < nLength ); ; 852 : IAtlStringMgr* pStringMgr = pOldData->pStringMgr; 0001c 48 8b 44 24 20 mov rax, QWORD PTR pOldData$[rsp] 00021 48 8b 00 mov rax, QWORD PTR [rax] 00024 48 89 44 24 28 mov QWORD PTR pStringMgr$[rsp], rax ; 853 : if ( pOldData->nAllocLength >= nLength || nLength <= 0) 00029 48 8b 44 24 20 mov rax, QWORD PTR pOldData$[rsp] 0002e 8b 4c 24 58 mov ecx, DWORD PTR nLength$[rsp] 00032 39 48 0c cmp DWORD PTR [rax+12], ecx 00035 7d 07 jge SHORT $LN3@Reallocate 00037 83 7c 24 58 00 cmp DWORD PTR nLength$[rsp], 0 0003c 7f 07 jg SHORT $LN2@Reallocate $LN3@Reallocate: ; 854 : { ; 855 : ThrowMemoryException(); 0003e e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException ; 856 : return; 00043 eb 4b jmp SHORT $LN1@Reallocate $LN2@Reallocate: ; 857 : } ; 858 : CStringData* pNewData = pStringMgr->Reallocate( pOldData, nLength, sizeof( XCHAR ) ); 00045 48 8b 44 24 28 mov rax, QWORD PTR pStringMgr$[rsp] 0004a 48 8b 00 mov rax, QWORD PTR [rax] 0004d 48 8b 40 10 mov rax, QWORD PTR [rax+16] 00051 48 89 44 24 38 mov QWORD PTR tv78[rsp], rax 00056 41 b9 01 00 00 00 mov r9d, 1 0005c 44 8b 44 24 58 mov r8d, DWORD PTR nLength$[rsp] 00061 48 8b 54 24 20 mov rdx, QWORD PTR pOldData$[rsp] 00066 48 8b 4c 24 28 mov rcx, QWORD PTR pStringMgr$[rsp] 0006b ff 54 24 38 call QWORD PTR tv78[rsp] 0006f 48 89 44 24 30 mov QWORD PTR pNewData$[rsp], rax ; 859 : if( pNewData == NULL ) 00074 48 83 7c 24 30 00 cmp QWORD PTR pNewData$[rsp], 0 0007a 75 05 jne SHORT $LN4@Reallocate ; 860 : { ; 861 : ThrowMemoryException(); 0007c e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException $LN4@Reallocate: ; 862 : } ; 863 : Attach( pNewData ); 00081 48 8b 54 24 30 mov rdx, QWORD PTR pNewData$[rsp] 00086 48 8b 4c 24 50 mov rcx, QWORD PTR this$[rsp] 0008b e8 00 00 00 00 call ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach $LN1@Reallocate: $LN5@Reallocate: ; 864 : } 00090 48 83 c4 48 add rsp, 72 ; 00000048H 00094 c3 ret 0 ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::Reallocate _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z _TEXT SEGMENT nNewLength$1 = 32 pOldData$ = 40 this$ = 64 nLength$ = 72 ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<char,0>::PrepareWrite2, COMDAT ; 818 : { $LN10: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 38 sub rsp, 56 ; 00000038H ; 819 : CStringData* pOldData = GetData(); 0000d 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00012 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 00017 48 89 44 24 28 mov QWORD PTR pOldData$[rsp], rax ; 820 : if( pOldData->nDataLength > nLength ) 0001c 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 00021 8b 4c 24 48 mov ecx, DWORD PTR nLength$[rsp] 00025 39 48 08 cmp DWORD PTR [rax+8], ecx 00028 7e 0c jle SHORT $LN2@PrepareWri ; 821 : { ; 822 : nLength = pOldData->nDataLength; 0002a 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 0002f 8b 40 08 mov eax, DWORD PTR [rax+8] 00032 89 44 24 48 mov DWORD PTR nLength$[rsp], eax $LN2@PrepareWri: ; 823 : } ; 824 : if( pOldData->IsShared() ) 00036 48 8b 4c 24 28 mov rcx, QWORD PTR pOldData$[rsp] 0003b e8 00 00 00 00 call ?IsShared@CStringData@ATL@@QEBA_NXZ ; ATL::CStringData::IsShared 00040 0f b6 c0 movzx eax, al 00043 85 c0 test eax, eax 00045 74 10 je SHORT $LN3@PrepareWri ; 825 : { ; 826 : Fork( nLength ); 00047 8b 54 24 48 mov edx, DWORD PTR nLength$[rsp] 0004b 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00050 e8 00 00 00 00 call ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Fork ; 827 : } 00055 eb 68 jmp SHORT $LN4@PrepareWri $LN3@PrepareWri: ; 828 : else if( pOldData->nAllocLength < nLength ) 00057 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 0005c 8b 4c 24 48 mov ecx, DWORD PTR nLength$[rsp] 00060 39 48 0c cmp DWORD PTR [rax+12], ecx 00063 7d 5a jge SHORT $LN5@PrepareWri ; 829 : { ; 830 : // Grow exponentially, until we hit 1G, then by 1M thereafter. ; 831 : int nNewLength = pOldData->nAllocLength; 00065 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 0006a 8b 40 0c mov eax, DWORD PTR [rax+12] 0006d 89 44 24 20 mov DWORD PTR nNewLength$1[rsp], eax ; 832 : if( nNewLength > 1024 * 1024 * 1024 ) 00071 81 7c 24 20 00 00 00 40 cmp DWORD PTR nNewLength$1[rsp], 1073741824 ; 40000000H 00079 7e 0f jle SHORT $LN6@PrepareWri ; 833 : { ; 834 : nNewLength += 1024 * 1024; 0007b 8b 44 24 20 mov eax, DWORD PTR nNewLength$1[rsp] 0007f 05 00 00 10 00 add eax, 1048576 ; 00100000H 00084 89 44 24 20 mov DWORD PTR nNewLength$1[rsp], eax ; 835 : } 00088 eb 15 jmp SHORT $LN7@PrepareWri $LN6@PrepareWri: ; 836 : else ; 837 : { ; 838 : // Exponential growth factor is 1.5. ; 839 : nNewLength = nNewLength + nNewLength / 2; 0008a 8b 44 24 20 mov eax, DWORD PTR nNewLength$1[rsp] 0008e 99 cdq 0008f 2b c2 sub eax, edx 00091 d1 f8 sar eax, 1 00093 8b 4c 24 20 mov ecx, DWORD PTR nNewLength$1[rsp] 00097 03 c8 add ecx, eax 00099 8b c1 mov eax, ecx 0009b 89 44 24 20 mov DWORD PTR nNewLength$1[rsp], eax $LN7@PrepareWri: ; 840 : } ; 841 : if( nNewLength < nLength ) 0009f 8b 44 24 48 mov eax, DWORD PTR nLength$[rsp] 000a3 39 44 24 20 cmp DWORD PTR nNewLength$1[rsp], eax 000a7 7d 08 jge SHORT $LN8@PrepareWri ; 842 : { ; 843 : nNewLength = nLength; 000a9 8b 44 24 48 mov eax, DWORD PTR nLength$[rsp] 000ad 89 44 24 20 mov DWORD PTR nNewLength$1[rsp], eax $LN8@PrepareWri: ; 844 : } ; 845 : Reallocate( nNewLength ); 000b1 8b 54 24 20 mov edx, DWORD PTR nNewLength$1[rsp] 000b5 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 000ba e8 00 00 00 00 call ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Reallocate $LN5@PrepareWri: $LN4@PrepareWri: ; 846 : } ; 847 : } 000bf 48 83 c4 38 add rsp, 56 ; 00000038H 000c3 c3 ret 0 ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::PrepareWrite2 _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z _TEXT SEGMENT nTooShort$ = 32 nShared$ = 36 pOldData$ = 40 this$ = 64 nLength$ = 72 ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z PROC ; ATL::CSimpleStringT<char,0>::PrepareWrite, COMDAT ; 803 : { $LN5: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 38 sub rsp, 56 ; 00000038H ; 804 : if (nLength < 0) 0000d 83 7c 24 48 00 cmp DWORD PTR nLength$[rsp], 0 00012 7d 0a jge SHORT $LN2@PrepareWri ; 805 : AtlThrow(E_INVALIDARG); 00014 b9 57 00 07 80 mov ecx, -2147024809 ; ffffffff80070057H 00019 e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@PrepareWri: ; 806 : ; 807 : CStringData* pOldData = GetData(); 0001e 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00023 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 00028 48 89 44 24 28 mov QWORD PTR pOldData$[rsp], rax ; 808 : int nShared = 1-pOldData->nRefs; // nShared < 0 means true, >= 0 means false 0002d 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 00032 b9 01 00 00 00 mov ecx, 1 00037 2b 48 10 sub ecx, DWORD PTR [rax+16] 0003a 8b c1 mov eax, ecx 0003c 89 44 24 24 mov DWORD PTR nShared$[rsp], eax ; 809 : int nTooShort = pOldData->nAllocLength-nLength; // nTooShort < 0 means true, >= 0 means false 00040 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 00045 8b 4c 24 48 mov ecx, DWORD PTR nLength$[rsp] 00049 8b 40 0c mov eax, DWORD PTR [rax+12] 0004c 2b c1 sub eax, ecx 0004e 89 44 24 20 mov DWORD PTR nTooShort$[rsp], eax ; 810 : if( (nShared|nTooShort) < 0 ) // If either sign bit is set (i.e. either is less than zero), we need to copy data 00052 8b 44 24 20 mov eax, DWORD PTR nTooShort$[rsp] 00056 8b 4c 24 24 mov ecx, DWORD PTR nShared$[rsp] 0005a 0b c8 or ecx, eax 0005c 8b c1 mov eax, ecx 0005e 85 c0 test eax, eax 00060 7d 0e jge SHORT $LN3@PrepareWri ; 811 : { ; 812 : PrepareWrite2( nLength ); 00062 8b 54 24 48 mov edx, DWORD PTR nLength$[rsp] 00066 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 0006b e8 00 00 00 00 call ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite2 $LN3@PrepareWri: ; 813 : } ; 814 : ; 815 : return( m_pszData ); 00070 48 8b 44 24 40 mov rax, QWORD PTR this$[rsp] 00075 48 8b 00 mov rax, QWORD PTR [rax] $LN4@PrepareWri: ; 816 : } 00078 48 83 c4 38 add rsp, 56 ; 00000038H 0007c c3 ret 0 ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ENDP ; ATL::CSimpleStringT<char,0>::PrepareWrite _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ _TEXT SEGMENT this$ = 8 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ PROC ; ATL::CSimpleStringT<char,0>::GetData, COMDAT ; 799 : { 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx ; 800 : return( reinterpret_cast< CStringData* >( m_pszData )-1 ); 00005 48 8b 44 24 08 mov rax, QWORD PTR this$[rsp] 0000a 48 8b 00 mov rax, QWORD PTR [rax] 0000d 48 83 e8 18 sub rax, 24 ; 801 : } 00011 c3 ret 0 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ENDP ; ATL::CSimpleStringT<char,0>::GetData _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z _TEXT SEGMENT nOldLength$ = 32 tv86 = 36 nCharsToCopy$ = 40 pOldData$ = 48 pNewData$ = 56 tv76 = 64 tv83 = 72 tv134 = 80 tv132 = 88 this$ = 112 nLength$ = 120 ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<char,0>::Fork, COMDAT ; 783 : { $LN6: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 68 sub rsp, 104 ; 00000068H ; 784 : CStringData* pOldData = GetData(); 0000d 48 8b 4c 24 70 mov rcx, QWORD PTR this$[rsp] 00012 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 00017 48 89 44 24 30 mov QWORD PTR pOldData$[rsp], rax ; 785 : int nOldLength = pOldData->nDataLength; 0001c 48 8b 44 24 30 mov rax, QWORD PTR pOldData$[rsp] 00021 8b 40 08 mov eax, DWORD PTR [rax+8] 00024 89 44 24 20 mov DWORD PTR nOldLength$[rsp], eax ; 786 : CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate( nLength, sizeof( XCHAR ) ); 00028 48 8b 44 24 30 mov rax, QWORD PTR pOldData$[rsp] 0002d 48 8b 00 mov rax, QWORD PTR [rax] 00030 48 8b 4c 24 30 mov rcx, QWORD PTR pOldData$[rsp] 00035 48 8b 09 mov rcx, QWORD PTR [rcx] 00038 48 8b 00 mov rax, QWORD PTR [rax] 0003b ff 50 20 call QWORD PTR [rax+32] 0003e 48 89 44 24 40 mov QWORD PTR tv76[rsp], rax 00043 48 8b 44 24 40 mov rax, QWORD PTR tv76[rsp] 00048 48 8b 00 mov rax, QWORD PTR [rax] 0004b 48 8b 00 mov rax, QWORD PTR [rax] 0004e 48 89 44 24 48 mov QWORD PTR tv83[rsp], rax 00053 41 b8 01 00 00 00 mov r8d, 1 00059 8b 54 24 78 mov edx, DWORD PTR nLength$[rsp] 0005d 48 8b 4c 24 40 mov rcx, QWORD PTR tv76[rsp] 00062 ff 54 24 48 call QWORD PTR tv83[rsp] 00066 48 89 44 24 38 mov QWORD PTR pNewData$[rsp], rax ; 787 : if( pNewData == NULL ) 0006b 48 83 7c 24 38 00 cmp QWORD PTR pNewData$[rsp], 0 00071 75 05 jne SHORT $LN2@Fork ; 788 : { ; 789 : ThrowMemoryException(); 00073 e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException $LN2@Fork: ; 790 : } ; 791 : int nCharsToCopy = ((nOldLength < nLength) ? nOldLength : nLength)+1; // Copy '\0' 00078 8b 44 24 78 mov eax, DWORD PTR nLength$[rsp] 0007c 39 44 24 20 cmp DWORD PTR nOldLength$[rsp], eax 00080 7d 0a jge SHORT $LN4@Fork 00082 8b 44 24 20 mov eax, DWORD PTR nOldLength$[rsp] 00086 89 44 24 24 mov DWORD PTR tv86[rsp], eax 0008a eb 08 jmp SHORT $LN5@Fork $LN4@Fork: 0008c 8b 44 24 78 mov eax, DWORD PTR nLength$[rsp] 00090 89 44 24 24 mov DWORD PTR tv86[rsp], eax $LN5@Fork: 00094 8b 44 24 24 mov eax, DWORD PTR tv86[rsp] 00098 ff c0 inc eax 0009a 89 44 24 28 mov DWORD PTR nCharsToCopy$[rsp], eax ; 792 : memcpy_s( PXSTR( pNewData->data() ), nCharsToCopy * sizeof( XCHAR ), 0009e 48 8b 4c 24 30 mov rcx, QWORD PTR pOldData$[rsp] 000a3 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 000a8 48 89 44 24 50 mov QWORD PTR tv134[rsp], rax 000ad 48 8b 4c 24 38 mov rcx, QWORD PTR pNewData$[rsp] 000b2 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 000b7 48 89 44 24 58 mov QWORD PTR tv132[rsp], rax 000bc 48 63 44 24 28 movsxd rax, DWORD PTR nCharsToCopy$[rsp] 000c1 48 63 4c 24 28 movsxd rcx, DWORD PTR nCharsToCopy$[rsp] 000c6 4c 8b c8 mov r9, rax 000c9 4c 8b 44 24 50 mov r8, QWORD PTR tv134[rsp] 000ce 48 8b d1 mov rdx, rcx 000d1 48 8b 4c 24 58 mov rcx, QWORD PTR tv132[rsp] 000d6 e8 00 00 00 00 call memcpy_s ; 793 : PCXSTR( pOldData->data() ), nCharsToCopy * sizeof( XCHAR )); ; 794 : pNewData->nDataLength = nOldLength; 000db 48 8b 44 24 38 mov rax, QWORD PTR pNewData$[rsp] 000e0 8b 4c 24 20 mov ecx, DWORD PTR nOldLength$[rsp] 000e4 89 48 08 mov DWORD PTR [rax+8], ecx ; 795 : pOldData->Release(); 000e7 48 8b 4c 24 30 mov rcx, QWORD PTR pOldData$[rsp] 000ec e8 00 00 00 00 call ?Release@CStringData@ATL@@QEAAXXZ ; ATL::CStringData::Release ; 796 : Attach( pNewData ); 000f1 48 8b 54 24 38 mov rdx, QWORD PTR pNewData$[rsp] 000f6 48 8b 4c 24 70 mov rcx, QWORD PTR this$[rsp] 000fb e8 00 00 00 00 call ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach $LN3@Fork: ; 797 : } 00100 48 83 c4 68 add rsp, 104 ; 00000068H 00104 c3 ret 0 ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::Fork _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z _TEXT SEGMENT this$ = 48 pData$ = 56 ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z PROC ; ATL::CSimpleStringT<char,0>::Attach, COMDAT ; 779 : { $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 48 83 ec 28 sub rsp, 40 ; 00000028H ; 780 : m_pszData = static_cast< PXSTR >( pData->data() ); 0000e 48 8b 4c 24 38 mov rcx, QWORD PTR pData$[rsp] 00013 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 00018 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0001d 48 89 01 mov QWORD PTR [rcx], rax ; 781 : } 00020 48 83 c4 28 add rsp, 40 ; 00000028H 00024 c3 ret 0 ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ENDP ; ATL::CSimpleStringT<char,0>::Attach _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ _TEXT SEGMENT ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ PROC ; ATL::CSimpleStringT<char,0>::ThrowMemoryException, COMDAT ; 772 : { $LN3: 00000 48 83 ec 28 sub rsp, 40 ; 00000028H ; 773 : AtlThrow( E_OUTOFMEMORY ); 00004 b9 0e 00 07 80 mov ecx, -2147024882 ; ffffffff8007000eH 00009 e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@ThrowMemor: ; 774 : } 0000e 48 83 c4 28 add rsp, 40 ; 00000028H 00012 c3 ret 0 ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ENDP ; ATL::CSimpleStringT<char,0>::ThrowMemoryException _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z _TEXT SEGMENT psz$ = 48 sizeInXChar$ = 56 ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z PROC ; ATL::CSimpleStringT<char,0>::StringLengthN, COMDAT ; 739 : { $LN4: 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 48 83 ec 28 sub rsp, 40 ; 00000028H ; 740 : if( psz == NULL ) 0000e 48 83 7c 24 30 00 cmp QWORD PTR psz$[rsp], 0 00014 75 04 jne SHORT $LN2@StringLeng ; 741 : { ; 742 : return( 0 ); 00016 33 c0 xor eax, eax 00018 eb 10 jmp SHORT $LN1@StringLeng $LN2@StringLeng: ; 743 : } ; 744 : return( int( strnlen( psz, sizeInXChar ) ) ); 0001a 48 8b 54 24 38 mov rdx, QWORD PTR sizeInXChar$[rsp] 0001f 48 8b 4c 24 30 mov rcx, QWORD PTR psz$[rsp] 00024 e8 00 00 00 00 call strnlen 00029 90 npad 1 $LN1@StringLeng: ; 745 : } 0002a 48 83 c4 28 add rsp, 40 ; 00000028H 0002e c3 ret 0 ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ENDP ; ATL::CSimpleStringT<char,0>::StringLengthN _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z _TEXT SEGMENT nAlloc$1 = 32 this$ = 64 nNewLength$ = 72 ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z PROC ; ATL::CSimpleStringT<char,0>::ReleaseBuffer, COMDAT ; 557 : { $LN4: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 38 sub rsp, 56 ; 00000038H ; 558 : if( nNewLength == -1 ) 0000d 83 7c 24 48 ff cmp DWORD PTR nNewLength$[rsp], -1 00012 75 2a jne SHORT $LN2@ReleaseBuf ; 559 : { ; 560 : int nAlloc = GetData()->nAllocLength; 00014 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00019 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 0001e 8b 40 0c mov eax, DWORD PTR [rax+12] 00021 89 44 24 20 mov DWORD PTR nAlloc$1[rsp], eax ; 561 : nNewLength = StringLengthN( m_pszData, nAlloc); 00025 48 63 44 24 20 movsxd rax, DWORD PTR nAlloc$1[rsp] 0002a 48 8b d0 mov rdx, rax 0002d 48 8b 44 24 40 mov rax, QWORD PTR this$[rsp] 00032 48 8b 08 mov rcx, QWORD PTR [rax] 00035 e8 00 00 00 00 call ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ; ATL::CSimpleStringT<char,0>::StringLengthN 0003a 89 44 24 48 mov DWORD PTR nNewLength$[rsp], eax $LN2@ReleaseBuf: ; 562 : } ; 563 : SetLength( nNewLength ); 0003e 8b 54 24 48 mov edx, DWORD PTR nNewLength$[rsp] 00042 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00047 e8 00 00 00 00 call ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::SetLength ; 564 : } 0004c 48 83 c4 38 add rsp, 56 ; 00000038H 00050 c3 ret 0 ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::ReleaseBuffer _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ _TEXT SEGMENT this$ = 48 ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ PROC ; ATL::CSimpleStringT<char,0>::GetLength, COMDAT ; 518 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 83 ec 28 sub rsp, 40 ; 00000028H ; 519 : return( GetData()->nDataLength ); 00009 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0000e e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 00013 8b 40 08 mov eax, DWORD PTR [rax+8] ; 520 : } 00016 48 83 c4 28 add rsp, 40 ; 00000028H 0001a c3 ret 0 ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ ENDP ; ATL::CSimpleStringT<char,0>::GetLength _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z _TEXT SEGMENT this$ = 48 nMinBufferLength$ = 56 ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z PROC ; ATL::CSimpleStringT<char,0>::GetBuffer, COMDAT ; 507 : { $LN3: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 28 sub rsp, 40 ; 00000028H ; 508 : return( PrepareWrite( nMinBufferLength ) ); 0000d 8b 54 24 38 mov edx, DWORD PTR nMinBufferLength$[rsp] 00011 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00016 e8 00 00 00 00 call ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite ; 509 : } 0001b 48 83 c4 28 add rsp, 40 ; 00000028H 0001f c3 ret 0 ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ENDP ; ATL::CSimpleStringT<char,0>::GetBuffer _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ _TEXT SEGMENT this$ = 8 ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ PROC ; ATL::CSimpleStringT<char,0>::operator char const *, COMDAT ; 376 : { 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx ; 377 : return( m_pszData ); 00005 48 8b 44 24 08 mov rax, QWORD PTR this$[rsp] 0000a 48 8b 00 mov rax, QWORD PTR [rax] ; 378 : } 0000d c3 ret 0 ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ ENDP ; ATL::CSimpleStringT<char,0>::operator char const * _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl ; COMDAT ?GetData@CByteArray@@QEBAPEBEXZ _TEXT SEGMENT this$ = 8 ?GetData@CByteArray@@QEBAPEBEXZ PROC ; CByteArray::GetData, COMDAT ; 46 : { return (const BYTE*)m_pData; } 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 8b 44 24 08 mov rax, QWORD PTR this$[rsp] 0000a 48 8b 40 08 mov rax, QWORD PTR [rax+8] 0000e c3 ret 0 ?GetData@CByteArray@@QEBAPEBEXZ ENDP ; CByteArray::GetData _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl ; COMDAT ?SetAt@CByteArray@@QEAAX_JE@Z _TEXT SEGMENT this$ = 48 nIndex$ = 56 newElement$ = 64 ?SetAt@CByteArray@@QEAAX_JE@Z PROC ; CByteArray::SetAt, COMDAT ; 35 : { ASSERT(nIndex >= 0 && nIndex < m_nSize); $LN5: 00000 44 88 44 24 18 mov BYTE PTR [rsp+24], r8b 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 48 83 ec 28 sub rsp, 40 ; 00000028H ; 36 : if( nIndex < 0 || nIndex >= m_nSize ) 00013 48 83 7c 24 38 00 cmp QWORD PTR nIndex$[rsp], 0 00019 7c 10 jl SHORT $LN3@SetAt 0001b 48 8b 44 24 30 mov rax, QWORD PTR this$[rsp] 00020 48 8b 40 10 mov rax, QWORD PTR [rax+16] 00024 48 39 44 24 38 cmp QWORD PTR nIndex$[rsp], rax 00029 7c 05 jl SHORT $LN2@SetAt $LN3@SetAt: ; 37 : AfxThrowInvalidArgException(); 0002b e8 00 00 00 00 call ?AfxThrowInvalidArgException@@YAXXZ ; AfxThrowInvalidArgException $LN2@SetAt: ; 38 : m_pData[nIndex] = newElement; } 00030 48 8b 44 24 30 mov rax, QWORD PTR this$[rsp] 00035 48 8b 40 08 mov rax, QWORD PTR [rax+8] 00039 48 8b 4c 24 38 mov rcx, QWORD PTR nIndex$[rsp] 0003e 0f b6 54 24 40 movzx edx, BYTE PTR newElement$[rsp] 00043 88 14 08 mov BYTE PTR [rax+rcx], dl $LN4@SetAt: 00046 48 83 c4 28 add rsp, 40 ; 00000028H 0004a c3 ret 0 ?SetAt@CByteArray@@QEAAX_JE@Z ENDP ; CByteArray::SetAt _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl ; COMDAT ?RemoveAll@CByteArray@@QEAAXXZ _TEXT SEGMENT this$ = 48 ?RemoveAll@CByteArray@@QEAAXXZ PROC ; CByteArray::RemoveAll, COMDAT ; 28 : { SetSize(0); } $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 83 ec 28 sub rsp, 40 ; 00000028H 00009 49 c7 c0 ff ff ff ff mov r8, -1 00010 33 d2 xor edx, edx 00012 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00017 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize 0001c 48 83 c4 28 add rsp, 40 ; 00000028H 00020 c3 ret 0 ?RemoveAll@CByteArray@@QEAAXXZ ENDP ; CByteArray::RemoveAll _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\afxcoll.inl ; COMDAT ?GetSize@CByteArray@@QEBA_JXZ _TEXT SEGMENT this$ = 8 ?GetSize@CByteArray@@QEBA_JXZ PROC ; CByteArray::GetSize, COMDAT ; 20 : { return m_nSize; } 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 8b 44 24 08 mov rax, QWORD PTR this$[rsp] 0000a 48 8b 40 10 mov rax, QWORD PTR [rax+16] 0000e c3 ret 0 ?GetSize@CByteArray@@QEBA_JXZ ENDP ; CByteArray::GetSize _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z _TEXT SEGMENT this$ = 48 nLength$ = 56 ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::SetLength, COMDAT ; 867 : { $LN5: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 28 sub rsp, 40 ; 00000028H ; 868 : ATLASSERT( nLength >= 0 ); ; 869 : ATLASSERT( nLength <= GetData()->nAllocLength ); ; 870 : ; 871 : if( nLength < 0 || nLength > GetData()->nAllocLength) 0000d 83 7c 24 38 00 cmp DWORD PTR nLength$[rsp], 0 00012 7c 13 jl SHORT $LN3@SetLength 00014 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00019 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 0001e 8b 40 0c mov eax, DWORD PTR [rax+12] 00021 39 44 24 38 cmp DWORD PTR nLength$[rsp], eax 00025 7e 0a jle SHORT $LN2@SetLength $LN3@SetLength: ; 872 : AtlThrow(E_INVALIDARG); 00027 b9 57 00 07 80 mov ecx, -2147024809 ; ffffffff80070057H 0002c e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@SetLength: ; 873 : ; 874 : GetData()->nDataLength = nLength; 00031 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00036 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 0003b 8b 4c 24 38 mov ecx, DWORD PTR nLength$[rsp] 0003f 89 48 08 mov DWORD PTR [rax+8], ecx ; 875 : m_pszData[nLength] = 0; 00042 48 63 44 24 38 movsxd rax, DWORD PTR nLength$[rsp] 00047 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0004c 48 8b 09 mov rcx, QWORD PTR [rcx] 0004f 33 d2 xor edx, edx 00051 66 89 14 41 mov WORD PTR [rcx+rax*2], dx $LN4@SetLength: ; 876 : } 00055 48 83 c4 28 add rsp, 40 ; 00000028H 00059 c3 ret 0 ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::SetLength _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z _TEXT SEGMENT pOldData$ = 32 pStringMgr$ = 40 pNewData$ = 48 tv78 = 56 this$ = 80 nLength$ = 88 ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::Reallocate, COMDAT ; 849 : { $LN6: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 48 sub rsp, 72 ; 00000048H ; 850 : CStringData* pOldData = GetData(); 0000d 48 8b 4c 24 50 mov rcx, QWORD PTR this$[rsp] 00012 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 00017 48 89 44 24 20 mov QWORD PTR pOldData$[rsp], rax ; 851 : ATLASSERT( pOldData->nAllocLength < nLength ); ; 852 : IAtlStringMgr* pStringMgr = pOldData->pStringMgr; 0001c 48 8b 44 24 20 mov rax, QWORD PTR pOldData$[rsp] 00021 48 8b 00 mov rax, QWORD PTR [rax] 00024 48 89 44 24 28 mov QWORD PTR pStringMgr$[rsp], rax ; 853 : if ( pOldData->nAllocLength >= nLength || nLength <= 0) 00029 48 8b 44 24 20 mov rax, QWORD PTR pOldData$[rsp] 0002e 8b 4c 24 58 mov ecx, DWORD PTR nLength$[rsp] 00032 39 48 0c cmp DWORD PTR [rax+12], ecx 00035 7d 07 jge SHORT $LN3@Reallocate 00037 83 7c 24 58 00 cmp DWORD PTR nLength$[rsp], 0 0003c 7f 07 jg SHORT $LN2@Reallocate $LN3@Reallocate: ; 854 : { ; 855 : ThrowMemoryException(); 0003e e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException ; 856 : return; 00043 eb 4b jmp SHORT $LN1@Reallocate $LN2@Reallocate: ; 857 : } ; 858 : CStringData* pNewData = pStringMgr->Reallocate( pOldData, nLength, sizeof( XCHAR ) ); 00045 48 8b 44 24 28 mov rax, QWORD PTR pStringMgr$[rsp] 0004a 48 8b 00 mov rax, QWORD PTR [rax] 0004d 48 8b 40 10 mov rax, QWORD PTR [rax+16] 00051 48 89 44 24 38 mov QWORD PTR tv78[rsp], rax 00056 41 b9 02 00 00 00 mov r9d, 2 0005c 44 8b 44 24 58 mov r8d, DWORD PTR nLength$[rsp] 00061 48 8b 54 24 20 mov rdx, QWORD PTR pOldData$[rsp] 00066 48 8b 4c 24 28 mov rcx, QWORD PTR pStringMgr$[rsp] 0006b ff 54 24 38 call QWORD PTR tv78[rsp] 0006f 48 89 44 24 30 mov QWORD PTR pNewData$[rsp], rax ; 859 : if( pNewData == NULL ) 00074 48 83 7c 24 30 00 cmp QWORD PTR pNewData$[rsp], 0 0007a 75 05 jne SHORT $LN4@Reallocate ; 860 : { ; 861 : ThrowMemoryException(); 0007c e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException $LN4@Reallocate: ; 862 : } ; 863 : Attach( pNewData ); 00081 48 8b 54 24 30 mov rdx, QWORD PTR pNewData$[rsp] 00086 48 8b 4c 24 50 mov rcx, QWORD PTR this$[rsp] 0008b e8 00 00 00 00 call ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach $LN1@Reallocate: $LN5@Reallocate: ; 864 : } 00090 48 83 c4 48 add rsp, 72 ; 00000048H 00094 c3 ret 0 ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::Reallocate _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z _TEXT SEGMENT nNewLength$1 = 32 pOldData$ = 40 this$ = 64 nLength$ = 72 ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2, COMDAT ; 818 : { $LN10: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 38 sub rsp, 56 ; 00000038H ; 819 : CStringData* pOldData = GetData(); 0000d 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00012 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 00017 48 89 44 24 28 mov QWORD PTR pOldData$[rsp], rax ; 820 : if( pOldData->nDataLength > nLength ) 0001c 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 00021 8b 4c 24 48 mov ecx, DWORD PTR nLength$[rsp] 00025 39 48 08 cmp DWORD PTR [rax+8], ecx 00028 7e 0c jle SHORT $LN2@PrepareWri ; 821 : { ; 822 : nLength = pOldData->nDataLength; 0002a 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 0002f 8b 40 08 mov eax, DWORD PTR [rax+8] 00032 89 44 24 48 mov DWORD PTR nLength$[rsp], eax $LN2@PrepareWri: ; 823 : } ; 824 : if( pOldData->IsShared() ) 00036 48 8b 4c 24 28 mov rcx, QWORD PTR pOldData$[rsp] 0003b e8 00 00 00 00 call ?IsShared@CStringData@ATL@@QEBA_NXZ ; ATL::CStringData::IsShared 00040 0f b6 c0 movzx eax, al 00043 85 c0 test eax, eax 00045 74 10 je SHORT $LN3@PrepareWri ; 825 : { ; 826 : Fork( nLength ); 00047 8b 54 24 48 mov edx, DWORD PTR nLength$[rsp] 0004b 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00050 e8 00 00 00 00 call ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Fork ; 827 : } 00055 eb 68 jmp SHORT $LN4@PrepareWri $LN3@PrepareWri: ; 828 : else if( pOldData->nAllocLength < nLength ) 00057 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 0005c 8b 4c 24 48 mov ecx, DWORD PTR nLength$[rsp] 00060 39 48 0c cmp DWORD PTR [rax+12], ecx 00063 7d 5a jge SHORT $LN5@PrepareWri ; 829 : { ; 830 : // Grow exponentially, until we hit 1G, then by 1M thereafter. ; 831 : int nNewLength = pOldData->nAllocLength; 00065 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 0006a 8b 40 0c mov eax, DWORD PTR [rax+12] 0006d 89 44 24 20 mov DWORD PTR nNewLength$1[rsp], eax ; 832 : if( nNewLength > 1024 * 1024 * 1024 ) 00071 81 7c 24 20 00 00 00 40 cmp DWORD PTR nNewLength$1[rsp], 1073741824 ; 40000000H 00079 7e 0f jle SHORT $LN6@PrepareWri ; 833 : { ; 834 : nNewLength += 1024 * 1024; 0007b 8b 44 24 20 mov eax, DWORD PTR nNewLength$1[rsp] 0007f 05 00 00 10 00 add eax, 1048576 ; 00100000H 00084 89 44 24 20 mov DWORD PTR nNewLength$1[rsp], eax ; 835 : } 00088 eb 15 jmp SHORT $LN7@PrepareWri $LN6@PrepareWri: ; 836 : else ; 837 : { ; 838 : // Exponential growth factor is 1.5. ; 839 : nNewLength = nNewLength + nNewLength / 2; 0008a 8b 44 24 20 mov eax, DWORD PTR nNewLength$1[rsp] 0008e 99 cdq 0008f 2b c2 sub eax, edx 00091 d1 f8 sar eax, 1 00093 8b 4c 24 20 mov ecx, DWORD PTR nNewLength$1[rsp] 00097 03 c8 add ecx, eax 00099 8b c1 mov eax, ecx 0009b 89 44 24 20 mov DWORD PTR nNewLength$1[rsp], eax $LN7@PrepareWri: ; 840 : } ; 841 : if( nNewLength < nLength ) 0009f 8b 44 24 48 mov eax, DWORD PTR nLength$[rsp] 000a3 39 44 24 20 cmp DWORD PTR nNewLength$1[rsp], eax 000a7 7d 08 jge SHORT $LN8@PrepareWri ; 842 : { ; 843 : nNewLength = nLength; 000a9 8b 44 24 48 mov eax, DWORD PTR nLength$[rsp] 000ad 89 44 24 20 mov DWORD PTR nNewLength$1[rsp], eax $LN8@PrepareWri: ; 844 : } ; 845 : Reallocate( nNewLength ); 000b1 8b 54 24 20 mov edx, DWORD PTR nNewLength$1[rsp] 000b5 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 000ba e8 00 00 00 00 call ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Reallocate $LN5@PrepareWri: $LN4@PrepareWri: ; 846 : } ; 847 : } 000bf 48 83 c4 38 add rsp, 56 ; 00000038H 000c3 c3 ret 0 ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2 _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z _TEXT SEGMENT nTooShort$ = 32 nShared$ = 36 pOldData$ = 40 this$ = 64 nLength$ = 72 ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite, COMDAT ; 803 : { $LN5: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 38 sub rsp, 56 ; 00000038H ; 804 : if (nLength < 0) 0000d 83 7c 24 48 00 cmp DWORD PTR nLength$[rsp], 0 00012 7d 0a jge SHORT $LN2@PrepareWri ; 805 : AtlThrow(E_INVALIDARG); 00014 b9 57 00 07 80 mov ecx, -2147024809 ; ffffffff80070057H 00019 e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@PrepareWri: ; 806 : ; 807 : CStringData* pOldData = GetData(); 0001e 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00023 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 00028 48 89 44 24 28 mov QWORD PTR pOldData$[rsp], rax ; 808 : int nShared = 1-pOldData->nRefs; // nShared < 0 means true, >= 0 means false 0002d 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 00032 b9 01 00 00 00 mov ecx, 1 00037 2b 48 10 sub ecx, DWORD PTR [rax+16] 0003a 8b c1 mov eax, ecx 0003c 89 44 24 24 mov DWORD PTR nShared$[rsp], eax ; 809 : int nTooShort = pOldData->nAllocLength-nLength; // nTooShort < 0 means true, >= 0 means false 00040 48 8b 44 24 28 mov rax, QWORD PTR pOldData$[rsp] 00045 8b 4c 24 48 mov ecx, DWORD PTR nLength$[rsp] 00049 8b 40 0c mov eax, DWORD PTR [rax+12] 0004c 2b c1 sub eax, ecx 0004e 89 44 24 20 mov DWORD PTR nTooShort$[rsp], eax ; 810 : if( (nShared|nTooShort) < 0 ) // If either sign bit is set (i.e. either is less than zero), we need to copy data 00052 8b 44 24 20 mov eax, DWORD PTR nTooShort$[rsp] 00056 8b 4c 24 24 mov ecx, DWORD PTR nShared$[rsp] 0005a 0b c8 or ecx, eax 0005c 8b c1 mov eax, ecx 0005e 85 c0 test eax, eax 00060 7d 0e jge SHORT $LN3@PrepareWri ; 811 : { ; 812 : PrepareWrite2( nLength ); 00062 8b 54 24 48 mov edx, DWORD PTR nLength$[rsp] 00066 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 0006b e8 00 00 00 00 call ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2 $LN3@PrepareWri: ; 813 : } ; 814 : ; 815 : return( m_pszData ); 00070 48 8b 44 24 40 mov rax, QWORD PTR this$[rsp] 00075 48 8b 00 mov rax, QWORD PTR [rax] $LN4@PrepareWri: ; 816 : } 00078 48 83 c4 38 add rsp, 56 ; 00000038H 0007c c3 ret 0 ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ _TEXT SEGMENT this$ = 8 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ PROC ; ATL::CSimpleStringT<wchar_t,0>::GetData, COMDAT ; 799 : { 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx ; 800 : return( reinterpret_cast< CStringData* >( m_pszData )-1 ); 00005 48 8b 44 24 08 mov rax, QWORD PTR this$[rsp] 0000a 48 8b 00 mov rax, QWORD PTR [rax] 0000d 48 83 e8 18 sub rax, 24 ; 801 : } 00011 c3 ret 0 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ENDP ; ATL::CSimpleStringT<wchar_t,0>::GetData _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z _TEXT SEGMENT nOldLength$ = 32 tv86 = 36 nCharsToCopy$ = 40 pOldData$ = 48 pNewData$ = 56 tv76 = 64 tv83 = 72 tv136 = 80 tv134 = 88 this$ = 112 nLength$ = 120 ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::Fork, COMDAT ; 783 : { $LN6: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 68 sub rsp, 104 ; 00000068H ; 784 : CStringData* pOldData = GetData(); 0000d 48 8b 4c 24 70 mov rcx, QWORD PTR this$[rsp] 00012 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 00017 48 89 44 24 30 mov QWORD PTR pOldData$[rsp], rax ; 785 : int nOldLength = pOldData->nDataLength; 0001c 48 8b 44 24 30 mov rax, QWORD PTR pOldData$[rsp] 00021 8b 40 08 mov eax, DWORD PTR [rax+8] 00024 89 44 24 20 mov DWORD PTR nOldLength$[rsp], eax ; 786 : CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate( nLength, sizeof( XCHAR ) ); 00028 48 8b 44 24 30 mov rax, QWORD PTR pOldData$[rsp] 0002d 48 8b 00 mov rax, QWORD PTR [rax] 00030 48 8b 4c 24 30 mov rcx, QWORD PTR pOldData$[rsp] 00035 48 8b 09 mov rcx, QWORD PTR [rcx] 00038 48 8b 00 mov rax, QWORD PTR [rax] 0003b ff 50 20 call QWORD PTR [rax+32] 0003e 48 89 44 24 40 mov QWORD PTR tv76[rsp], rax 00043 48 8b 44 24 40 mov rax, QWORD PTR tv76[rsp] 00048 48 8b 00 mov rax, QWORD PTR [rax] 0004b 48 8b 00 mov rax, QWORD PTR [rax] 0004e 48 89 44 24 48 mov QWORD PTR tv83[rsp], rax 00053 41 b8 02 00 00 00 mov r8d, 2 00059 8b 54 24 78 mov edx, DWORD PTR nLength$[rsp] 0005d 48 8b 4c 24 40 mov rcx, QWORD PTR tv76[rsp] 00062 ff 54 24 48 call QWORD PTR tv83[rsp] 00066 48 89 44 24 38 mov QWORD PTR pNewData$[rsp], rax ; 787 : if( pNewData == NULL ) 0006b 48 83 7c 24 38 00 cmp QWORD PTR pNewData$[rsp], 0 00071 75 05 jne SHORT $LN2@Fork ; 788 : { ; 789 : ThrowMemoryException(); 00073 e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException $LN2@Fork: ; 790 : } ; 791 : int nCharsToCopy = ((nOldLength < nLength) ? nOldLength : nLength)+1; // Copy '\0' 00078 8b 44 24 78 mov eax, DWORD PTR nLength$[rsp] 0007c 39 44 24 20 cmp DWORD PTR nOldLength$[rsp], eax 00080 7d 0a jge SHORT $LN4@Fork 00082 8b 44 24 20 mov eax, DWORD PTR nOldLength$[rsp] 00086 89 44 24 24 mov DWORD PTR tv86[rsp], eax 0008a eb 08 jmp SHORT $LN5@Fork $LN4@Fork: 0008c 8b 44 24 78 mov eax, DWORD PTR nLength$[rsp] 00090 89 44 24 24 mov DWORD PTR tv86[rsp], eax $LN5@Fork: 00094 8b 44 24 24 mov eax, DWORD PTR tv86[rsp] 00098 ff c0 inc eax 0009a 89 44 24 28 mov DWORD PTR nCharsToCopy$[rsp], eax ; 792 : memcpy_s( PXSTR( pNewData->data() ), nCharsToCopy * sizeof( XCHAR ), 0009e 48 8b 4c 24 30 mov rcx, QWORD PTR pOldData$[rsp] 000a3 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 000a8 48 89 44 24 50 mov QWORD PTR tv136[rsp], rax 000ad 48 8b 4c 24 38 mov rcx, QWORD PTR pNewData$[rsp] 000b2 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 000b7 48 89 44 24 58 mov QWORD PTR tv134[rsp], rax 000bc 48 63 44 24 28 movsxd rax, DWORD PTR nCharsToCopy$[rsp] 000c1 48 d1 e0 shl rax, 1 000c4 48 63 4c 24 28 movsxd rcx, DWORD PTR nCharsToCopy$[rsp] 000c9 48 d1 e1 shl rcx, 1 000cc 4c 8b c8 mov r9, rax 000cf 4c 8b 44 24 50 mov r8, QWORD PTR tv136[rsp] 000d4 48 8b d1 mov rdx, rcx 000d7 48 8b 4c 24 58 mov rcx, QWORD PTR tv134[rsp] 000dc e8 00 00 00 00 call memcpy_s ; 793 : PCXSTR( pOldData->data() ), nCharsToCopy * sizeof( XCHAR )); ; 794 : pNewData->nDataLength = nOldLength; 000e1 48 8b 44 24 38 mov rax, QWORD PTR pNewData$[rsp] 000e6 8b 4c 24 20 mov ecx, DWORD PTR nOldLength$[rsp] 000ea 89 48 08 mov DWORD PTR [rax+8], ecx ; 795 : pOldData->Release(); 000ed 48 8b 4c 24 30 mov rcx, QWORD PTR pOldData$[rsp] 000f2 e8 00 00 00 00 call ?Release@CStringData@ATL@@QEAAXXZ ; ATL::CStringData::Release ; 796 : Attach( pNewData ); 000f7 48 8b 54 24 38 mov rdx, QWORD PTR pNewData$[rsp] 000fc 48 8b 4c 24 70 mov rcx, QWORD PTR this$[rsp] 00101 e8 00 00 00 00 call ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach $LN3@Fork: ; 797 : } 00106 48 83 c4 68 add rsp, 104 ; 00000068H 0010a c3 ret 0 ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::Fork _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z _TEXT SEGMENT this$ = 48 pData$ = 56 ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::Attach, COMDAT ; 779 : { $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 48 83 ec 28 sub rsp, 40 ; 00000028H ; 780 : m_pszData = static_cast< PXSTR >( pData->data() ); 0000e 48 8b 4c 24 38 mov rcx, QWORD PTR pData$[rsp] 00013 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 00018 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 0001d 48 89 01 mov QWORD PTR [rcx], rax ; 781 : } 00020 48 83 c4 28 add rsp, 40 ; 00000028H 00024 c3 ret 0 ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::Attach _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ _TEXT SEGMENT ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ PROC ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException, COMDAT ; 772 : { $LN3: 00000 48 83 ec 28 sub rsp, 40 ; 00000028H ; 773 : AtlThrow( E_OUTOFMEMORY ); 00004 b9 0e 00 07 80 mov ecx, -2147024882 ; ffffffff8007000eH 00009 e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@ThrowMemor: ; 774 : } 0000e 48 83 c4 28 add rsp, 40 ; 00000028H 00012 c3 ret 0 ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ENDP ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z _TEXT SEGMENT psz$ = 48 sizeInXChar$ = 56 ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN, COMDAT ; 749 : { $LN4: 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 48 83 ec 28 sub rsp, 40 ; 00000028H ; 750 : if( psz == NULL ) 0000e 48 83 7c 24 30 00 cmp QWORD PTR psz$[rsp], 0 00014 75 04 jne SHORT $LN2@StringLeng ; 751 : { ; 752 : return( 0 ); 00016 33 c0 xor eax, eax 00018 eb 10 jmp SHORT $LN1@StringLeng $LN2@StringLeng: ; 753 : } ; 754 : return( int( wcsnlen( psz, sizeInXChar ) ) ); 0001a 48 8b 54 24 38 mov rdx, QWORD PTR sizeInXChar$[rsp] 0001f 48 8b 4c 24 30 mov rcx, QWORD PTR psz$[rsp] 00024 e8 00 00 00 00 call wcsnlen 00029 90 npad 1 $LN1@StringLeng: ; 755 : } 0002a 48 83 c4 28 add rsp, 40 ; 00000028H 0002e c3 ret 0 ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z _TEXT SEGMENT nAlloc$1 = 32 this$ = 64 nNewLength$ = 72 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer, COMDAT ; 557 : { $LN4: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 38 sub rsp, 56 ; 00000038H ; 558 : if( nNewLength == -1 ) 0000d 83 7c 24 48 ff cmp DWORD PTR nNewLength$[rsp], -1 00012 75 2a jne SHORT $LN2@ReleaseBuf ; 559 : { ; 560 : int nAlloc = GetData()->nAllocLength; 00014 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00019 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 0001e 8b 40 0c mov eax, DWORD PTR [rax+12] 00021 89 44 24 20 mov DWORD PTR nAlloc$1[rsp], eax ; 561 : nNewLength = StringLengthN( m_pszData, nAlloc); 00025 48 63 44 24 20 movsxd rax, DWORD PTR nAlloc$1[rsp] 0002a 48 8b d0 mov rdx, rax 0002d 48 8b 44 24 40 mov rax, QWORD PTR this$[rsp] 00032 48 8b 08 mov rcx, QWORD PTR [rax] 00035 e8 00 00 00 00 call ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN 0003a 89 44 24 48 mov DWORD PTR nNewLength$[rsp], eax $LN2@ReleaseBuf: ; 562 : } ; 563 : SetLength( nNewLength ); 0003e 8b 54 24 48 mov edx, DWORD PTR nNewLength$[rsp] 00042 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp] 00047 e8 00 00 00 00 call ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::SetLength ; 564 : } 0004c 48 83 c4 38 add rsp, 56 ; 00000038H 00050 c3 ret 0 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z _TEXT SEGMENT this$ = 48 nMinBufferLength$ = 56 ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z PROC ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer, COMDAT ; 507 : { $LN3: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx 00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00009 48 83 ec 28 sub rsp, 40 ; 00000028H ; 508 : return( PrepareWrite( nMinBufferLength ) ); 0000d 8b 54 24 38 mov edx, DWORD PTR nMinBufferLength$[rsp] 00011 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp] 00016 e8 00 00 00 00 call ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite ; 509 : } 0001b 48 83 c4 28 add rsp, 40 ; 00000028H 0001f c3 ret 0 ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?Release@CStringData@ATL@@QEAAXXZ _TEXT SEGMENT tv77 = 32 tv79 = 40 this$ = 64 ?Release@CStringData@ATL@@QEAAXXZ PROC ; ATL::CStringData::Release, COMDAT ; 85 : { $LN4: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 83 ec 38 sub rsp, 56 ; 00000038H ; 86 : ATLASSERT( nRefs != 0 ); ; 87 : ; 88 : if( _InterlockedDecrement( &nRefs ) <= 0 ) 00009 48 8b 44 24 40 mov rax, QWORD PTR this$[rsp] 0000e 48 83 c0 10 add rax, 16 00012 b9 ff ff ff ff mov ecx, -1 00017 f0 0f c1 08 lock xadd DWORD PTR [rax], ecx 0001b ff c9 dec ecx 0001d 8b c1 mov eax, ecx 0001f 85 c0 test eax, eax 00021 7f 2f jg SHORT $LN2@Release ; 89 : { ; 90 : pStringMgr->Free( this ); 00023 48 8b 44 24 40 mov rax, QWORD PTR this$[rsp] 00028 48 8b 00 mov rax, QWORD PTR [rax] 0002b 48 89 44 24 20 mov QWORD PTR tv77[rsp], rax 00030 48 8b 44 24 40 mov rax, QWORD PTR this$[rsp] 00035 48 8b 00 mov rax, QWORD PTR [rax] 00038 48 8b 00 mov rax, QWORD PTR [rax] 0003b 48 8b 40 08 mov rax, QWORD PTR [rax+8] 0003f 48 89 44 24 28 mov QWORD PTR tv79[rsp], rax 00044 48 8b 54 24 40 mov rdx, QWORD PTR this$[rsp] 00049 48 8b 4c 24 20 mov rcx, QWORD PTR tv77[rsp] 0004e ff 54 24 28 call QWORD PTR tv79[rsp] $LN2@Release: ; 91 : } ; 92 : } 00052 48 83 c4 38 add rsp, 56 ; 00000038H 00056 c3 ret 0 ?Release@CStringData@ATL@@QEAAXXZ ENDP ; ATL::CStringData::Release _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?IsShared@CStringData@ATL@@QEBA_NXZ _TEXT SEGMENT tv66 = 0 this$ = 32 ?IsShared@CStringData@ATL@@QEBA_NXZ PROC ; ATL::CStringData::IsShared, COMDAT ; 72 : { $LN5: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 83 ec 18 sub rsp, 24 ; 73 : return( nRefs > 1 ); 00009 48 8b 44 24 20 mov rax, QWORD PTR this$[rsp] 0000e 83 78 10 01 cmp DWORD PTR [rax+16], 1 00012 7e 09 jle SHORT $LN3@IsShared 00014 c7 04 24 01 00 00 00 mov DWORD PTR tv66[rsp], 1 0001b eb 07 jmp SHORT $LN4@IsShared $LN3@IsShared: 0001d c7 04 24 00 00 00 00 mov DWORD PTR tv66[rsp], 0 $LN4@IsShared: 00024 0f b6 04 24 movzx eax, BYTE PTR tv66[rsp] ; 74 : } 00028 48 83 c4 18 add rsp, 24 0002c c3 ret 0 ?IsShared@CStringData@ATL@@QEBA_NXZ ENDP ; ATL::CStringData::IsShared _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlsimpstr.h ; COMDAT ?data@CStringData@ATL@@QEAAPEAXXZ _TEXT SEGMENT this$ = 8 ?data@CStringData@ATL@@QEAAPEAXXZ PROC ; ATL::CStringData::data, COMDAT ; 58 : { 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx ; 59 : return (this+1); 00005 48 8b 44 24 08 mov rax, QWORD PTR this$[rsp] 0000a 48 83 c0 18 add rax, 24 ; 60 : } 0000e c3 ret 0 ?data@CStringData@ATL@@QEAAPEAXXZ ENDP ; ATL::CStringData::data _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\atlmfc\include\atlexcept.h ; COMDAT ?AtlThrowImpl@ATL@@YAXJ@Z _TEXT SEGMENT hr$ = 48 ?AtlThrowImpl@ATL@@YAXJ@Z PROC ; ATL::AtlThrowImpl, COMDAT ; 65 : { $LN5: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 48 83 ec 28 sub rsp, 40 ; 00000028H ; 66 : ATLTRACE(atlTraceException, 0, _T("AtlThrow: hr = 0x%x\n"), hr ); ; 67 : #ifdef _AFX ; 68 : if( hr == E_OUTOFMEMORY ) 00008 81 7c 24 30 0e 00 07 80 cmp DWORD PTR hr$[rsp], -2147024882 ; ffffffff8007000eH 00010 75 07 jne SHORT $LN2@AtlThrowIm ; 69 : { ; 70 : AfxThrowMemoryException(); 00012 e8 00 00 00 00 call ?AfxThrowMemoryException@@YAXXZ ; AfxThrowMemoryException ; 71 : } 00017 eb 09 jmp SHORT $LN3@AtlThrowIm $LN2@AtlThrowIm: ; 72 : else ; 73 : { ; 74 : AfxThrowOleException( hr ); 00019 8b 4c 24 30 mov ecx, DWORD PTR hr$[rsp] 0001d e8 00 00 00 00 call ?AfxThrowOleException@@YAXJ@Z ; AfxThrowOleException $LN3@AtlThrowIm: $LN4@AtlThrowIm: ; 75 : } ; 76 : #else ; 77 : throw CAtlException( hr ); ; 78 : #endif ; 79 : }; 00022 48 83 c4 28 add rsp, 40 ; 00000028H 00026 c3 ret 0 ?AtlThrowImpl@ATL@@YAXJ@Z ENDP ; ATL::AtlThrowImpl _TEXT ENDS ; Function compile flags: /Odtp ; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt\corecrt_memcpy_s.h ; COMDAT memcpy_s _TEXT SEGMENT tv66 = 32 tv75 = 36 tv79 = 40 _Expr_val$1 = 44 _Expr_val$2 = 48 _Expr_val$3 = 52 _Destination$ = 80 _DestinationSize$ = 88 _Source$ = 96 _SourceSize$ = 104 memcpy_s PROC ; COMDAT ; 45 : { 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 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 48 83 ec 48 sub rsp, 72 ; 00000048H ; 46 : if (_SourceSize == 0) 00018 48 83 7c 24 68 00 cmp QWORD PTR _SourceSize$[rsp], 0 0001e 75 07 jne SHORT $LN2@memcpy_s ; 47 : { ; 48 : return 0; 00020 33 c0 xor eax, eax 00022 e9 0d 01 00 00 jmp $LN1@memcpy_s $LN2@memcpy_s: ; 49 : } ; 50 : ; 51 : _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Destination != NULL, EINVAL); 00027 48 83 7c 24 50 00 cmp QWORD PTR _Destination$[rsp], 0 0002d 74 0a je SHORT $LN9@memcpy_s 0002f c7 44 24 20 01 00 00 00 mov DWORD PTR tv66[rsp], 1 00037 eb 08 jmp SHORT $LN10@memcpy_s $LN9@memcpy_s: 00039 c7 44 24 20 00 00 00 00 mov DWORD PTR tv66[rsp], 0 $LN10@memcpy_s: 00041 8b 44 24 20 mov eax, DWORD PTR tv66[rsp] 00045 89 44 24 2c mov DWORD PTR _Expr_val$1[rsp], eax 00049 83 7c 24 2c 00 cmp DWORD PTR _Expr_val$1[rsp], 0 0004e 75 1a jne SHORT $LN3@memcpy_s 00050 e8 00 00 00 00 call _errno 00055 c7 00 16 00 00 00 mov DWORD PTR [rax], 22 0005b e8 00 00 00 00 call _invalid_parameter_noinfo 00060 b8 16 00 00 00 mov eax, 22 00065 e9 ca 00 00 00 jmp $LN1@memcpy_s $LN3@memcpy_s: ; 52 : if (_Source == NULL || _DestinationSize < _SourceSize) 0006a 48 83 7c 24 60 00 cmp QWORD PTR _Source$[rsp], 0 00070 74 10 je SHORT $LN5@memcpy_s 00072 48 8b 44 24 68 mov rax, QWORD PTR _SourceSize$[rsp] 00077 48 39 44 24 58 cmp QWORD PTR _DestinationSize$[rsp], rax 0007c 0f 83 9c 00 00 00 jae $LN4@memcpy_s $LN5@memcpy_s: ; 53 : { ; 54 : memset(_Destination, 0, _DestinationSize); 00082 4c 8b 44 24 58 mov r8, QWORD PTR _DestinationSize$[rsp] 00087 33 d2 xor edx, edx 00089 48 8b 4c 24 50 mov rcx, QWORD PTR _Destination$[rsp] 0008e e8 00 00 00 00 call memset ; 55 : ; 56 : _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Source != NULL, EINVAL); 00093 48 83 7c 24 60 00 cmp QWORD PTR _Source$[rsp], 0 00099 74 0a je SHORT $LN11@memcpy_s 0009b c7 44 24 24 01 00 00 00 mov DWORD PTR tv75[rsp], 1 000a3 eb 08 jmp SHORT $LN12@memcpy_s $LN11@memcpy_s: 000a5 c7 44 24 24 00 00 00 00 mov DWORD PTR tv75[rsp], 0 $LN12@memcpy_s: 000ad 8b 44 24 24 mov eax, DWORD PTR tv75[rsp] 000b1 89 44 24 30 mov DWORD PTR _Expr_val$2[rsp], eax 000b5 83 7c 24 30 00 cmp DWORD PTR _Expr_val$2[rsp], 0 000ba 75 17 jne SHORT $LN6@memcpy_s 000bc e8 00 00 00 00 call _errno 000c1 c7 00 16 00 00 00 mov DWORD PTR [rax], 22 000c7 e8 00 00 00 00 call _invalid_parameter_noinfo 000cc b8 16 00 00 00 mov eax, 22 000d1 eb 61 jmp SHORT $LN1@memcpy_s $LN6@memcpy_s: ; 57 : _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_DestinationSize >= _SourceSize, ERANGE); 000d3 48 8b 44 24 68 mov rax, QWORD PTR _SourceSize$[rsp] 000d8 48 39 44 24 58 cmp QWORD PTR _DestinationSize$[rsp], rax 000dd 72 0a jb SHORT $LN13@memcpy_s 000df c7 44 24 28 01 00 00 00 mov DWORD PTR tv79[rsp], 1 000e7 eb 08 jmp SHORT $LN14@memcpy_s $LN13@memcpy_s: 000e9 c7 44 24 28 00 00 00 00 mov DWORD PTR tv79[rsp], 0 $LN14@memcpy_s: 000f1 8b 44 24 28 mov eax, DWORD PTR tv79[rsp] 000f5 89 44 24 34 mov DWORD PTR _Expr_val$3[rsp], eax 000f9 83 7c 24 34 00 cmp DWORD PTR _Expr_val$3[rsp], 0 000fe 75 17 jne SHORT $LN7@memcpy_s 00100 e8 00 00 00 00 call _errno 00105 c7 00 22 00 00 00 mov DWORD PTR [rax], 34 ; 00000022H 0010b e8 00 00 00 00 call _invalid_parameter_noinfo 00110 b8 22 00 00 00 mov eax, 34 ; 00000022H 00115 eb 1d jmp SHORT $LN1@memcpy_s $LN7@memcpy_s: ; 58 : ; 59 : // Unreachable, but required to suppress /analyze warnings: ; 60 : return EINVAL; 00117 b8 16 00 00 00 mov eax, 22 0011c eb 16 jmp SHORT $LN1@memcpy_s $LN4@memcpy_s: ; 61 : } ; 62 : memcpy(_Destination, _Source, _SourceSize); 0011e 4c 8b 44 24 68 mov r8, QWORD PTR _SourceSize$[rsp] 00123 48 8b 54 24 60 mov rdx, QWORD PTR _Source$[rsp] 00128 48 8b 4c 24 50 mov rcx, QWORD PTR _Destination$[rsp] 0012d e8 00 00 00 00 call memcpy ; 63 : return 0; 00132 33 c0 xor eax, eax $LN1@memcpy_s: ; 64 : } 00134 48 83 c4 48 add rsp, 72 ; 00000048H 00138 c3 ret 0 memcpy_s ENDP _TEXT ENDS ; Function compile flags: /Odtp ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.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\ProxySocket\CBase64Coding.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\ProxySocket\CBase64Coding.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\ProxySocket\CBase64Coding.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