; Listing generated by Microsoft (R) Optimizing Compiler Version 19.34.31933.0 include listing.inc INCLUDELIB LIBCMT INCLUDELIB OLDNAMES 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 ??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ ; `string' 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$?__empty_global_delete@@YAXPEAX@Z DD imagerel $LN3 DD imagerel $LN3+19 DD imagerel $unwind$?__empty_global_delete@@YAXPEAX@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?__empty_global_delete@@YAXPEAX_K@Z DD imagerel $LN3 DD imagerel $LN3+24 DD imagerel $unwind$?__empty_global_delete@@YAXPEAX_K@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DD imagerel $LN3 DD imagerel $LN3+24 DD imagerel $unwind$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DD imagerel $LN3 DD imagerel $LN3+29 DD imagerel $unwind$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$memcpy_s DD imagerel memcpy_s DD imagerel memcpy_s+292 DD imagerel $unwind$memcpy_s pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?AtlThrowImpl@ATL@@YAXJ@Z DD imagerel $LN5 DD imagerel $LN5+44 DD imagerel $unwind$?AtlThrowImpl@ATL@@YAXJ@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?data@CStringData@ATL@@QEAAPEAXXZ DD imagerel $LN3 DD imagerel $LN3+27 DD imagerel $unwind$?data@CStringData@ATL@@QEAAPEAXXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?IsShared@CStringData@ATL@@QEBA_NXZ DD imagerel $LN5 DD imagerel $LN5+49 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+86 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+37 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+80 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+51 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+27 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+42 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+257 DD imagerel $unwind$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ DD imagerel $LN3 DD imagerel $LN3+30 DD imagerel $unwind$?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z DD imagerel $LN5 DD imagerel $LN5+119 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+178 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+142 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$?GetSize@CByteArray@@QEBA_JXZ DD imagerel $LN3 DD imagerel $LN3+27 DD imagerel $unwind$?GetSize@CByteArray@@QEBA_JXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?RemoveAll@CByteArray@@QEAAXXZ DD imagerel $LN3 DD imagerel $LN3+39 DD imagerel $unwind$?RemoveAll@CByteArray@@QEAAXXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?SetAt@CByteArray@@QEAAX_JE@Z DD imagerel $LN5 DD imagerel $LN5+76 DD imagerel $unwind$?SetAt@CByteArray@@QEAAX_JE@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?GetData@CByteArray@@QEBAPEBEXZ DD imagerel $LN3 DD imagerel $LN3+27 DD imagerel $unwind$?GetData@CByteArray@@QEBAPEBEXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ DD imagerel $LN3 DD imagerel $LN3+26 DD imagerel $unwind$??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z DD imagerel $LN3 DD imagerel $LN3+37 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+33 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+80 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+51 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+27 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+42 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+251 DD imagerel $unwind$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ DD imagerel $LN3 DD imagerel $LN3+30 DD imagerel $unwind$?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z DD imagerel $LN5 DD imagerel $LN5+119 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+178 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+142 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+1272 DD imagerel $unwind$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$??0CBase64Coding@@QEAA@XZ DD imagerel $LN3 DD imagerel $LN3+55 DD imagerel $unwind$??0CBase64Coding@@QEAA@XZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$??1CBase64Coding@@UEAA@XZ DD imagerel $LN3 DD imagerel $LN3+33 DD imagerel $unwind$??1CBase64Coding@@UEAA@XZ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD imagerel $LN23 DD imagerel $LN23+991 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+991 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+913 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+917 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+845 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+813 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+838 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+62 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+117 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 ??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ CONST SEGMENT ??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ DB 'ABCDEFGHIJKLMNOPQ' DB 'RSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', 00H ; `string' CONST 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 05031c01H DD 09219031cH DD 05015H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$??_GCBase64Coding@@UEAAPEAXI@Z DD 025031301H DD 0b20e2313H DD 0500aH xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 028H DW 032cH voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Encode2@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 025062f19H DD 0119231eH DD 07012001cH DD 050106011H DD imagerel __GSHandlerCheck DD 0d8H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 02dH DW 0313H voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z DD 025063419H DD 011e2323H DD 07017001cH DD 050156016H DD imagerel __GSHandlerCheck DD 0d8H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 02dH DW 0333H voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 025063419H DD 011e2323H DD 07017001cH DD 050156016H DD imagerel __GSHandlerCheck DD 0d8H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 028H DW 037bH voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z DD 025062f19H DD 0119231eH DD 07012001cH DD 050106011H DD imagerel __GSHandlerCheck DD 0d8H xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 028H DW 0377H voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD 025062f19H DD 0119231eH DD 07012001cH DD 050106011H DD imagerel __GSHandlerCheck DD 0d0H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Decode@CBase64Coding@@UEAAHAEBV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@AEAVCByteArray@@@Z DD 025031c01H DD 0f217231cH DD 05010H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z DD 025031c01H DD 0f217231cH DD 05010H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$??1CBase64Coding@@UEAA@XZ DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$??0CBase64Coding@@QEAA@XZ DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ DD 025030f01H DD 0b20a230fH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 025031301H DD 0b20e2313H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 025031601H DD 0f2112316H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 025031301H DD 0d20e2313H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z DD 025031301H DD 0d20e2313H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z DD 025041601H DD 01112316H DD 0500a0012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD 025031401H DD 0b20f2314H DD 0500bH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ DD 025030b01H DD 0b206230bH DD 05002H 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 025031419H DD 0b20f2314H DD 0500bH 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 025031301H DD 0d20e2313H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ DD 025030f01H DD 0b20a230fH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z DD 025031301H DD 0b20e2313H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetData@CByteArray@@QEBAPEBEXZ DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?SetAt@CByteArray@@QEAAX_JE@Z DD 025031901H DD 0b2142319H DD 05010H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?RemoveAll@CByteArray@@QEAAXXZ DD 025030f01H DD 0b20a230fH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetSize@CByteArray@@QEBA_JXZ DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 025031301H DD 0b20e2313H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 025031601H DD 0f2112316H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 025031301H DD 0d20e2313H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z DD 025031301H DD 0d20e2313H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z DD 025041601H DD 01112316H DD 0500a0012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z DD 025031401H DD 0b20f2314H DD 0500bH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ DD 025030b01H DD 0b206230bH DD 05002H 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 025031419H DD 0b20f2314H DD 0500bH 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 025031301H DD 0d20e2313H DD 0500aH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z DD 025031301H DD 0b20e2313H DD 0500aH xdata ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DB 01cH voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$?Release@CStringData@ATL@@QEAAXXZ DD 025030f01H DD 0d20a230fH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?IsShared@CStringData@ATL@@QEBA_NXZ DD 05030d01H DD 0920a030dH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?data@CStringData@ATL@@QEAAPEAXXZ DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?AtlThrowImpl@ATL@@YAXJ@Z DD 025030e01H DD 0b209230eH DD 05005H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$memcpy_s DD 025031e01H DD 0d219231eH DD 05015H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DD 05031701H DD 072140317H DD 05010H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DD 05031201H DD 0720f0312H DD 0500bH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?__empty_global_delete@@YAXPEAX_K@Z DD 05031201H DD 0720f0312H DD 0500bH xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?__empty_global_delete@@YAXPEAX@Z DD 05030d01H DD 0720a030dH DD 05006H xdata ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?__get_character@@YAEPEBE0AEAHH@Z _TEXT SEGMENT return_value$ = 0 buffer$ = 96 decoder_table$ = 104 index$ = 112 size_of_buffer$ = 120 ?__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 55 push rbp 00015 48 83 ec 50 sub rsp, 80 ; 00000050H 00019 48 8b ec mov rbp, rsp ; 42 : BYTE return_value = 0; 0001c c6 45 00 00 mov BYTE PTR return_value$[rbp], 0 $LN4@get_charac: ; 43 : ; 44 : do ; 45 : { ; 46 : if ( index >= size_of_buffer ) 00020 48 8b 45 70 mov rax, QWORD PTR index$[rbp] 00024 8b 4d 78 mov ecx, DWORD PTR size_of_buffer$[rbp] 00027 39 08 cmp DWORD PTR [rax], ecx 00029 7c 04 jl SHORT $LN5@get_charac ; 47 : { ; 48 : return( BASE64_END_OF_BUFFER ); 0002b b0 fd mov al, 253 ; 000000fdH 0002d eb 40 jmp SHORT $LN1@get_charac $LN5@get_charac: ; 49 : } ; 50 : ; 51 : return_value = buffer[ index ]; 0002f 48 8b 45 70 mov rax, QWORD PTR index$[rbp] 00033 48 63 00 movsxd rax, DWORD PTR [rax] 00036 48 8b 4d 60 mov rcx, QWORD PTR buffer$[rbp] 0003a 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0003e 88 45 00 mov BYTE PTR return_value$[rbp], al ; 52 : index++; 00041 48 8b 45 70 mov rax, QWORD PTR index$[rbp] 00045 8b 00 mov eax, DWORD PTR [rax] 00047 ff c0 inc eax 00049 48 8b 4d 70 mov rcx, QWORD PTR index$[rbp] 0004d 89 01 mov DWORD PTR [rcx], eax ; 53 : } ; 54 : while( return_value != END_OF_BASE64_ENCODED_DATA && 0004f 0f b6 45 00 movzx eax, BYTE PTR return_value$[rbp] 00053 83 f8 3d cmp eax, 61 ; 0000003dH 00056 74 13 je SHORT $LN6@get_charac 00058 0f b6 45 00 movzx eax, BYTE PTR return_value$[rbp] 0005c 48 8b 4d 68 mov rcx, QWORD PTR decoder_table$[rbp] 00060 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00064 3d fe 00 00 00 cmp eax, 254 ; 000000feH 00069 74 b5 je SHORT $LN4@get_charac $LN6@get_charac: ; 55 : decoder_table[ return_value ] == BASE64_IGNORABLE_CHARACTER ); ; 56 : ; 57 : return( return_value ); 0006b 0f b6 45 00 movzx eax, BYTE PTR return_value$[rbp] $LN1@get_charac: ; 58 : } 0006f 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00073 5d pop rbp 00074 c3 ret 0 ?__get_character@@YAEPEBE0AEAHH@Z ENDP ; __get_character _TEXT ENDS ; Function compile flags: /Odtp /ZI ; COMDAT ??_GCBase64Coding@@UEAAPEAXI@Z _TEXT SEGMENT this$ = 80 __flags$ = 88 ??_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 55 push rbp 0000a 48 83 ec 60 sub rsp, 96 ; 00000060H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 00013 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00017 e8 00 00 00 00 call ??1CBase64Coding@@UEAA@XZ ; CBase64Coding::~CBase64Coding 0001c 8b 45 58 mov eax, DWORD PTR __flags$[rbp] 0001f 83 e0 01 and eax, 1 00022 85 c0 test eax, eax 00024 74 0e je SHORT $LN2@scalar 00026 ba 08 01 00 00 mov edx, 264 ; 00000108H 0002b 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0002f e8 00 00 00 00 call ??3@YAXPEAX_K@Z ; operator delete $LN2@scalar: 00034 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00038 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 0003c 5d pop rbp 0003d c3 ret 0 ??_GCBase64Coding@@UEAAPEAXI@Z ENDP ; CBase64Coding::`scalar deleting destructor' _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 alphabet$ = 0 loop_index$ = 80 number_of_bytes_to_encode$ = 84 byte_to_add$ = 88 byte_1$ = 89 byte_2$ = 90 byte_3$ = 91 input_buffer$ = 96 number_of_bytes_encoded$ = 104 destination$ = 112 __$ArrayPad$ = 184 this$ = 224 source$ = 232 destination_string$ = 240 ?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 55 push rbp 00010 56 push rsi 00011 57 push rdi 00012 48 81 ec e0 00 00 00 sub rsp, 224 ; 000000e0H 00019 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 0001e 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 00025 48 33 c5 xor rax, rbp 00028 48 89 85 b8 00 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax ; 981 : ; 982 : const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 0002f 48 8d 45 00 lea rax, QWORD PTR alphabet$[rbp] 00033 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ 0003a 48 8b f8 mov rdi, rax 0003d 48 8b f1 mov rsi, rcx 00040 b9 41 00 00 00 mov ecx, 65 ; 00000041H 00045 f3 a4 rep movsb ; 983 : ; 984 : int loop_index = 0; 00047 c7 45 50 00 00 00 00 mov DWORD PTR loop_index$[rbp], 0 ; 985 : int number_of_bytes_to_encode = (int)source.GetSize(); 0004e 48 8b 8d e8 00 00 00 mov rcx, QWORD PTR source$[rbp] 00055 e8 00 00 00 00 call ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize 0005a 89 45 54 mov DWORD PTR number_of_bytes_to_encode$[rbp], eax ; 986 : ; 987 : BYTE byte_to_add = 0; 0005d c6 45 58 00 mov BYTE PTR byte_to_add$[rbp], 0 ; 988 : BYTE byte_1 = 0; 00061 c6 45 59 00 mov BYTE PTR byte_1$[rbp], 0 ; 989 : BYTE byte_2 = 0; 00065 c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 990 : BYTE byte_3 = 0; 00069 c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 991 : ; 992 : const BYTE * input_buffer = source.GetData(); 0006d 48 8b 8d e8 00 00 00 mov rcx, QWORD PTR source$[rbp] 00074 e8 00 00 00 00 call ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData 00079 48 89 45 60 mov QWORD PTR input_buffer$[rbp], rax ; 993 : ; 994 : DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 0007d f2 0f 2a 45 54 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp] 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 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], 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; 00094 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00097 83 c0 02 add eax, 2 0009a 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], 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 ); 0009d 8b 55 68 mov edx, DWORD PTR number_of_bytes_encoded$[rbp] 000a0 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 000a7 e8 00 00 00 00 call ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer 000ac 48 89 45 70 mov QWORD PTR destination$[rbp], rax ; 1006 : ; 1007 : number_of_bytes_encoded = 0; 000b0 c7 45 68 00 00 00 00 mov DWORD PTR number_of_bytes_encoded$[rbp], 0 $LN2@Encode2: ; 1008 : ; 1009 : while( loop_index < number_of_bytes_to_encode ) 000b7 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 000ba 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 000bd 0f 8d 32 02 00 00 jge $LN3@Encode2 ; 1010 : { ; 1011 : // Output the first byte ; 1012 : ; 1013 : byte_1 = input_buffer[ loop_index ]; 000c3 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 000c7 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 000cb 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000cf 88 45 59 mov BYTE PTR byte_1$[rbp], al ; 1014 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000d2 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 000d6 c1 f8 02 sar eax, 2 000d9 48 98 cdqe 000db 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 000e0 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 1015 : ; 1016 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 000e3 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 000e7 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 000ea 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 000ee 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1017 : number_of_bytes_encoded++; 000f2 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 000f5 ff c0 inc eax 000f7 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 1018 : ; 1019 : loop_index++; 000fa 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 000fd ff c0 inc eax 000ff 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 1020 : ; 1021 : if ( loop_index >= number_of_bytes_to_encode ) 00102 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 00105 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 00108 0f 8c 94 00 00 00 jl $LN4@Encode2 ; 1022 : { ; 1023 : // We're at the end of the data to encode ; 1024 : ; 1025 : byte_2 = 0; 0010e c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 1026 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 00112 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 00116 83 e0 03 and eax, 3 00119 c1 e0 04 shl eax, 4 0011c 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 00120 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 00126 c1 f9 04 sar ecx, 4 00129 0b c1 or eax, ecx 0012b 48 98 cdqe 0012d 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 00132 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 1027 : ; 1028 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00135 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 00139 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 0013c 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00140 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1029 : number_of_bytes_encoded++; 00144 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00147 ff c0 inc eax 00149 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 1030 : ; 1031 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 0014c 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0014f b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00154 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00158 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1032 : number_of_bytes_encoded++; 0015c 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0015f ff c0 inc eax 00161 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 1033 : ; 1034 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00164 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00167 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 0016c 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00170 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; 00174 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00177 ff c0 inc eax 00179 8b c0 mov eax, eax 0017b 33 c9 xor ecx, ecx 0017d 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00181 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1041 : ; 1042 : destination_string.ReleaseBuffer( -1 ); 00185 ba ff ff ff ff mov edx, -1 0018a 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 00191 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 1043 : ; 1044 : return( TRUE ); 00196 b8 01 00 00 00 mov eax, 1 0019b e9 8c 01 00 00 jmp $LN1@Encode2 ; 1045 : } 001a0 eb 0f jmp SHORT $LN5@Encode2 $LN4@Encode2: ; 1046 : else ; 1047 : { ; 1048 : byte_2 = input_buffer[ loop_index ]; 001a2 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 001a6 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 001aa 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001ae 88 45 5a mov BYTE PTR byte_2$[rbp], al $LN5@Encode2: ; 1049 : } ; 1050 : ; 1051 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 001b1 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 001b5 83 e0 03 and eax, 3 001b8 c1 e0 04 shl eax, 4 001bb 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 001bf 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 001c5 c1 f9 04 sar ecx, 4 001c8 0b c1 or eax, ecx 001ca 48 98 cdqe 001cc 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 001d1 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 1052 : ; 1053 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 001d4 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 001d8 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 001db 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 001df 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1054 : number_of_bytes_encoded++; 001e3 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 001e6 ff c0 inc eax 001e8 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 1055 : ; 1056 : loop_index++; 001eb 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 001ee ff c0 inc eax 001f0 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 1057 : ; 1058 : if ( loop_index >= number_of_bytes_to_encode ) 001f3 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 001f6 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 001f9 7c 7c jl SHORT $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; 001fb c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 1062 : ; 1063 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 001ff 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 00203 83 e0 0f and eax, 15 00206 c1 e0 02 shl eax, 2 00209 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 0020d 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00213 c1 f9 06 sar ecx, 6 00216 0b c1 or eax, ecx 00218 48 98 cdqe 0021a 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 0021f 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 1064 : ; 1065 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00222 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 00226 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 00229 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 0022d 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1066 : number_of_bytes_encoded++; 00231 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00234 ff c0 inc eax 00236 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 1067 : ; 1068 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00239 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0023c b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00241 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00245 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; 00249 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0024c ff c0 inc eax 0024e 8b c0 mov eax, eax 00250 33 c9 xor ecx, ecx 00252 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00256 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1075 : ; 1076 : destination_string.ReleaseBuffer( -1 ); 0025a ba ff ff ff ff mov edx, -1 0025f 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 00266 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 1077 : ; 1078 : return( TRUE ); 0026b b8 01 00 00 00 mov eax, 1 00270 e9 b7 00 00 00 jmp $LN1@Encode2 ; 1079 : } 00275 eb 0f jmp SHORT $LN7@Encode2 $LN6@Encode2: ; 1080 : else ; 1081 : { ; 1082 : byte_3 = input_buffer[ loop_index ]; 00277 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 0027b 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 0027f 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00283 88 45 5b mov BYTE PTR byte_3$[rbp], al $LN7@Encode2: ; 1083 : } ; 1084 : ; 1085 : loop_index++; 00286 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 00289 ff c0 inc eax 0028b 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 1086 : ; 1087 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 0028e 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 00292 83 e0 0f and eax, 15 00295 c1 e0 02 shl eax, 2 00298 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 0029c 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 002a2 c1 f9 06 sar ecx, 6 002a5 0b c1 or eax, ecx 002a7 48 98 cdqe 002a9 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 002ae 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 1088 : ; 1089 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 002b1 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 002b5 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 002b8 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 002bc 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1090 : number_of_bytes_encoded++; 002c0 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002c3 ff c0 inc eax 002c5 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 1091 : ; 1092 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 002c8 0f b6 45 5b movzx eax, BYTE PTR byte_3$[rbp] 002cc 83 e0 3f and eax, 63 ; 0000003fH 002cf 48 98 cdqe 002d1 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 002d6 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 1093 : ; 1094 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 002d9 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 002dd 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 002e0 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 002e4 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 1095 : number_of_bytes_encoded++; 002e8 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002eb ff c0 inc eax 002ed 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], 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 : } 002f0 e9 c2 fd ff ff jmp $LN2@Encode2 $LN3@Encode2: ; 1106 : ; 1107 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 002f5 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002f8 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 002fd 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00301 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; 00305 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00308 ff c0 inc eax 0030a 8b c0 mov eax, eax 0030c 33 c9 xor ecx, ecx 0030e 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00312 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 1114 : ; 1115 : destination_string.ReleaseBuffer( -1 ); 00316 ba ff ff ff ff mov edx, -1 0031b 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 00322 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 1116 : ; 1117 : return( TRUE ); 00327 b8 01 00 00 00 mov eax, 1 $LN1@Encode2: ; 1118 : } 0032c 48 8b 8d b8 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] 00333 48 33 cd xor rcx, rbp 00336 e8 00 00 00 00 call __security_check_cookie 0033b 48 8d a5 c0 00 00 00 lea rsp, QWORD PTR [rbp+192] 00342 5f pop rdi 00343 5e pop rsi 00344 5d pop rbp 00345 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 /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z _TEXT SEGMENT alphabet$ = 0 loop_index$ = 80 number_of_bytes_to_encode$ = 84 byte_to_add$ = 88 byte_1$ = 89 byte_2$ = 90 byte_3$ = 91 input_buffer$ = 96 number_of_bytes_encoded$ = 104 destination$ = 112 __$ArrayPad$ = 184 this$ = 224 pSource$ = 232 lSource$ = 240 destination_string$ = 248 ?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 55 push rbp 00015 56 push rsi 00016 57 push rdi 00017 48 81 ec e0 00 00 00 sub rsp, 224 ; 000000e0H 0001e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 00023 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 0002a 48 33 c5 xor rax, rbp 0002d 48 89 85 b8 00 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax ; 838 : ; 839 : const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 00034 48 8d 45 00 lea rax, QWORD PTR alphabet$[rbp] 00038 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ 0003f 48 8b f8 mov rdi, rax 00042 48 8b f1 mov rsi, rcx 00045 b9 41 00 00 00 mov ecx, 65 ; 00000041H 0004a f3 a4 rep movsb ; 840 : ; 841 : int loop_index = 0; 0004c c7 45 50 00 00 00 00 mov DWORD PTR loop_index$[rbp], 0 ; 842 : int number_of_bytes_to_encode = lSource; 00053 8b 85 f0 00 00 00 mov eax, DWORD PTR lSource$[rbp] 00059 89 45 54 mov DWORD PTR number_of_bytes_to_encode$[rbp], eax ; 843 : ; 844 : BYTE byte_to_add = 0; 0005c c6 45 58 00 mov BYTE PTR byte_to_add$[rbp], 0 ; 845 : BYTE byte_1 = 0; 00060 c6 45 59 00 mov BYTE PTR byte_1$[rbp], 0 ; 846 : BYTE byte_2 = 0; 00064 c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 847 : BYTE byte_3 = 0; 00068 c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 848 : ; 849 : const BYTE * input_buffer = pSource; 0006c 48 8b 85 e8 00 00 00 mov rax, QWORD PTR pSource$[rbp] 00073 48 89 45 60 mov QWORD PTR input_buffer$[rbp], rax ; 850 : ; 851 : DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 00077 f2 0f 2a 45 54 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp] 0007c f2 0f 5e 05 00 00 00 00 divsd xmm0, QWORD PTR __real@3fe8000000000000 00084 f2 48 0f 2c c0 cvttsd2si rax, xmm0 00089 ff c0 inc eax 0008b 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], 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 ); 0008e 33 d2 xor edx, edx 00090 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00093 b9 48 00 00 00 mov ecx, 72 ; 00000048H 00098 f7 f1 div ecx 0009a 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 0009d 8d 44 41 02 lea eax, DWORD PTR [rcx+rax*2+2] 000a1 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 860 : ; 861 : char * destination = destination_string.GetBuffer( number_of_bytes_encoded ); 000a4 8b 55 68 mov edx, DWORD PTR number_of_bytes_encoded$[rbp] 000a7 48 8b 8d f8 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 000ae e8 00 00 00 00 call ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::GetBuffer 000b3 48 89 45 70 mov QWORD PTR destination$[rbp], rax ; 862 : ; 863 : number_of_bytes_encoded = 0; 000b7 c7 45 68 00 00 00 00 mov DWORD PTR number_of_bytes_encoded$[rbp], 0 $LN2@EncodeA: ; 864 : ; 865 : while( loop_index < number_of_bytes_to_encode ) 000be 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 000c1 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 000c4 0f 8d 19 02 00 00 jge $LN3@EncodeA ; 866 : { ; 867 : // Output the first byte ; 868 : ; 869 : byte_1 = input_buffer[ loop_index ]; 000ca 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 000ce 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 000d2 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000d6 88 45 59 mov BYTE PTR byte_1$[rbp], al ; 870 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000d9 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 000dd c1 f8 02 sar eax, 2 000e0 48 98 cdqe 000e2 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 000e7 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 871 : ; 872 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 000ea 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 000ed 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 000f1 0f b6 55 58 movzx edx, BYTE PTR byte_to_add$[rbp] 000f5 88 14 01 mov BYTE PTR [rcx+rax], dl ; 873 : number_of_bytes_encoded++; 000f8 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 000fb ff c0 inc eax 000fd 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 874 : ; 875 : loop_index++; 00100 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 00103 ff c0 inc eax 00105 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 876 : ; 877 : if ( loop_index >= number_of_bytes_to_encode ) 00108 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 0010b 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 0010e 0f 8c 87 00 00 00 jl $LN4@EncodeA ; 878 : { ; 879 : // We're at the end of the data to encode ; 880 : ; 881 : byte_2 = 0; 00114 c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 882 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 00118 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 0011c 83 e0 03 and eax, 3 0011f c1 e0 04 shl eax, 4 00122 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 00126 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 0012c c1 f9 04 sar ecx, 4 0012f 0b c1 or eax, ecx 00131 48 98 cdqe 00133 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 00138 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 883 : ; 884 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 0013b 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0013e 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 00142 0f b6 55 58 movzx edx, BYTE PTR byte_to_add$[rbp] 00146 88 14 01 mov BYTE PTR [rcx+rax], dl ; 885 : number_of_bytes_encoded++; 00149 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0014c ff c0 inc eax 0014e 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 886 : ; 887 : destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA ); 00151 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00154 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 00158 c6 04 01 3d mov BYTE PTR [rcx+rax], 61 ; 0000003dH ; 888 : number_of_bytes_encoded++; 0015c 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0015f ff c0 inc eax 00161 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 889 : ; 890 : destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA ); 00164 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00167 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 0016b 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; 0016f 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00172 ff c0 inc eax 00174 8b c0 mov eax, eax 00176 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 0017a c6 04 01 00 mov BYTE PTR [rcx+rax], 0 ; 897 : ; 898 : destination_string.ReleaseBuffer( -1 ); 0017e ba ff ff ff ff mov edx, -1 00183 48 8b 8d f8 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 0018a e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer ; 899 : ; 900 : return( TRUE ); 0018f b8 01 00 00 00 mov eax, 1 00194 e9 7a 01 00 00 jmp $LN1@EncodeA ; 901 : } 00199 eb 0f jmp SHORT $LN5@EncodeA $LN4@EncodeA: ; 902 : else ; 903 : { ; 904 : byte_2 = input_buffer[ loop_index ]; 0019b 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 0019f 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 001a3 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001a7 88 45 5a mov BYTE PTR byte_2$[rbp], al $LN5@EncodeA: ; 905 : } ; 906 : ; 907 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 001aa 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 001ae 83 e0 03 and eax, 3 001b1 c1 e0 04 shl eax, 4 001b4 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 001b8 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 001be c1 f9 04 sar ecx, 4 001c1 0b c1 or eax, ecx 001c3 48 98 cdqe 001c5 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 001ca 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 908 : ; 909 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 001cd 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 001d0 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 001d4 0f b6 55 58 movzx edx, BYTE PTR byte_to_add$[rbp] 001d8 88 14 01 mov BYTE PTR [rcx+rax], dl ; 910 : number_of_bytes_encoded++; 001db 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 001de ff c0 inc eax 001e0 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 911 : ; 912 : loop_index++; 001e3 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 001e6 ff c0 inc eax 001e8 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 913 : ; 914 : if ( loop_index >= number_of_bytes_to_encode ) 001eb 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 001ee 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 001f1 7c 74 jl SHORT $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; 001f3 c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 918 : ; 919 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 001f7 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 001fb 83 e0 0f and eax, 15 001fe c1 e0 02 shl eax, 2 00201 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 00205 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 0020b c1 f9 06 sar ecx, 6 0020e 0b c1 or eax, ecx 00210 48 98 cdqe 00212 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 00217 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 920 : ; 921 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 0021a 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0021d 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 00221 0f b6 55 58 movzx edx, BYTE PTR byte_to_add$[rbp] 00225 88 14 01 mov BYTE PTR [rcx+rax], dl ; 922 : number_of_bytes_encoded++; 00228 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0022b ff c0 inc eax 0022d 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 923 : ; 924 : destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA ); 00230 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00233 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 00237 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; 0023b 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0023e ff c0 inc eax 00240 8b c0 mov eax, eax 00242 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 00246 c6 04 01 00 mov BYTE PTR [rcx+rax], 0 ; 931 : ; 932 : destination_string.ReleaseBuffer( -1 ); 0024a ba ff ff ff ff mov edx, -1 0024f 48 8b 8d f8 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 00256 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer ; 933 : ; 934 : return( TRUE ); 0025b b8 01 00 00 00 mov eax, 1 00260 e9 ae 00 00 00 jmp $LN1@EncodeA ; 935 : } 00265 eb 0f jmp SHORT $LN7@EncodeA $LN6@EncodeA: ; 936 : else ; 937 : { ; 938 : byte_3 = input_buffer[ loop_index ]; 00267 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 0026b 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 0026f 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00273 88 45 5b mov BYTE PTR byte_3$[rbp], al $LN7@EncodeA: ; 939 : } ; 940 : ; 941 : loop_index++; 00276 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 00279 ff c0 inc eax 0027b 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 942 : ; 943 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 0027e 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 00282 83 e0 0f and eax, 15 00285 c1 e0 02 shl eax, 2 00288 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 0028c 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00292 c1 f9 06 sar ecx, 6 00295 0b c1 or eax, ecx 00297 48 98 cdqe 00299 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 0029e 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 944 : ; 945 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 002a1 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002a4 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 002a8 0f b6 55 58 movzx edx, BYTE PTR byte_to_add$[rbp] 002ac 88 14 01 mov BYTE PTR [rcx+rax], dl ; 946 : number_of_bytes_encoded++; 002af 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002b2 ff c0 inc eax 002b4 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 947 : ; 948 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 002b7 0f b6 45 5b movzx eax, BYTE PTR byte_3$[rbp] 002bb 83 e0 3f and eax, 63 ; 0000003fH 002be 48 98 cdqe 002c0 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 002c5 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 949 : ; 950 : destination[ number_of_bytes_encoded ] = static_cast< char >( byte_to_add ); 002c8 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002cb 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 002cf 0f b6 55 58 movzx edx, BYTE PTR byte_to_add$[rbp] 002d3 88 14 01 mov BYTE PTR [rcx+rax], dl ; 951 : number_of_bytes_encoded++; 002d6 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002d9 ff c0 inc eax 002db 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], 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 : } 002de e9 db fd ff ff jmp $LN2@EncodeA $LN3@EncodeA: ; 964 : ; 965 : destination[ number_of_bytes_encoded ] = static_cast< char >( END_OF_BASE64_ENCODED_DATA ); 002e3 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002e6 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 002ea 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; 002ee 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002f1 ff c0 inc eax 002f3 8b c0 mov eax, eax 002f5 48 8b 4d 70 mov rcx, QWORD PTR destination$[rbp] 002f9 c6 04 01 00 mov BYTE PTR [rcx+rax], 0 ; 972 : ; 973 : destination_string.ReleaseBuffer( -1 ); 002fd ba ff ff ff ff mov edx, -1 00302 48 8b 8d f8 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 00309 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<char,0>::ReleaseBuffer ; 974 : ; 975 : return( TRUE ); 0030e b8 01 00 00 00 mov eax, 1 $LN1@EncodeA: ; 976 : } 00313 48 8b 8d b8 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] 0031a 48 33 cd xor rcx, rbp 0031d e8 00 00 00 00 call __security_check_cookie 00322 48 8d a5 c0 00 00 00 lea rsp, QWORD PTR [rbp+192] 00329 5f pop rdi 0032a 5e pop rsi 0032b 5d pop rbp 0032c c3 ret 0 ?EncodeA@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::EncodeA _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z _TEXT SEGMENT alphabet$ = 0 loop_index$ = 80 number_of_bytes_to_encode$ = 84 byte_to_add$ = 88 byte_1$ = 89 byte_2$ = 90 byte_3$ = 91 input_buffer$ = 96 number_of_bytes_encoded$ = 104 destination$ = 112 __$ArrayPad$ = 184 this$ = 224 pSource$ = 232 lSource$ = 240 destination_string$ = 248 ?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 55 push rbp 00015 56 push rsi 00016 57 push rdi 00017 48 81 ec e0 00 00 00 sub rsp, 224 ; 000000e0H 0001e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 00023 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 0002a 48 33 c5 xor rax, rbp 0002d 48 89 85 b8 00 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax ; 696 : ; 697 : const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 00034 48 8d 45 00 lea rax, QWORD PTR alphabet$[rbp] 00038 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ 0003f 48 8b f8 mov rdi, rax 00042 48 8b f1 mov rsi, rcx 00045 b9 41 00 00 00 mov ecx, 65 ; 00000041H 0004a f3 a4 rep movsb ; 698 : ; 699 : int loop_index = 0; 0004c c7 45 50 00 00 00 00 mov DWORD PTR loop_index$[rbp], 0 ; 700 : int number_of_bytes_to_encode = lSource; 00053 8b 85 f0 00 00 00 mov eax, DWORD PTR lSource$[rbp] 00059 89 45 54 mov DWORD PTR number_of_bytes_to_encode$[rbp], eax ; 701 : ; 702 : BYTE byte_to_add = 0; 0005c c6 45 58 00 mov BYTE PTR byte_to_add$[rbp], 0 ; 703 : BYTE byte_1 = 0; 00060 c6 45 59 00 mov BYTE PTR byte_1$[rbp], 0 ; 704 : BYTE byte_2 = 0; 00064 c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 705 : BYTE byte_3 = 0; 00068 c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 706 : ; 707 : const BYTE * input_buffer = pSource; 0006c 48 8b 85 e8 00 00 00 mov rax, QWORD PTR pSource$[rbp] 00073 48 89 45 60 mov QWORD PTR input_buffer$[rbp], rax ; 708 : ; 709 : DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 00077 f2 0f 2a 45 54 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp] 0007c f2 0f 5e 05 00 00 00 00 divsd xmm0, QWORD PTR __real@3fe8000000000000 00084 f2 48 0f 2c c0 cvttsd2si rax, xmm0 00089 ff c0 inc eax 0008b 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], 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 ); 0008e 33 d2 xor edx, edx 00090 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00093 b9 48 00 00 00 mov ecx, 72 ; 00000048H 00098 f7 f1 div ecx 0009a 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 0009d 8d 44 41 02 lea eax, DWORD PTR [rcx+rax*2+2] 000a1 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 718 : ; 719 : LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded ); 000a4 8b 55 68 mov edx, DWORD PTR number_of_bytes_encoded$[rbp] 000a7 48 8b 8d f8 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 000ae e8 00 00 00 00 call ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer 000b3 48 89 45 70 mov QWORD PTR destination$[rbp], rax ; 720 : ; 721 : number_of_bytes_encoded = 0; 000b7 c7 45 68 00 00 00 00 mov DWORD PTR number_of_bytes_encoded$[rbp], 0 $LN2@Encode: ; 722 : ; 723 : while( loop_index < number_of_bytes_to_encode ) 000be 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 000c1 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 000c4 0f 8d 32 02 00 00 jge $LN3@Encode ; 724 : { ; 725 : // Output the first byte ; 726 : ; 727 : byte_1 = input_buffer[ loop_index ]; 000ca 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 000ce 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 000d2 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000d6 88 45 59 mov BYTE PTR byte_1$[rbp], al ; 728 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000d9 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 000dd c1 f8 02 sar eax, 2 000e0 48 98 cdqe 000e2 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 000e7 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 729 : ; 730 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 000ea 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 000ee 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 000f1 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 000f5 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 731 : number_of_bytes_encoded++; 000f9 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 000fc ff c0 inc eax 000fe 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 732 : ; 733 : loop_index++; 00101 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 00104 ff c0 inc eax 00106 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 734 : ; 735 : if ( loop_index >= number_of_bytes_to_encode ) 00109 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 0010c 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 0010f 0f 8c 94 00 00 00 jl $LN4@Encode ; 736 : { ; 737 : // We're at the end of the data to encode ; 738 : ; 739 : byte_2 = 0; 00115 c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 740 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 00119 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 0011d 83 e0 03 and eax, 3 00120 c1 e0 04 shl eax, 4 00123 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 00127 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 0012d c1 f9 04 sar ecx, 4 00130 0b c1 or eax, ecx 00132 48 98 cdqe 00134 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 00139 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 741 : ; 742 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 0013c 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 00140 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 00143 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00147 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 743 : number_of_bytes_encoded++; 0014b 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0014e ff c0 inc eax 00150 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 744 : ; 745 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00153 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00156 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 0015b 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 0015f 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 746 : number_of_bytes_encoded++; 00163 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00166 ff c0 inc eax 00168 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 747 : ; 748 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 0016b 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0016e b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00173 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00177 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; 0017b 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0017e ff c0 inc eax 00180 8b c0 mov eax, eax 00182 33 c9 xor ecx, ecx 00184 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00188 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 755 : ; 756 : destination_string.ReleaseBuffer( -1 ); 0018c ba ff ff ff ff mov edx, -1 00191 48 8b 8d f8 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 00198 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 757 : ; 758 : return( TRUE ); 0019d b8 01 00 00 00 mov eax, 1 001a2 e9 8c 01 00 00 jmp $LN1@Encode ; 759 : } 001a7 eb 0f jmp SHORT $LN5@Encode $LN4@Encode: ; 760 : else ; 761 : { ; 762 : byte_2 = input_buffer[ loop_index ]; 001a9 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 001ad 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 001b1 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001b5 88 45 5a mov BYTE PTR byte_2$[rbp], al $LN5@Encode: ; 763 : } ; 764 : ; 765 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 001b8 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 001bc 83 e0 03 and eax, 3 001bf c1 e0 04 shl eax, 4 001c2 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 001c6 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 001cc c1 f9 04 sar ecx, 4 001cf 0b c1 or eax, ecx 001d1 48 98 cdqe 001d3 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 001d8 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 766 : ; 767 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 001db 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 001df 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 001e2 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 001e6 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 768 : number_of_bytes_encoded++; 001ea 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 001ed ff c0 inc eax 001ef 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 769 : ; 770 : loop_index++; 001f2 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 001f5 ff c0 inc eax 001f7 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 771 : ; 772 : if ( loop_index >= number_of_bytes_to_encode ) 001fa 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 001fd 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 00200 7c 7c jl SHORT $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; 00202 c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 776 : ; 777 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 00206 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 0020a 83 e0 0f and eax, 15 0020d c1 e0 02 shl eax, 2 00210 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 00214 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 0021a c1 f9 06 sar ecx, 6 0021d 0b c1 or eax, ecx 0021f 48 98 cdqe 00221 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 00226 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 778 : ; 779 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00229 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 0022d 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 00230 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00234 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 780 : number_of_bytes_encoded++; 00238 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0023b ff c0 inc eax 0023d 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 781 : ; 782 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00240 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00243 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00248 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 0024c 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; 00250 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00253 ff c0 inc eax 00255 8b c0 mov eax, eax 00257 33 c9 xor ecx, ecx 00259 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 0025d 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 789 : ; 790 : destination_string.ReleaseBuffer( -1 ); 00261 ba ff ff ff ff mov edx, -1 00266 48 8b 8d f8 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 0026d e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 791 : ; 792 : return( TRUE ); 00272 b8 01 00 00 00 mov eax, 1 00277 e9 b7 00 00 00 jmp $LN1@Encode ; 793 : } 0027c eb 0f jmp SHORT $LN7@Encode $LN6@Encode: ; 794 : else ; 795 : { ; 796 : byte_3 = input_buffer[ loop_index ]; 0027e 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 00282 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 00286 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 0028a 88 45 5b mov BYTE PTR byte_3$[rbp], al $LN7@Encode: ; 797 : } ; 798 : ; 799 : loop_index++; 0028d 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 00290 ff c0 inc eax 00292 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 800 : ; 801 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 00295 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 00299 83 e0 0f and eax, 15 0029c c1 e0 02 shl eax, 2 0029f 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 002a3 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 002a9 c1 f9 06 sar ecx, 6 002ac 0b c1 or eax, ecx 002ae 48 98 cdqe 002b0 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 002b5 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 802 : ; 803 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 002b8 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 002bc 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 002bf 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 002c3 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 804 : number_of_bytes_encoded++; 002c7 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002ca ff c0 inc eax 002cc 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 805 : ; 806 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 002cf 0f b6 45 5b movzx eax, BYTE PTR byte_3$[rbp] 002d3 83 e0 3f and eax, 63 ; 0000003fH 002d6 48 98 cdqe 002d8 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 002dd 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 807 : ; 808 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 002e0 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 002e4 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 002e7 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 002eb 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 809 : number_of_bytes_encoded++; 002ef 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002f2 ff c0 inc eax 002f4 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], 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 : } 002f7 e9 c2 fd ff ff jmp $LN2@Encode $LN3@Encode: ; 822 : ; 823 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 002fc 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002ff b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00304 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00308 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; 0030c 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0030f ff c0 inc eax 00311 8b c0 mov eax, eax 00313 33 c9 xor ecx, ecx 00315 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00319 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 830 : ; 831 : destination_string.ReleaseBuffer( -1 ); 0031d ba ff ff ff ff mov edx, -1 00322 48 8b 8d f8 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 00329 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 832 : ; 833 : return( TRUE ); 0032e b8 01 00 00 00 mov eax, 1 $LN1@Encode: ; 834 : } 00333 48 8b 8d b8 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] 0033a 48 33 cd xor rcx, rbp 0033d e8 00 00 00 00 call __security_check_cookie 00342 48 8d a5 c0 00 00 00 lea rsp, QWORD PTR [rbp+192] 00349 5f pop rdi 0034a 5e pop rsi 0034b 5d pop rbp 0034c c3 ret 0 ?Encode@CBase64Coding@@UEAAHPEAEJAEAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z ENDP ; CBase64Coding::Encode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 alphabet$ = 0 loop_index$ = 80 number_of_bytes_to_encode$ = 84 byte_to_add$ = 88 byte_1$ = 89 byte_2$ = 90 byte_3$ = 91 input_buffer$ = 96 number_of_bytes_encoded$ = 104 destination$ = 112 __$ArrayPad$ = 184 this$ = 224 source$ = 232 destination_string$ = 240 ?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 55 push rbp 00010 56 push rsi 00011 57 push rdi 00012 48 81 ec e0 00 00 00 sub rsp, 224 ; 000000e0H 00019 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 0001e 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 00025 48 33 c5 xor rax, rbp 00028 48 89 85 b8 00 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax ; 556 : ; 557 : const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 0002f 48 8d 45 00 lea rax, QWORD PTR alphabet$[rbp] 00033 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ 0003a 48 8b f8 mov rdi, rax 0003d 48 8b f1 mov rsi, rcx 00040 b9 41 00 00 00 mov ecx, 65 ; 00000041H 00045 f3 a4 rep movsb ; 558 : ; 559 : int loop_index = 0; 00047 c7 45 50 00 00 00 00 mov DWORD PTR loop_index$[rbp], 0 ; 560 : int number_of_bytes_to_encode = (int)source.GetSize(); 0004e 48 8b 8d e8 00 00 00 mov rcx, QWORD PTR source$[rbp] 00055 e8 00 00 00 00 call ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize 0005a 89 45 54 mov DWORD PTR number_of_bytes_to_encode$[rbp], eax ; 561 : ; 562 : BYTE byte_to_add = 0; 0005d c6 45 58 00 mov BYTE PTR byte_to_add$[rbp], 0 ; 563 : BYTE byte_1 = 0; 00061 c6 45 59 00 mov BYTE PTR byte_1$[rbp], 0 ; 564 : BYTE byte_2 = 0; 00065 c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 565 : BYTE byte_3 = 0; 00069 c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 566 : ; 567 : const BYTE * input_buffer = source.GetData(); 0006d 48 8b 8d e8 00 00 00 mov rcx, QWORD PTR source$[rbp] 00074 e8 00 00 00 00 call ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData 00079 48 89 45 60 mov QWORD PTR input_buffer$[rbp], rax ; 568 : ; 569 : DWORD number_of_bytes_encoded = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 0007d f2 0f 2a 45 54 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp] 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 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], 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 ); 00094 33 d2 xor edx, edx 00096 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00099 b9 48 00 00 00 mov ecx, 72 ; 00000048H 0009e f7 f1 div ecx 000a0 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 000a3 8d 44 41 02 lea eax, DWORD PTR [rcx+rax*2+2] 000a7 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 578 : ; 579 : LPTSTR destination = destination_string.GetBuffer( number_of_bytes_encoded ); 000aa 8b 55 68 mov edx, DWORD PTR number_of_bytes_encoded$[rbp] 000ad 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 000b4 e8 00 00 00 00 call ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer 000b9 48 89 45 70 mov QWORD PTR destination$[rbp], rax ; 580 : ; 581 : number_of_bytes_encoded = 0; 000bd c7 45 68 00 00 00 00 mov DWORD PTR number_of_bytes_encoded$[rbp], 0 $LN2@Encode: ; 582 : ; 583 : while( loop_index < number_of_bytes_to_encode ) 000c4 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 000c7 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 000ca 0f 8d 74 02 00 00 jge $LN3@Encode ; 584 : { ; 585 : // Output the first byte ; 586 : ; 587 : byte_1 = input_buffer[ loop_index ]; 000d0 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 000d4 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 000d8 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000dc 88 45 59 mov BYTE PTR byte_1$[rbp], al ; 588 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000df 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 000e3 c1 f8 02 sar eax, 2 000e6 48 98 cdqe 000e8 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 000ed 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 589 : ; 590 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 000f0 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 000f4 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 000f7 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 000fb 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 591 : number_of_bytes_encoded++; 000ff 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00102 ff c0 inc eax 00104 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 592 : ; 593 : loop_index++; 00107 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 0010a ff c0 inc eax 0010c 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 594 : ; 595 : if ( loop_index >= number_of_bytes_to_encode ) 0010f 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 00112 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 00115 0f 8c 94 00 00 00 jl $LN4@Encode ; 596 : { ; 597 : // We're at the end of the data to encode ; 598 : ; 599 : byte_2 = 0; 0011b c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 600 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 0011f 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 00123 83 e0 03 and eax, 3 00126 c1 e0 04 shl eax, 4 00129 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 0012d 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 00133 c1 f9 04 sar ecx, 4 00136 0b c1 or eax, ecx 00138 48 98 cdqe 0013a 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 0013f 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 601 : ; 602 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 00142 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 00146 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 00149 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 0014d 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 603 : number_of_bytes_encoded++; 00151 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00154 ff c0 inc eax 00156 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 604 : ; 605 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00159 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0015c b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00161 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00165 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 606 : number_of_bytes_encoded++; 00169 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0016c ff c0 inc eax 0016e 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 607 : ; 608 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00171 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00174 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 00179 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 0017d 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; 00181 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00184 ff c0 inc eax 00186 8b c0 mov eax, eax 00188 33 c9 xor ecx, ecx 0018a 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 0018e 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 615 : ; 616 : destination_string.ReleaseBuffer( -1 ); 00192 ba ff ff ff ff mov edx, -1 00197 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 0019e e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 617 : ; 618 : return( TRUE ); 001a3 b8 01 00 00 00 mov eax, 1 001a8 e9 ce 01 00 00 jmp $LN1@Encode ; 619 : } 001ad eb 0f jmp SHORT $LN5@Encode $LN4@Encode: ; 620 : else ; 621 : { ; 622 : byte_2 = input_buffer[ loop_index ]; 001af 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 001b3 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 001b7 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001bb 88 45 5a mov BYTE PTR byte_2$[rbp], al $LN5@Encode: ; 623 : } ; 624 : ; 625 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 001be 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 001c2 83 e0 03 and eax, 3 001c5 c1 e0 04 shl eax, 4 001c8 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 001cc 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 001d2 c1 f9 04 sar ecx, 4 001d5 0b c1 or eax, ecx 001d7 48 98 cdqe 001d9 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 001de 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 626 : ; 627 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 001e1 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 001e5 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 001e8 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 001ec 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 628 : number_of_bytes_encoded++; 001f0 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 001f3 ff c0 inc eax 001f5 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 629 : ; 630 : loop_index++; 001f8 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 001fb ff c0 inc eax 001fd 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 631 : ; 632 : if ( loop_index >= number_of_bytes_to_encode ) 00200 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 00203 39 45 50 cmp DWORD PTR loop_index$[rbp], eax 00206 7c 7c jl SHORT $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; 00208 c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 636 : ; 637 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 0020c 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 00210 83 e0 0f and eax, 15 00213 c1 e0 02 shl eax, 2 00216 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 0021a 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00220 c1 f9 06 sar ecx, 6 00223 0b c1 or eax, ecx 00225 48 98 cdqe 00227 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 0022c 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 638 : ; 639 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 0022f 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 00233 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 00236 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 0023a 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 640 : number_of_bytes_encoded++; 0023e 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00241 ff c0 inc eax 00243 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 641 : ; 642 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00246 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00249 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 0024e 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00252 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; 00256 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00259 ff c0 inc eax 0025b 8b c0 mov eax, eax 0025d 33 c9 xor ecx, ecx 0025f 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00263 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 649 : ; 650 : destination_string.ReleaseBuffer( -1 ); 00267 ba ff ff ff ff mov edx, -1 0026c 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 00273 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 651 : ; 652 : return( TRUE ); 00278 b8 01 00 00 00 mov eax, 1 0027d e9 f9 00 00 00 jmp $LN1@Encode ; 653 : } 00282 eb 0f jmp SHORT $LN7@Encode $LN6@Encode: ; 654 : else ; 655 : { ; 656 : byte_3 = input_buffer[ loop_index ]; 00284 48 63 45 50 movsxd rax, DWORD PTR loop_index$[rbp] 00288 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 0028c 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 00290 88 45 5b mov BYTE PTR byte_3$[rbp], al $LN7@Encode: ; 657 : } ; 658 : ; 659 : loop_index++; 00293 8b 45 50 mov eax, DWORD PTR loop_index$[rbp] 00296 ff c0 inc eax 00298 89 45 50 mov DWORD PTR loop_index$[rbp], eax ; 660 : ; 661 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 0029b 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 0029f 83 e0 0f and eax, 15 002a2 c1 e0 02 shl eax, 2 002a5 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 002a9 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 002af c1 f9 06 sar ecx, 6 002b2 0b c1 or eax, ecx 002b4 48 98 cdqe 002b6 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 002bb 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 662 : ; 663 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 002be 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 002c2 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 002c5 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 002c9 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 664 : number_of_bytes_encoded++; 002cd 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002d0 ff c0 inc eax 002d2 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 665 : ; 666 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 002d5 0f b6 45 5b movzx eax, BYTE PTR byte_3$[rbp] 002d9 83 e0 3f and eax, 63 ; 0000003fH 002dc 48 98 cdqe 002de 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 002e3 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 667 : ; 668 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( byte_to_add ); 002e6 0f b6 45 58 movzx eax, BYTE PTR byte_to_add$[rbp] 002ea 8b 4d 68 mov ecx, DWORD PTR number_of_bytes_encoded$[rbp] 002ed 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 002f1 66 89 04 4a mov WORD PTR [rdx+rcx*2], ax ; 669 : number_of_bytes_encoded++; 002f5 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 002f8 ff c0 inc eax 002fa 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 670 : ; 671 : if ( ( number_of_bytes_encoded % BASE64_NUMBER_OF_CHARACTERS_PER_LINE ) == 0 ) 002fd 33 d2 xor edx, edx 002ff 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00302 b9 48 00 00 00 mov ecx, 72 ; 00000048H 00307 f7 f1 div ecx 00309 8b c2 mov eax, edx 0030b 85 c0 test eax, eax 0030d 75 30 jne SHORT $LN8@Encode ; 672 : { ; 673 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( CARRIAGE_RETURN ); 0030f 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00312 b9 0d 00 00 00 mov ecx, 13 00317 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 0031b 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 674 : number_of_bytes_encoded++; 0031f 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00322 ff c0 inc eax 00324 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax ; 675 : ; 676 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( LINE_FEED ); 00327 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0032a b9 0a 00 00 00 mov ecx, 10 0032f 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00333 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 677 : number_of_bytes_encoded++; 00337 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 0033a ff c0 inc eax 0033c 89 45 68 mov DWORD PTR number_of_bytes_encoded$[rbp], eax $LN8@Encode: ; 678 : } ; 679 : } 0033f e9 80 fd ff ff jmp $LN2@Encode $LN3@Encode: ; 680 : ; 681 : destination[ number_of_bytes_encoded ] = static_cast< TCHAR >( END_OF_BASE64_ENCODED_DATA ); 00344 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00347 b9 3d 00 00 00 mov ecx, 61 ; 0000003dH 0034c 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00350 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; 00354 8b 45 68 mov eax, DWORD PTR number_of_bytes_encoded$[rbp] 00357 ff c0 inc eax 00359 8b c0 mov eax, eax 0035b 33 c9 xor ecx, ecx 0035d 48 8b 55 70 mov rdx, QWORD PTR destination$[rbp] 00361 66 89 0c 42 mov WORD PTR [rdx+rax*2], cx ; 688 : ; 689 : destination_string.ReleaseBuffer( -1 ); 00365 ba ff ff ff ff mov edx, -1 0036a 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination_string$[rbp] 00371 e8 00 00 00 00 call ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer ; 690 : ; 691 : return( TRUE ); 00376 b8 01 00 00 00 mov eax, 1 $LN1@Encode: ; 692 : } 0037b 48 8b 8d b8 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] 00382 48 33 cd xor rcx, rbp 00385 e8 00 00 00 00 call __security_check_cookie 0038a 48 8d a5 c0 00 00 00 lea rsp, QWORD PTR [rbp+192] 00391 5f pop rdi 00392 5e pop rsi 00393 5d pop rbp 00394 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 /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z _TEXT SEGMENT alphabet$ = 0 source_index$ = 80 number_of_bytes_to_encode$ = 84 byte_to_add$ = 88 byte_1$ = 89 byte_2$ = 90 byte_3$ = 91 input_buffer$ = 96 add_index$ = 104 __$ArrayPad$ = 176 this$ = 224 source$ = 232 destination$ = 240 ?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 55 push rbp 00010 56 push rsi 00011 57 push rdi 00012 48 81 ec e0 00 00 00 sub rsp, 224 ; 000000e0H 00019 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 0001e 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 00025 48 33 c5 xor rax, rbp 00028 48 89 85 b0 00 00 00 mov QWORD PTR __$ArrayPad$[rbp], 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+/"; 0002f 48 8d 45 00 lea rax, QWORD PTR alphabet$[rbp] 00033 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_0EB@NFPJKBDG@ABCDEFGHIJKLMNOPQRSTUVWXYZabcde@ 0003a 48 8b f8 mov rdi, rax 0003d 48 8b f1 mov rsi, rcx 00040 b9 41 00 00 00 mov ecx, 65 ; 00000041H 00045 f3 a4 rep movsb ; 454 : ; 455 : int source_index = 0; 00047 c7 45 50 00 00 00 00 mov DWORD PTR source_index$[rbp], 0 ; 456 : int number_of_bytes_to_encode = (int)source.GetSize(); 0004e 48 8b 8d e8 00 00 00 mov rcx, QWORD PTR source$[rbp] 00055 e8 00 00 00 00 call ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize 0005a 89 45 54 mov DWORD PTR number_of_bytes_to_encode$[rbp], eax ; 457 : ; 458 : BYTE byte_to_add = 0; 0005d c6 45 58 00 mov BYTE PTR byte_to_add$[rbp], 0 ; 459 : BYTE byte_1 = 0; 00061 c6 45 59 00 mov BYTE PTR byte_1$[rbp], 0 ; 460 : BYTE byte_2 = 0; 00065 c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 461 : BYTE byte_3 = 0; 00069 c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 462 : ; 463 : const BYTE * input_buffer = source.GetData(); 0006d 48 8b 8d e8 00 00 00 mov rcx, QWORD PTR source$[rbp] 00074 e8 00 00 00 00 call ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData 00079 48 89 45 60 mov QWORD PTR input_buffer$[rbp], rax ; 464 : ; 465 : DWORD add_index = (DWORD) ( (double) number_of_bytes_to_encode / (double) 0.75 ) + 1; 0007d f2 0f 2a 45 54 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_encode$[rbp] 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 45 68 mov DWORD PTR add_index$[rbp], eax ; 466 : add_index += ( ( number_of_bytes_to_encode % 3 ) + 1 ); 00094 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 00097 99 cdq 00098 b9 03 00 00 00 mov ecx, 3 0009d f7 f9 idiv ecx 0009f 8b c2 mov eax, edx 000a1 8b 4d 68 mov ecx, DWORD PTR add_index$[rbp] 000a4 8d 44 01 01 lea eax, DWORD PTR [rcx+rax+1] 000a8 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 467 : ; 468 : destination.SetSize( add_index ); 000ab 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 000ae 49 c7 c0 ff ff ff ff mov r8, -1 000b5 8b d0 mov edx, eax 000b7 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 000be e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 469 : add_index = 0; 000c3 c7 45 68 00 00 00 00 mov DWORD PTR add_index$[rbp], 0 $LN2@Encode: ; 470 : ; 471 : while( source_index < number_of_bytes_to_encode ) 000ca 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 000cd 39 45 50 cmp DWORD PTR source_index$[rbp], eax 000d0 0f 8d 68 02 00 00 jge $LN3@Encode ; 472 : { ; 473 : // Output the first byte ; 474 : ; 475 : byte_1 = input_buffer[ source_index ]; 000d6 48 63 45 50 movsxd rax, DWORD PTR source_index$[rbp] 000da 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 000de 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 000e2 88 45 59 mov BYTE PTR byte_1$[rbp], al ; 476 : byte_to_add = alphabet[ ( byte_1 >> 2 ) ]; 000e5 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 000e9 c1 f8 02 sar eax, 2 000ec 48 98 cdqe 000ee 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 000f3 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 477 : ; 478 : destination.SetAt( add_index, byte_to_add ); 000f6 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 000f9 44 0f b6 45 58 movzx r8d, BYTE PTR byte_to_add$[rbp] 000fe 8b d0 mov edx, eax 00100 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00107 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 479 : add_index++; 0010c 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 0010f ff c0 inc eax 00111 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 480 : ; 481 : source_index++; 00114 8b 45 50 mov eax, DWORD PTR source_index$[rbp] 00117 ff c0 inc eax 00119 89 45 50 mov DWORD PTR source_index$[rbp], eax ; 482 : ; 483 : if ( source_index >= number_of_bytes_to_encode ) 0011c 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 0011f 39 45 50 cmp DWORD PTR source_index$[rbp], eax 00122 0f 8c a1 00 00 00 jl $LN4@Encode ; 484 : { ; 485 : // We're at the end of the data to encode ; 486 : ; 487 : byte_2 = 0; 00128 c6 45 5a 00 mov BYTE PTR byte_2$[rbp], 0 ; 488 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 0012c 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 00130 83 e0 03 and eax, 3 00133 c1 e0 04 shl eax, 4 00136 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 0013a 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 00140 c1 f9 04 sar ecx, 4 00143 0b c1 or eax, ecx 00145 48 98 cdqe 00147 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 0014c 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 489 : ; 490 : destination.SetAt( add_index, byte_to_add ); 0014f 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00152 44 0f b6 45 58 movzx r8d, BYTE PTR byte_to_add$[rbp] 00157 8b d0 mov edx, eax 00159 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00160 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 491 : add_index++; 00165 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00168 ff c0 inc eax 0016a 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 492 : ; 493 : destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA ); 0016d 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00170 41 b0 3d mov r8b, 61 ; 0000003dH 00173 8b d0 mov edx, eax 00175 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0017c e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 494 : add_index++; 00181 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00184 ff c0 inc eax 00186 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 495 : ; 496 : destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA ); 00189 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 0018c 41 b0 3d mov r8b, 61 ; 0000003dH 0018f 8b d0 mov edx, eax 00191 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00198 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 497 : add_index++; 0019d 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 001a0 ff c0 inc eax 001a2 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 498 : ; 499 : destination.SetSize( add_index ); 001a5 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 001a8 49 c7 c0 ff ff ff ff mov r8, -1 001af 8b d0 mov edx, eax 001b1 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 001b8 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 500 : return( TRUE ); 001bd b8 01 00 00 00 mov eax, 1 001c2 e9 b0 01 00 00 jmp $LN1@Encode ; 501 : } 001c7 eb 0f jmp SHORT $LN5@Encode $LN4@Encode: ; 502 : else ; 503 : { ; 504 : byte_2 = input_buffer[ source_index ]; 001c9 48 63 45 50 movsxd rax, DWORD PTR source_index$[rbp] 001cd 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 001d1 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 001d5 88 45 5a mov BYTE PTR byte_2$[rbp], al $LN5@Encode: ; 505 : } ; 506 : ; 507 : byte_to_add = alphabet[ ( ( ( byte_1 & 0x03 ) << 4 ) | ( ( byte_2 & 0xF0 ) >> 4 ) ) ]; 001d8 0f b6 45 59 movzx eax, BYTE PTR byte_1$[rbp] 001dc 83 e0 03 and eax, 3 001df c1 e0 04 shl eax, 4 001e2 0f b6 4d 5a movzx ecx, BYTE PTR byte_2$[rbp] 001e6 81 e1 f0 00 00 00 and ecx, 240 ; 000000f0H 001ec c1 f9 04 sar ecx, 4 001ef 0b c1 or eax, ecx 001f1 48 98 cdqe 001f3 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 001f8 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 508 : destination.SetAt( add_index, byte_to_add ); 001fb 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 001fe 44 0f b6 45 58 movzx r8d, BYTE PTR byte_to_add$[rbp] 00203 8b d0 mov edx, eax 00205 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0020c e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 509 : add_index++; 00211 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00214 ff c0 inc eax 00216 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 510 : ; 511 : source_index++; 00219 8b 45 50 mov eax, DWORD PTR source_index$[rbp] 0021c ff c0 inc eax 0021e 89 45 50 mov DWORD PTR source_index$[rbp], eax ; 512 : ; 513 : if ( source_index >= number_of_bytes_to_encode ) 00221 8b 45 54 mov eax, DWORD PTR number_of_bytes_to_encode$[rbp] 00224 39 45 50 cmp DWORD PTR source_index$[rbp], eax 00227 0f 8c 85 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; 0022d c6 45 5b 00 mov BYTE PTR byte_3$[rbp], 0 ; 517 : ; 518 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 00231 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 00235 83 e0 0f and eax, 15 00238 c1 e0 02 shl eax, 2 0023b 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 0023f 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 00245 c1 f9 06 sar ecx, 6 00248 0b c1 or eax, ecx 0024a 48 98 cdqe 0024c 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 00251 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 519 : ; 520 : destination.SetAt( add_index, byte_to_add ); 00254 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00257 44 0f b6 45 58 movzx r8d, BYTE PTR byte_to_add$[rbp] 0025c 8b d0 mov edx, eax 0025e 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00265 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 521 : add_index++; 0026a 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 0026d ff c0 inc eax 0026f 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 522 : ; 523 : destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA ); 00272 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00275 41 b0 3d mov r8b, 61 ; 0000003dH 00278 8b d0 mov edx, eax 0027a 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00281 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 524 : add_index++; 00286 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00289 ff c0 inc eax 0028b 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 525 : ; 526 : destination.SetSize( add_index ); 0028e 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00291 49 c7 c0 ff ff ff ff mov r8, -1 00298 8b d0 mov edx, eax 0029a 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 002a1 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 527 : return( TRUE ); 002a6 b8 01 00 00 00 mov eax, 1 002ab e9 c7 00 00 00 jmp $LN1@Encode ; 528 : } 002b0 eb 0f jmp SHORT $LN7@Encode $LN6@Encode: ; 529 : else ; 530 : { ; 531 : byte_3 = input_buffer[ source_index ]; 002b2 48 63 45 50 movsxd rax, DWORD PTR source_index$[rbp] 002b6 48 8b 4d 60 mov rcx, QWORD PTR input_buffer$[rbp] 002ba 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 002be 88 45 5b mov BYTE PTR byte_3$[rbp], al $LN7@Encode: ; 532 : } ; 533 : ; 534 : source_index++; 002c1 8b 45 50 mov eax, DWORD PTR source_index$[rbp] 002c4 ff c0 inc eax 002c6 89 45 50 mov DWORD PTR source_index$[rbp], eax ; 535 : ; 536 : byte_to_add = alphabet[ ( ( ( byte_2 & 0x0F ) << 2 ) | ( ( byte_3 & 0xC0 ) >> 6 ) ) ]; 002c9 0f b6 45 5a movzx eax, BYTE PTR byte_2$[rbp] 002cd 83 e0 0f and eax, 15 002d0 c1 e0 02 shl eax, 2 002d3 0f b6 4d 5b movzx ecx, BYTE PTR byte_3$[rbp] 002d7 81 e1 c0 00 00 00 and ecx, 192 ; 000000c0H 002dd c1 f9 06 sar ecx, 6 002e0 0b c1 or eax, ecx 002e2 48 98 cdqe 002e4 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 002e9 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 537 : ; 538 : destination.SetAt( add_index, byte_to_add ); 002ec 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 002ef 44 0f b6 45 58 movzx r8d, BYTE PTR byte_to_add$[rbp] 002f4 8b d0 mov edx, eax 002f6 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 002fd e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 539 : add_index++; 00302 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00305 ff c0 inc eax 00307 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 540 : ; 541 : byte_to_add = alphabet[ ( byte_3 & 0x3F ) ]; 0030a 0f b6 45 5b movzx eax, BYTE PTR byte_3$[rbp] 0030e 83 e0 3f and eax, 63 ; 0000003fH 00311 48 98 cdqe 00313 0f b6 44 05 00 movzx eax, BYTE PTR alphabet$[rbp+rax] 00318 88 45 58 mov BYTE PTR byte_to_add$[rbp], al ; 542 : ; 543 : destination.SetAt( add_index, byte_to_add ); 0031b 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 0031e 44 0f b6 45 58 movzx r8d, BYTE PTR byte_to_add$[rbp] 00323 8b d0 mov edx, eax 00325 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0032c e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 544 : add_index++; 00331 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00334 ff c0 inc eax 00336 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 545 : } 00339 e9 8c fd ff ff jmp $LN2@Encode $LN3@Encode: ; 546 : ; 547 : destination.SetAt( add_index, END_OF_BASE64_ENCODED_DATA ); 0033e 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00341 41 b0 3d mov r8b, 61 ; 0000003dH 00344 8b d0 mov edx, eax 00346 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0034d e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 548 : add_index++; 00352 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 00355 ff c0 inc eax 00357 89 45 68 mov DWORD PTR add_index$[rbp], eax ; 549 : ; 550 : destination.SetSize( add_index ); 0035a 8b 45 68 mov eax, DWORD PTR add_index$[rbp] 0035d 49 c7 c0 ff ff ff ff mov r8, -1 00364 8b d0 mov edx, eax 00366 48 8b 8d f0 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0036d e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 551 : return( TRUE ); 00372 b8 01 00 00 00 mov eax, 1 $LN1@Encode: ; 552 : } 00377 48 8b 8d b0 00 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] 0037e 48 33 cd xor rcx, rbp 00381 e8 00 00 00 00 call __security_check_cookie 00386 48 8d a5 c0 00 00 00 lea rsp, QWORD PTR [rbp+192] 0038d 5f pop rdi 0038e 5e pop rsi 0038f 5d pop rbp 00390 c3 ret 0 ?Encode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ENDP ; CBase64Coding::Encode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 return_value$ = 0 byte_to_add$ = 4 character_1$ = 5 character_2$ = 6 character_3$ = 7 character_4$ = 8 index$ = 12 number_of_bytes_to_decode$ = 16 add_index$ = 20 input_buffer$ = 24 this$ = 112 source$ = 120 destination$ = 128 ?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 55 push rbp 00010 48 81 ec 80 00 00 00 sub rsp, 128 ; 00000080H 00017 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 303 : ; 304 : if ( m_DecoderTable[ 0 ] == 0x00 ) 0001c b8 01 00 00 00 mov eax, 1 00021 48 6b c0 00 imul rax, rax, 0 00025 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00029 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0002e 85 c0 test eax, eax 00030 75 0d jne SHORT $LN4@Decode ; 305 : { ; 306 : m_InitializeDecoderTable(); 00032 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 00036 48 8b 00 mov rax, QWORD PTR [rax] 00039 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 0003d ff 10 call QWORD PTR [rax] $LN4@Decode: ; 307 : } ; 308 : ; 309 : BOOL return_value = TRUE; //Ĭ�Ϸ��سɹ� 0003f c7 45 00 01 00 00 00 mov DWORD PTR return_value$[rbp], 1 ; 310 : ; 311 : BYTE byte_to_add = 0; 00046 c6 45 04 00 mov BYTE PTR byte_to_add$[rbp], 0 ; 312 : BYTE character_1 = 0; 0004a c6 45 05 00 mov BYTE PTR character_1$[rbp], 0 ; 313 : BYTE character_2 = 0; 0004e c6 45 06 00 mov BYTE PTR character_2$[rbp], 0 ; 314 : BYTE character_3 = 0; 00052 c6 45 07 00 mov BYTE PTR character_3$[rbp], 0 ; 315 : BYTE character_4 = 0; 00056 c6 45 08 00 mov BYTE PTR character_4$[rbp], 0 ; 316 : ; 317 : int index = 0; 0005a c7 45 0c 00 00 00 00 mov DWORD PTR index$[rbp], 0 ; 318 : int number_of_bytes_to_decode = source.GetLength(); 00061 48 8b 4d 78 mov rcx, QWORD PTR source$[rbp] 00065 e8 00 00 00 00 call ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ ; ATL::CSimpleStringT<char,0>::GetLength 0006a 89 45 10 mov DWORD PTR number_of_bytes_to_decode$[rbp], eax ; 319 : ; 320 : DWORD add_index = (DWORD) ( (double) number_of_bytes_to_decode * (double) 0.75 ) + 1; 0006d f2 0f 2a 45 10 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_decode$[rbp] 00072 f2 0f 59 05 00 00 00 00 mulsd xmm0, QWORD PTR __real@3fe8000000000000 0007a f2 48 0f 2c c0 cvttsd2si rax, xmm0 0007f ff c0 inc eax 00081 89 45 14 mov DWORD PTR add_index$[rbp], eax ; 321 : ; 322 : destination.SetSize( add_index ); 00084 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 00087 49 c7 c0 ff ff ff ff mov r8, -1 0008e 8b d0 mov edx, eax 00090 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00097 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 323 : add_index = 0; 0009c c7 45 14 00 00 00 00 mov DWORD PTR add_index$[rbp], 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; 000a3 48 8b 4d 78 mov rcx, QWORD PTR source$[rbp] 000a7 e8 00 00 00 00 call ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ ; ATL::CSimpleStringT<char,0>::operator char const * 000ac 48 89 45 18 mov QWORD PTR input_buffer$[rbp], rax $LN2@Decode: ; 330 : ; 331 : while( index < number_of_bytes_to_decode ) 000b0 8b 45 10 mov eax, DWORD PTR number_of_bytes_to_decode$[rbp] 000b3 39 45 0c cmp DWORD PTR index$[rbp], eax 000b6 0f 8d 02 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 ); 000bc 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 000c0 48 83 c0 08 add rax, 8 000c4 44 8b 4d 10 mov r9d, DWORD PTR number_of_bytes_to_decode$[rbp] 000c8 4c 8d 45 0c lea r8, QWORD PTR index$[rbp] 000cc 48 8b d0 mov rdx, rax 000cf 48 8b 4d 18 mov rcx, QWORD PTR input_buffer$[rbp] 000d3 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 000d8 88 45 05 mov BYTE PTR character_1$[rbp], al ; 334 : ; 335 : if ( character_1 != END_OF_BASE64_ENCODED_DATA ) 000db 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 000df 83 f8 3d cmp eax, 61 ; 0000003dH 000e2 0f 84 62 01 00 00 je $LN5@Decode ; 336 : { ; 337 : if ( m_DecoderTable[ character_1 ] == BASE64_UNKNOWN_VALUE ) 000e8 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 000ec 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 000f0 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 000f5 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 000fa 75 13 jne SHORT $LN7@Decode ; 338 : { ; 339 : destination.RemoveAll(); 000fc 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00103 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 340 : return( FALSE ); 00108 33 c0 xor eax, eax 0010a e9 ca 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 ); 0010f 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 00113 48 83 c0 08 add rax, 8 00117 44 8b 4d 10 mov r9d, DWORD PTR number_of_bytes_to_decode$[rbp] 0011b 4c 8d 45 0c lea r8, QWORD PTR index$[rbp] 0011f 48 8b d0 mov rdx, rax 00122 48 8b 4d 18 mov rcx, QWORD PTR input_buffer$[rbp] 00126 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 0012b 88 45 06 mov BYTE PTR character_2$[rbp], al ; 344 : ; 345 : if ( character_2 != END_OF_BASE64_ENCODED_DATA ) 0012e 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 00132 83 f8 3d cmp eax, 61 ; 0000003dH 00135 0f 84 05 01 00 00 je $LN8@Decode ; 346 : { ; 347 : if ( m_DecoderTable[ character_2 ] == BASE64_UNKNOWN_VALUE ) 0013b 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 0013f 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00143 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00148 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 0014d 75 13 jne SHORT $LN10@Decode ; 348 : { ; 349 : destination.RemoveAll(); 0014f 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00156 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 350 : return( FALSE ); 0015b 33 c0 xor eax, eax 0015d e9 77 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 ); 00162 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 00166 48 83 c0 08 add rax, 8 0016a 44 8b 4d 10 mov r9d, DWORD PTR number_of_bytes_to_decode$[rbp] 0016e 4c 8d 45 0c lea r8, QWORD PTR index$[rbp] 00172 48 8b d0 mov rdx, rax 00175 48 8b 4d 18 mov rcx, QWORD PTR input_buffer$[rbp] 00179 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 0017e 88 45 07 mov BYTE PTR character_3$[rbp], al ; 354 : ; 355 : if ( character_3 != END_OF_BASE64_ENCODED_DATA ) 00181 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 00185 83 f8 3d cmp eax, 61 ; 0000003dH 00188 0f 84 ac 00 00 00 je $LN11@Decode ; 356 : { ; 357 : if ( m_DecoderTable[ character_3 ] == BASE64_UNKNOWN_VALUE ) 0018e 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 00192 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00196 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0019b 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 001a0 75 13 jne SHORT $LN13@Decode ; 358 : { ; 359 : destination.RemoveAll(); 001a2 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 001a9 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 360 : return( FALSE ); 001ae 33 c0 xor eax, eax 001b0 e9 24 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 ); 001b5 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 001b9 48 83 c0 08 add rax, 8 001bd 44 8b 4d 10 mov r9d, DWORD PTR number_of_bytes_to_decode$[rbp] 001c1 4c 8d 45 0c lea r8, QWORD PTR index$[rbp] 001c5 48 8b d0 mov rdx, rax 001c8 48 8b 4d 18 mov rcx, QWORD PTR input_buffer$[rbp] 001cc e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 001d1 88 45 08 mov BYTE PTR character_4$[rbp], al ; 364 : ; 365 : if ( character_4 != END_OF_BASE64_ENCODED_DATA ) 001d4 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 001d8 83 f8 3d cmp eax, 61 ; 0000003dH 001db 74 27 je SHORT $LN14@Decode ; 366 : { ; 367 : if ( m_DecoderTable[ character_4 ] == BASE64_UNKNOWN_VALUE ) 001dd 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 001e1 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 001e5 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 001ea 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 001ef 75 13 jne SHORT $LN15@Decode ; 368 : { ; 369 : destination.RemoveAll(); 001f1 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 001f8 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 370 : return( FALSE ); 001fd 33 c0 xor eax, eax 001ff e9 d5 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 || 00204 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 00208 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 0020d 74 16 je SHORT $LN17@Decode 0020f 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 00213 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 00218 74 0b je SHORT $LN17@Decode 0021a 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 0021e 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 00223 75 13 jne SHORT $LN16@Decode $LN17@Decode: ; 376 : character_4 == BASE64_END_OF_BUFFER ) ; 377 : { ; 378 : destination.RemoveAll(); 00225 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0022c e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 379 : return( FALSE ); 00231 33 c0 xor eax, eax 00233 e9 a1 01 00 00 jmp $LN1@Decode $LN16@Decode: ; 380 : } ; 381 : } 00238 eb 04 jmp SHORT $LN12@Decode $LN11@Decode: ; 382 : else ; 383 : { ; 384 : character_4 = END_OF_BASE64_ENCODED_DATA; 0023a c6 45 08 3d mov BYTE PTR character_4$[rbp], 61 ; 0000003dH $LN12@Decode: ; 385 : } ; 386 : } 0023e eb 08 jmp SHORT $LN9@Decode $LN8@Decode: ; 387 : else ; 388 : { ; 389 : character_3 = END_OF_BASE64_ENCODED_DATA; 00240 c6 45 07 3d mov BYTE PTR character_3$[rbp], 61 ; 0000003dH ; 390 : character_4 = END_OF_BASE64_ENCODED_DATA; 00244 c6 45 08 3d mov BYTE PTR character_4$[rbp], 61 ; 0000003dH $LN9@Decode: ; 391 : } ; 392 : } 00248 eb 0c jmp SHORT $LN6@Decode $LN5@Decode: ; 393 : else ; 394 : { ; 395 : character_2 = END_OF_BASE64_ENCODED_DATA; 0024a c6 45 06 3d mov BYTE PTR character_2$[rbp], 61 ; 0000003dH ; 396 : character_3 = END_OF_BASE64_ENCODED_DATA; 0024e c6 45 07 3d mov BYTE PTR character_3$[rbp], 61 ; 0000003dH ; 397 : character_4 = END_OF_BASE64_ENCODED_DATA; 00252 c6 45 08 3d mov BYTE PTR character_4$[rbp], 61 ; 0000003dH $LN6@Decode: ; 398 : } ; 399 : ; 400 : if ( character_1 == END_OF_BASE64_ENCODED_DATA || 00256 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 0025a 83 f8 3d cmp eax, 61 ; 0000003dH 0025d 74 09 je SHORT $LN19@Decode 0025f 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 00263 83 f8 3d cmp eax, 61 ; 0000003dH 00266 75 22 jne SHORT $LN18@Decode $LN19@Decode: ; 401 : character_2 == END_OF_BASE64_ENCODED_DATA ) ; 402 : { ; 403 : destination.SetSize( add_index ); 00268 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 0026b 49 c7 c0 ff ff ff ff mov r8, -1 00272 8b d0 mov edx, eax 00274 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0027b e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 404 : return( TRUE ); 00280 b8 01 00 00 00 mov eax, 1 00285 e9 4f 01 00 00 jmp $LN1@Decode $LN18@Decode: ; 405 : } ; 406 : ; 407 : character_1 = m_DecoderTable[ character_1 ]; 0028a 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 0028e 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00292 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00297 88 45 05 mov BYTE PTR character_1$[rbp], al ; 408 : character_2 = m_DecoderTable[ character_2 ]; 0029a 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 0029e 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 002a2 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 002a7 88 45 06 mov BYTE PTR character_2$[rbp], al ; 409 : ; 410 : byte_to_add = static_cast< BYTE>( ( ( character_1 << 2 ) | ( ( character_2 & 0x30 ) >> 4 ) ) ); 002aa 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 002ae c1 e0 02 shl eax, 2 002b1 0f b6 4d 06 movzx ecx, BYTE PTR character_2$[rbp] 002b5 83 e1 30 and ecx, 48 ; 00000030H 002b8 c1 f9 04 sar ecx, 4 002bb 0b c1 or eax, ecx 002bd 88 45 04 mov BYTE PTR byte_to_add$[rbp], al ; 411 : ; 412 : destination.SetAt( add_index, byte_to_add ); 002c0 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 002c3 44 0f b6 45 04 movzx r8d, BYTE PTR byte_to_add$[rbp] 002c8 8b d0 mov edx, eax 002ca 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 002d1 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 413 : add_index++; 002d6 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 002d9 ff c0 inc eax 002db 89 45 14 mov DWORD PTR add_index$[rbp], eax ; 414 : ; 415 : if ( character_3 == END_OF_BASE64_ENCODED_DATA ) 002de 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 002e2 83 f8 3d cmp eax, 61 ; 0000003dH 002e5 75 22 jne SHORT $LN20@Decode ; 416 : { ; 417 : destination.SetSize( add_index ); 002e7 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 002ea 49 c7 c0 ff ff ff ff mov r8, -1 002f1 8b d0 mov edx, eax 002f3 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 002fa e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 418 : return( TRUE ); 002ff b8 01 00 00 00 mov eax, 1 00304 e9 d0 00 00 00 jmp $LN1@Decode $LN20@Decode: ; 419 : } ; 420 : ; 421 : character_3 = m_DecoderTable[ character_3 ]; 00309 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 0030d 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00311 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00316 88 45 07 mov BYTE PTR character_3$[rbp], al ; 422 : ; 423 : byte_to_add = static_cast< BYTE >( ( ( ( ( character_2 & 0x0F ) << 4 ) | ( ( character_3 & 0x3C ) >> 2 ) ) ) ); 00319 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 0031d 83 e0 0f and eax, 15 00320 c1 e0 04 shl eax, 4 00323 0f b6 4d 07 movzx ecx, BYTE PTR character_3$[rbp] 00327 83 e1 3c and ecx, 60 ; 0000003cH 0032a c1 f9 02 sar ecx, 2 0032d 0b c1 or eax, ecx 0032f 88 45 04 mov BYTE PTR byte_to_add$[rbp], al ; 424 : ; 425 : destination.SetAt( add_index, byte_to_add ); 00332 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 00335 44 0f b6 45 04 movzx r8d, BYTE PTR byte_to_add$[rbp] 0033a 8b d0 mov edx, eax 0033c 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00343 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 426 : add_index++; 00348 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 0034b ff c0 inc eax 0034d 89 45 14 mov DWORD PTR add_index$[rbp], eax ; 427 : ; 428 : if ( character_4 == END_OF_BASE64_ENCODED_DATA ) 00350 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 00354 83 f8 3d cmp eax, 61 ; 0000003dH 00357 75 1f jne SHORT $LN21@Decode ; 429 : { ; 430 : destination.SetSize( add_index ); 00359 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 0035c 49 c7 c0 ff ff ff ff mov r8, -1 00363 8b d0 mov edx, eax 00365 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0036c e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 431 : return( TRUE ); 00371 b8 01 00 00 00 mov eax, 1 00376 eb 61 jmp SHORT $LN1@Decode $LN21@Decode: ; 432 : } ; 433 : ; 434 : character_4 = m_DecoderTable[ character_4 ]; 00378 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 0037c 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00380 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00385 88 45 08 mov BYTE PTR character_4$[rbp], al ; 435 : ; 436 : byte_to_add = static_cast< BYTE >( ( ( ( character_3 & 0x03 ) << 6 ) | character_4 ) ); 00388 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 0038c 83 e0 03 and eax, 3 0038f c1 e0 06 shl eax, 6 00392 0f b6 4d 08 movzx ecx, BYTE PTR character_4$[rbp] 00396 0b c1 or eax, ecx 00398 88 45 04 mov BYTE PTR byte_to_add$[rbp], al ; 437 : ; 438 : destination.SetAt( add_index, byte_to_add ); 0039b 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 0039e 44 0f b6 45 04 movzx r8d, BYTE PTR byte_to_add$[rbp] 003a3 8b d0 mov edx, eax 003a5 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 003ac e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 439 : add_index++; 003b1 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 003b4 ff c0 inc eax 003b6 89 45 14 mov DWORD PTR add_index$[rbp], eax ; 440 : } 003b9 e9 f2 fc ff ff jmp $LN2@Decode $LN3@Decode: ; 441 : ; 442 : destination.SetSize( add_index ); 003be 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 003c1 49 c7 c0 ff ff ff ff mov r8, -1 003c8 8b d0 mov edx, eax 003ca 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 003d1 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 443 : ; 444 : return( return_value ); 003d6 8b 45 00 mov eax, DWORD PTR return_value$[rbp] $LN1@Decode: ; 445 : } 003d9 48 8d 65 60 lea rsp, QWORD PTR [rbp+96] 003dd 5d pop rbp 003de 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 /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z _TEXT SEGMENT return_value$ = 0 byte_to_add$ = 4 character_1$ = 5 character_2$ = 6 character_3$ = 7 character_4$ = 8 index$ = 12 number_of_bytes_to_decode$ = 16 add_index$ = 20 input_buffer$ = 24 this$ = 112 source$ = 120 destination$ = 128 ?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 55 push rbp 00010 48 81 ec 80 00 00 00 sub rsp, 128 ; 00000080H 00017 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 157 : ; 158 : if ( m_DecoderTable[ 0 ] == 0x00 ) 0001c b8 01 00 00 00 mov eax, 1 00021 48 6b c0 00 imul rax, rax, 0 00025 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00029 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0002e 85 c0 test eax, eax 00030 75 0d jne SHORT $LN4@Decode ; 159 : { ; 160 : m_InitializeDecoderTable(); 00032 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 00036 48 8b 00 mov rax, QWORD PTR [rax] 00039 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 0003d ff 10 call QWORD PTR [rax] $LN4@Decode: ; 161 : } ; 162 : ; 163 : BOOL return_value = FALSE; 0003f c7 45 00 00 00 00 00 mov DWORD PTR return_value$[rbp], 0 ; 164 : ; 165 : BYTE byte_to_add = 0; 00046 c6 45 04 00 mov BYTE PTR byte_to_add$[rbp], 0 ; 166 : BYTE character_1 = 0; 0004a c6 45 05 00 mov BYTE PTR character_1$[rbp], 0 ; 167 : BYTE character_2 = 0; 0004e c6 45 06 00 mov BYTE PTR character_2$[rbp], 0 ; 168 : BYTE character_3 = 0; 00052 c6 45 07 00 mov BYTE PTR character_3$[rbp], 0 ; 169 : BYTE character_4 = 0; 00056 c6 45 08 00 mov BYTE PTR character_4$[rbp], 0 ; 170 : ; 171 : int index = 0; 0005a c7 45 0c 00 00 00 00 mov DWORD PTR index$[rbp], 0 ; 172 : int number_of_bytes_to_decode = (int)source.GetSize(); 00061 48 8b 4d 78 mov rcx, QWORD PTR source$[rbp] 00065 e8 00 00 00 00 call ?GetSize@CByteArray@@QEBA_JXZ ; CByteArray::GetSize 0006a 89 45 10 mov DWORD PTR number_of_bytes_to_decode$[rbp], eax ; 173 : ; 174 : DWORD add_index = (DWORD) ( (double) number_of_bytes_to_decode * (double) 0.75 ) + 1; 0006d f2 0f 2a 45 10 cvtsi2sd xmm0, DWORD PTR number_of_bytes_to_decode$[rbp] 00072 f2 0f 59 05 00 00 00 00 mulsd xmm0, QWORD PTR __real@3fe8000000000000 0007a f2 48 0f 2c c0 cvttsd2si rax, xmm0 0007f ff c0 inc eax 00081 89 45 14 mov DWORD PTR add_index$[rbp], eax ; 175 : ; 176 : destination.SetSize( add_index ); 00084 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 00087 49 c7 c0 ff ff ff ff mov r8, -1 0008e 8b d0 mov edx, eax 00090 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00097 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 177 : add_index = 0; 0009c c7 45 14 00 00 00 00 mov DWORD PTR add_index$[rbp], 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(); 000a3 48 8b 4d 78 mov rcx, QWORD PTR source$[rbp] 000a7 e8 00 00 00 00 call ?GetData@CByteArray@@QEBAPEBEXZ ; CByteArray::GetData 000ac 48 89 45 18 mov QWORD PTR input_buffer$[rbp], rax $LN2@Decode: ; 184 : ; 185 : while( index < number_of_bytes_to_decode ) 000b0 8b 45 10 mov eax, DWORD PTR number_of_bytes_to_decode$[rbp] 000b3 39 45 0c cmp DWORD PTR index$[rbp], eax 000b6 0f 8d 02 03 00 00 jge $LN3@Decode ; 186 : { ; 187 : character_1 = __get_character( input_buffer, m_DecoderTable, index, number_of_bytes_to_decode ); 000bc 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 000c0 48 83 c0 08 add rax, 8 000c4 44 8b 4d 10 mov r9d, DWORD PTR number_of_bytes_to_decode$[rbp] 000c8 4c 8d 45 0c lea r8, QWORD PTR index$[rbp] 000cc 48 8b d0 mov rdx, rax 000cf 48 8b 4d 18 mov rcx, QWORD PTR input_buffer$[rbp] 000d3 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 000d8 88 45 05 mov BYTE PTR character_1$[rbp], al ; 188 : ; 189 : if ( character_1 != END_OF_BASE64_ENCODED_DATA ) 000db 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 000df 83 f8 3d cmp eax, 61 ; 0000003dH 000e2 0f 84 62 01 00 00 je $LN5@Decode ; 190 : { ; 191 : if ( m_DecoderTable[ character_1 ] == BASE64_UNKNOWN_VALUE ) 000e8 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 000ec 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 000f0 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 000f5 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 000fa 75 13 jne SHORT $LN7@Decode ; 192 : { ; 193 : destination.RemoveAll(); 000fc 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00103 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 194 : return( FALSE ); 00108 33 c0 xor eax, eax 0010a e9 ca 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 ); 0010f 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 00113 48 83 c0 08 add rax, 8 00117 44 8b 4d 10 mov r9d, DWORD PTR number_of_bytes_to_decode$[rbp] 0011b 4c 8d 45 0c lea r8, QWORD PTR index$[rbp] 0011f 48 8b d0 mov rdx, rax 00122 48 8b 4d 18 mov rcx, QWORD PTR input_buffer$[rbp] 00126 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 0012b 88 45 06 mov BYTE PTR character_2$[rbp], al ; 198 : ; 199 : if ( character_2 != END_OF_BASE64_ENCODED_DATA ) 0012e 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 00132 83 f8 3d cmp eax, 61 ; 0000003dH 00135 0f 84 05 01 00 00 je $LN8@Decode ; 200 : { ; 201 : if ( m_DecoderTable[ character_2 ] == BASE64_UNKNOWN_VALUE ) 0013b 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 0013f 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00143 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00148 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 0014d 75 13 jne SHORT $LN10@Decode ; 202 : { ; 203 : destination.RemoveAll(); 0014f 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00156 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 204 : return( FALSE ); 0015b 33 c0 xor eax, eax 0015d e9 77 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 ); 00162 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 00166 48 83 c0 08 add rax, 8 0016a 44 8b 4d 10 mov r9d, DWORD PTR number_of_bytes_to_decode$[rbp] 0016e 4c 8d 45 0c lea r8, QWORD PTR index$[rbp] 00172 48 8b d0 mov rdx, rax 00175 48 8b 4d 18 mov rcx, QWORD PTR input_buffer$[rbp] 00179 e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 0017e 88 45 07 mov BYTE PTR character_3$[rbp], al ; 208 : ; 209 : if ( character_3 != END_OF_BASE64_ENCODED_DATA ) 00181 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 00185 83 f8 3d cmp eax, 61 ; 0000003dH 00188 0f 84 ac 00 00 00 je $LN11@Decode ; 210 : { ; 211 : if ( m_DecoderTable[ character_3 ] == BASE64_UNKNOWN_VALUE ) 0018e 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 00192 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00196 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 0019b 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 001a0 75 13 jne SHORT $LN13@Decode ; 212 : { ; 213 : destination.RemoveAll(); 001a2 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 001a9 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 214 : return( FALSE ); 001ae 33 c0 xor eax, eax 001b0 e9 24 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 ); 001b5 48 8b 45 70 mov rax, QWORD PTR this$[rbp] 001b9 48 83 c0 08 add rax, 8 001bd 44 8b 4d 10 mov r9d, DWORD PTR number_of_bytes_to_decode$[rbp] 001c1 4c 8d 45 0c lea r8, QWORD PTR index$[rbp] 001c5 48 8b d0 mov rdx, rax 001c8 48 8b 4d 18 mov rcx, QWORD PTR input_buffer$[rbp] 001cc e8 00 00 00 00 call ?__get_character@@YAEPEBE0AEAHH@Z ; __get_character 001d1 88 45 08 mov BYTE PTR character_4$[rbp], al ; 218 : ; 219 : if ( character_4 != END_OF_BASE64_ENCODED_DATA ) 001d4 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 001d8 83 f8 3d cmp eax, 61 ; 0000003dH 001db 74 27 je SHORT $LN14@Decode ; 220 : { ; 221 : if ( m_DecoderTable[ character_4 ] == BASE64_UNKNOWN_VALUE ) 001dd 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 001e1 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 001e5 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 001ea 3d ff 00 00 00 cmp eax, 255 ; 000000ffH 001ef 75 13 jne SHORT $LN15@Decode ; 222 : { ; 223 : destination.RemoveAll(); 001f1 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 001f8 e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 224 : return( FALSE ); 001fd 33 c0 xor eax, eax 001ff e9 d5 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 || 00204 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 00208 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 0020d 74 16 je SHORT $LN17@Decode 0020f 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 00213 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 00218 74 0b je SHORT $LN17@Decode 0021a 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 0021e 3d fd 00 00 00 cmp eax, 253 ; 000000fdH 00223 75 13 jne SHORT $LN16@Decode $LN17@Decode: ; 230 : character_4 == BASE64_END_OF_BUFFER ) ; 231 : { ; 232 : destination.RemoveAll(); 00225 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0022c e8 00 00 00 00 call ?RemoveAll@CByteArray@@QEAAXXZ ; CByteArray::RemoveAll ; 233 : return( FALSE ); 00231 33 c0 xor eax, eax 00233 e9 a1 01 00 00 jmp $LN1@Decode $LN16@Decode: ; 234 : } ; 235 : } 00238 eb 04 jmp SHORT $LN12@Decode $LN11@Decode: ; 236 : else ; 237 : { ; 238 : character_4 = END_OF_BASE64_ENCODED_DATA; 0023a c6 45 08 3d mov BYTE PTR character_4$[rbp], 61 ; 0000003dH $LN12@Decode: ; 239 : } ; 240 : } 0023e eb 08 jmp SHORT $LN9@Decode $LN8@Decode: ; 241 : else ; 242 : { ; 243 : character_3 = END_OF_BASE64_ENCODED_DATA; 00240 c6 45 07 3d mov BYTE PTR character_3$[rbp], 61 ; 0000003dH ; 244 : character_4 = END_OF_BASE64_ENCODED_DATA; 00244 c6 45 08 3d mov BYTE PTR character_4$[rbp], 61 ; 0000003dH $LN9@Decode: ; 245 : } ; 246 : } 00248 eb 0c jmp SHORT $LN6@Decode $LN5@Decode: ; 247 : else ; 248 : { ; 249 : character_2 = END_OF_BASE64_ENCODED_DATA; 0024a c6 45 06 3d mov BYTE PTR character_2$[rbp], 61 ; 0000003dH ; 250 : character_3 = END_OF_BASE64_ENCODED_DATA; 0024e c6 45 07 3d mov BYTE PTR character_3$[rbp], 61 ; 0000003dH ; 251 : character_4 = END_OF_BASE64_ENCODED_DATA; 00252 c6 45 08 3d mov BYTE PTR character_4$[rbp], 61 ; 0000003dH $LN6@Decode: ; 252 : } ; 253 : ; 254 : if ( character_1 == END_OF_BASE64_ENCODED_DATA || 00256 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 0025a 83 f8 3d cmp eax, 61 ; 0000003dH 0025d 74 09 je SHORT $LN19@Decode 0025f 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 00263 83 f8 3d cmp eax, 61 ; 0000003dH 00266 75 22 jne SHORT $LN18@Decode $LN19@Decode: ; 255 : character_2 == END_OF_BASE64_ENCODED_DATA ) ; 256 : { ; 257 : destination.SetSize( add_index ); 00268 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 0026b 49 c7 c0 ff ff ff ff mov r8, -1 00272 8b d0 mov edx, eax 00274 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0027b e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 258 : return( TRUE ); 00280 b8 01 00 00 00 mov eax, 1 00285 e9 4f 01 00 00 jmp $LN1@Decode $LN18@Decode: ; 259 : } ; 260 : ; 261 : character_1 = m_DecoderTable[ character_1 ]; 0028a 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 0028e 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00292 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00297 88 45 05 mov BYTE PTR character_1$[rbp], al ; 262 : character_2 = m_DecoderTable[ character_2 ]; 0029a 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 0029e 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 002a2 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 002a7 88 45 06 mov BYTE PTR character_2$[rbp], al ; 263 : ; 264 : byte_to_add = static_cast< BYTE>( ( ( character_1 << 2 ) | ( ( character_2 & 0x30 ) >> 4 ) ) ); 002aa 0f b6 45 05 movzx eax, BYTE PTR character_1$[rbp] 002ae c1 e0 02 shl eax, 2 002b1 0f b6 4d 06 movzx ecx, BYTE PTR character_2$[rbp] 002b5 83 e1 30 and ecx, 48 ; 00000030H 002b8 c1 f9 04 sar ecx, 4 002bb 0b c1 or eax, ecx 002bd 88 45 04 mov BYTE PTR byte_to_add$[rbp], al ; 265 : ; 266 : destination.SetAt( add_index, byte_to_add ); 002c0 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 002c3 44 0f b6 45 04 movzx r8d, BYTE PTR byte_to_add$[rbp] 002c8 8b d0 mov edx, eax 002ca 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 002d1 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 267 : add_index++; 002d6 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 002d9 ff c0 inc eax 002db 89 45 14 mov DWORD PTR add_index$[rbp], eax ; 268 : ; 269 : if ( character_3 == END_OF_BASE64_ENCODED_DATA ) 002de 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 002e2 83 f8 3d cmp eax, 61 ; 0000003dH 002e5 75 22 jne SHORT $LN20@Decode ; 270 : { ; 271 : destination.SetSize( add_index ); 002e7 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 002ea 49 c7 c0 ff ff ff ff mov r8, -1 002f1 8b d0 mov edx, eax 002f3 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 002fa e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 272 : return( TRUE ); 002ff b8 01 00 00 00 mov eax, 1 00304 e9 d0 00 00 00 jmp $LN1@Decode $LN20@Decode: ; 273 : } ; 274 : ; 275 : character_3 = m_DecoderTable[ character_3 ]; 00309 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 0030d 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00311 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00316 88 45 07 mov BYTE PTR character_3$[rbp], al ; 276 : ; 277 : byte_to_add = static_cast< BYTE >( ( ( ( ( character_2 & 0x0F ) << 4 ) | ( ( character_3 & 0x3C ) >> 2 ) ) ) ); 00319 0f b6 45 06 movzx eax, BYTE PTR character_2$[rbp] 0031d 83 e0 0f and eax, 15 00320 c1 e0 04 shl eax, 4 00323 0f b6 4d 07 movzx ecx, BYTE PTR character_3$[rbp] 00327 83 e1 3c and ecx, 60 ; 0000003cH 0032a c1 f9 02 sar ecx, 2 0032d 0b c1 or eax, ecx 0032f 88 45 04 mov BYTE PTR byte_to_add$[rbp], al ; 278 : ; 279 : destination.SetAt( add_index, byte_to_add ); 00332 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 00335 44 0f b6 45 04 movzx r8d, BYTE PTR byte_to_add$[rbp] 0033a 8b d0 mov edx, eax 0033c 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 00343 e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 280 : add_index++; 00348 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 0034b ff c0 inc eax 0034d 89 45 14 mov DWORD PTR add_index$[rbp], eax ; 281 : ; 282 : if ( character_4 == END_OF_BASE64_ENCODED_DATA ) 00350 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 00354 83 f8 3d cmp eax, 61 ; 0000003dH 00357 75 1f jne SHORT $LN21@Decode ; 283 : { ; 284 : destination.SetSize( add_index ); 00359 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 0035c 49 c7 c0 ff ff ff ff mov r8, -1 00363 8b d0 mov edx, eax 00365 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 0036c e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 285 : return( TRUE ); 00371 b8 01 00 00 00 mov eax, 1 00376 eb 61 jmp SHORT $LN1@Decode $LN21@Decode: ; 286 : } ; 287 : ; 288 : character_4 = m_DecoderTable[ character_4 ]; 00378 0f b6 45 08 movzx eax, BYTE PTR character_4$[rbp] 0037c 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00380 0f b6 44 01 08 movzx eax, BYTE PTR [rcx+rax+8] 00385 88 45 08 mov BYTE PTR character_4$[rbp], al ; 289 : ; 290 : byte_to_add = static_cast< BYTE >( ( ( ( character_3 & 0x03 ) << 6 ) | character_4 ) ); 00388 0f b6 45 07 movzx eax, BYTE PTR character_3$[rbp] 0038c 83 e0 03 and eax, 3 0038f c1 e0 06 shl eax, 6 00392 0f b6 4d 08 movzx ecx, BYTE PTR character_4$[rbp] 00396 0b c1 or eax, ecx 00398 88 45 04 mov BYTE PTR byte_to_add$[rbp], al ; 291 : ; 292 : destination.SetAt( add_index, byte_to_add ); 0039b 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 0039e 44 0f b6 45 04 movzx r8d, BYTE PTR byte_to_add$[rbp] 003a3 8b d0 mov edx, eax 003a5 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 003ac e8 00 00 00 00 call ?SetAt@CByteArray@@QEAAX_JE@Z ; CByteArray::SetAt ; 293 : add_index++; 003b1 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 003b4 ff c0 inc eax 003b6 89 45 14 mov DWORD PTR add_index$[rbp], eax ; 294 : } 003b9 e9 f2 fc ff ff jmp $LN2@Decode $LN3@Decode: ; 295 : ; 296 : destination.SetSize( add_index ); 003be 8b 45 14 mov eax, DWORD PTR add_index$[rbp] 003c1 49 c7 c0 ff ff ff ff mov r8, -1 003c8 8b d0 mov edx, eax 003ca 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR destination$[rbp] 003d1 e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize ; 297 : ; 298 : return( return_value ); 003d6 8b 45 00 mov eax, DWORD PTR return_value$[rbp] $LN1@Decode: ; 299 : } 003d9 48 8d 65 60 lea rsp, QWORD PTR [rbp+96] 003dd 5d pop rbp 003de c3 ret 0 ?Decode@CBase64Coding@@UEAAHAEBVCByteArray@@AEAV2@@Z ENDP ; CBase64Coding::Decode _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ??1CBase64Coding@@UEAA@XZ _TEXT SEGMENT this$ = 80 ??1CBase64Coding@@UEAA@XZ PROC ; CBase64Coding::~CBase64Coding, COMDAT ; 66 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp 0000d 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00011 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_7CBase64Coding@@6B@ 00018 48 89 08 mov QWORD PTR [rax], rcx ; 67 : } 0001b 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 0001f 5d pop rbp 00020 c3 ret 0 ??1CBase64Coding@@UEAA@XZ ENDP ; CBase64Coding::~CBase64Coding _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ??0CBase64Coding@@QEAA@XZ _TEXT SEGMENT this$ = 80 ??0CBase64Coding@@QEAA@XZ PROC ; CBase64Coding::CBase64Coding, COMDAT ; 61 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp 0000d 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00011 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_7CBase64Coding@@6B@ 00018 48 89 08 mov QWORD PTR [rax], rcx ; 62 : m_DecoderTable[ 0 ] = 0x00; 0001b b8 01 00 00 00 mov eax, 1 00020 48 6b c0 00 imul rax, rax, 0 00024 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00028 c6 44 01 08 00 mov BYTE PTR [rcx+rax+8], 0 ; 63 : } 0002d 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00031 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00035 5d pop rbp 00036 c3 ret 0 ??0CBase64Coding@@QEAA@XZ ENDP ; CBase64Coding::CBase64Coding _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ _TEXT SEGMENT this$ = 80 ?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ PROC ; CBase64Coding::m_InitializeDecoderTable, COMDAT ; 70 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 60 sub rsp, 96 ; 00000060H 0000a 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 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 ) ); 0000f 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00013 48 83 c0 08 add rax, 8 00017 41 b8 00 01 00 00 mov r8d, 256 ; 00000100H 0001d ba ff 00 00 00 mov edx, 255 ; 000000ffH 00022 48 8b c8 mov rcx, rax 00025 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; 0002a b8 01 00 00 00 mov eax, 1 0002f 48 6b c0 2b imul rax, rax, 43 ; 0000002bH 00033 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00037 c6 44 01 08 3e mov BYTE PTR [rcx+rax+8], 62 ; 0000003eH ; 82 : m_DecoderTable[ 47 ] = 63; 0003c b8 01 00 00 00 mov eax, 1 00041 48 6b c0 2f imul rax, rax, 47 ; 0000002fH 00045 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00049 c6 44 01 08 3f mov BYTE PTR [rcx+rax+8], 63 ; 0000003fH ; 83 : m_DecoderTable[ 48 ] = 52; 0004e b8 01 00 00 00 mov eax, 1 00053 48 6b c0 30 imul rax, rax, 48 ; 00000030H 00057 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0005b c6 44 01 08 34 mov BYTE PTR [rcx+rax+8], 52 ; 00000034H ; 84 : m_DecoderTable[ 49 ] = 53; 00060 b8 01 00 00 00 mov eax, 1 00065 48 6b c0 31 imul rax, rax, 49 ; 00000031H 00069 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0006d c6 44 01 08 35 mov BYTE PTR [rcx+rax+8], 53 ; 00000035H ; 85 : m_DecoderTable[ 50 ] = 54; 00072 b8 01 00 00 00 mov eax, 1 00077 48 6b c0 32 imul rax, rax, 50 ; 00000032H 0007b 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 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 4d 50 mov rcx, QWORD PTR this$[rbp] 00091 c6 44 01 08 37 mov BYTE PTR [rcx+rax+8], 55 ; 00000037H ; 87 : m_DecoderTable[ 52 ] = 56; 00096 b8 01 00 00 00 mov eax, 1 0009b 48 6b c0 34 imul rax, rax, 52 ; 00000034H 0009f 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 000a3 c6 44 01 08 38 mov BYTE PTR [rcx+rax+8], 56 ; 00000038H ; 88 : m_DecoderTable[ 53 ] = 57; 000a8 b8 01 00 00 00 mov eax, 1 000ad 48 6b c0 35 imul rax, rax, 53 ; 00000035H 000b1 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 000b5 c6 44 01 08 39 mov BYTE PTR [rcx+rax+8], 57 ; 00000039H ; 89 : m_DecoderTable[ 54 ] = 58; 000ba b8 01 00 00 00 mov eax, 1 000bf 48 6b c0 36 imul rax, rax, 54 ; 00000036H 000c3 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 000c7 c6 44 01 08 3a mov BYTE PTR [rcx+rax+8], 58 ; 0000003aH ; 90 : m_DecoderTable[ 55 ] = 59; 000cc b8 01 00 00 00 mov eax, 1 000d1 48 6b c0 37 imul rax, rax, 55 ; 00000037H 000d5 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 000d9 c6 44 01 08 3b mov BYTE PTR [rcx+rax+8], 59 ; 0000003bH ; 91 : m_DecoderTable[ 56 ] = 60; 000de b8 01 00 00 00 mov eax, 1 000e3 48 6b c0 38 imul rax, rax, 56 ; 00000038H 000e7 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 000eb c6 44 01 08 3c mov BYTE PTR [rcx+rax+8], 60 ; 0000003cH ; 92 : m_DecoderTable[ 57 ] = 61; 000f0 b8 01 00 00 00 mov eax, 1 000f5 48 6b c0 39 imul rax, rax, 57 ; 00000039H 000f9 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 000fd c6 44 01 08 3d mov BYTE PTR [rcx+rax+8], 61 ; 0000003dH ; 93 : m_DecoderTable[ 65 ] = 0; 00102 b8 01 00 00 00 mov eax, 1 00107 48 6b c0 41 imul rax, rax, 65 ; 00000041H 0010b 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0010f c6 44 01 08 00 mov BYTE PTR [rcx+rax+8], 0 ; 94 : m_DecoderTable[ 66 ] = 1; 00114 b8 01 00 00 00 mov eax, 1 00119 48 6b c0 42 imul rax, rax, 66 ; 00000042H 0011d 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00121 c6 44 01 08 01 mov BYTE PTR [rcx+rax+8], 1 ; 95 : m_DecoderTable[ 67 ] = 2; 00126 b8 01 00 00 00 mov eax, 1 0012b 48 6b c0 43 imul rax, rax, 67 ; 00000043H 0012f 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00133 c6 44 01 08 02 mov BYTE PTR [rcx+rax+8], 2 ; 96 : m_DecoderTable[ 68 ] = 3; 00138 b8 01 00 00 00 mov eax, 1 0013d 48 6b c0 44 imul rax, rax, 68 ; 00000044H 00141 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00145 c6 44 01 08 03 mov BYTE PTR [rcx+rax+8], 3 ; 97 : m_DecoderTable[ 69 ] = 4; 0014a b8 01 00 00 00 mov eax, 1 0014f 48 6b c0 45 imul rax, rax, 69 ; 00000045H 00153 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00157 c6 44 01 08 04 mov BYTE PTR [rcx+rax+8], 4 ; 98 : m_DecoderTable[ 70 ] = 5; 0015c b8 01 00 00 00 mov eax, 1 00161 48 6b c0 46 imul rax, rax, 70 ; 00000046H 00165 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00169 c6 44 01 08 05 mov BYTE PTR [rcx+rax+8], 5 ; 99 : m_DecoderTable[ 71 ] = 6; 0016e b8 01 00 00 00 mov eax, 1 00173 48 6b c0 47 imul rax, rax, 71 ; 00000047H 00177 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0017b c6 44 01 08 06 mov BYTE PTR [rcx+rax+8], 6 ; 100 : m_DecoderTable[ 72 ] = 7; 00180 b8 01 00 00 00 mov eax, 1 00185 48 6b c0 48 imul rax, rax, 72 ; 00000048H 00189 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0018d c6 44 01 08 07 mov BYTE PTR [rcx+rax+8], 7 ; 101 : m_DecoderTable[ 73 ] = 8; 00192 b8 01 00 00 00 mov eax, 1 00197 48 6b c0 49 imul rax, rax, 73 ; 00000049H 0019b 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0019f c6 44 01 08 08 mov BYTE PTR [rcx+rax+8], 8 ; 102 : m_DecoderTable[ 74 ] = 9; 001a4 b8 01 00 00 00 mov eax, 1 001a9 48 6b c0 4a imul rax, rax, 74 ; 0000004aH 001ad 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 001b1 c6 44 01 08 09 mov BYTE PTR [rcx+rax+8], 9 ; 103 : m_DecoderTable[ 75 ] = 10; 001b6 b8 01 00 00 00 mov eax, 1 001bb 48 6b c0 4b imul rax, rax, 75 ; 0000004bH 001bf 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 001c3 c6 44 01 08 0a mov BYTE PTR [rcx+rax+8], 10 ; 104 : m_DecoderTable[ 76 ] = 11; 001c8 b8 01 00 00 00 mov eax, 1 001cd 48 6b c0 4c imul rax, rax, 76 ; 0000004cH 001d1 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 001d5 c6 44 01 08 0b mov BYTE PTR [rcx+rax+8], 11 ; 105 : m_DecoderTable[ 77 ] = 12; 001da b8 01 00 00 00 mov eax, 1 001df 48 6b c0 4d imul rax, rax, 77 ; 0000004dH 001e3 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 001e7 c6 44 01 08 0c mov BYTE PTR [rcx+rax+8], 12 ; 106 : m_DecoderTable[ 78 ] = 13; 001ec b8 01 00 00 00 mov eax, 1 001f1 48 6b c0 4e imul rax, rax, 78 ; 0000004eH 001f5 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 001f9 c6 44 01 08 0d mov BYTE PTR [rcx+rax+8], 13 ; 107 : m_DecoderTable[ 79 ] = 14; 001fe b8 01 00 00 00 mov eax, 1 00203 48 6b c0 4f imul rax, rax, 79 ; 0000004fH 00207 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0020b c6 44 01 08 0e mov BYTE PTR [rcx+rax+8], 14 ; 108 : m_DecoderTable[ 80 ] = 15; 00210 b8 01 00 00 00 mov eax, 1 00215 48 6b c0 50 imul rax, rax, 80 ; 00000050H 00219 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0021d c6 44 01 08 0f mov BYTE PTR [rcx+rax+8], 15 ; 109 : m_DecoderTable[ 81 ] = 16; 00222 b8 01 00 00 00 mov eax, 1 00227 48 6b c0 51 imul rax, rax, 81 ; 00000051H 0022b 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0022f c6 44 01 08 10 mov BYTE PTR [rcx+rax+8], 16 ; 110 : m_DecoderTable[ 82 ] = 17; 00234 b8 01 00 00 00 mov eax, 1 00239 48 6b c0 52 imul rax, rax, 82 ; 00000052H 0023d 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00241 c6 44 01 08 11 mov BYTE PTR [rcx+rax+8], 17 ; 111 : m_DecoderTable[ 83 ] = 18; 00246 b8 01 00 00 00 mov eax, 1 0024b 48 6b c0 53 imul rax, rax, 83 ; 00000053H 0024f 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00253 c6 44 01 08 12 mov BYTE PTR [rcx+rax+8], 18 ; 112 : m_DecoderTable[ 84 ] = 19; 00258 b8 01 00 00 00 mov eax, 1 0025d 48 6b c0 54 imul rax, rax, 84 ; 00000054H 00261 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00265 c6 44 01 08 13 mov BYTE PTR [rcx+rax+8], 19 ; 113 : m_DecoderTable[ 85 ] = 20; 0026a b8 01 00 00 00 mov eax, 1 0026f 48 6b c0 55 imul rax, rax, 85 ; 00000055H 00273 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00277 c6 44 01 08 14 mov BYTE PTR [rcx+rax+8], 20 ; 114 : m_DecoderTable[ 86 ] = 21; 0027c b8 01 00 00 00 mov eax, 1 00281 48 6b c0 56 imul rax, rax, 86 ; 00000056H 00285 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00289 c6 44 01 08 15 mov BYTE PTR [rcx+rax+8], 21 ; 115 : m_DecoderTable[ 87 ] = 22; 0028e b8 01 00 00 00 mov eax, 1 00293 48 6b c0 57 imul rax, rax, 87 ; 00000057H 00297 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0029b c6 44 01 08 16 mov BYTE PTR [rcx+rax+8], 22 ; 116 : m_DecoderTable[ 88 ] = 23; 002a0 b8 01 00 00 00 mov eax, 1 002a5 48 6b c0 58 imul rax, rax, 88 ; 00000058H 002a9 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 002ad c6 44 01 08 17 mov BYTE PTR [rcx+rax+8], 23 ; 117 : m_DecoderTable[ 89 ] = 24; 002b2 b8 01 00 00 00 mov eax, 1 002b7 48 6b c0 59 imul rax, rax, 89 ; 00000059H 002bb 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 002bf c6 44 01 08 18 mov BYTE PTR [rcx+rax+8], 24 ; 118 : m_DecoderTable[ 90 ] = 25; 002c4 b8 01 00 00 00 mov eax, 1 002c9 48 6b c0 5a imul rax, rax, 90 ; 0000005aH 002cd 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 002d1 c6 44 01 08 19 mov BYTE PTR [rcx+rax+8], 25 ; 119 : m_DecoderTable[ 97 ] = 26; 002d6 b8 01 00 00 00 mov eax, 1 002db 48 6b c0 61 imul rax, rax, 97 ; 00000061H 002df 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 002e3 c6 44 01 08 1a mov BYTE PTR [rcx+rax+8], 26 ; 120 : m_DecoderTable[ 98 ] = 27; 002e8 b8 01 00 00 00 mov eax, 1 002ed 48 6b c0 62 imul rax, rax, 98 ; 00000062H 002f1 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 002f5 c6 44 01 08 1b mov BYTE PTR [rcx+rax+8], 27 ; 121 : m_DecoderTable[ 99 ] = 28; 002fa b8 01 00 00 00 mov eax, 1 002ff 48 6b c0 63 imul rax, rax, 99 ; 00000063H 00303 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00307 c6 44 01 08 1c mov BYTE PTR [rcx+rax+8], 28 ; 122 : m_DecoderTable[ 100 ] = 29; 0030c b8 01 00 00 00 mov eax, 1 00311 48 6b c0 64 imul rax, rax, 100 ; 00000064H 00315 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00319 c6 44 01 08 1d mov BYTE PTR [rcx+rax+8], 29 ; 123 : m_DecoderTable[ 101 ] = 30; 0031e b8 01 00 00 00 mov eax, 1 00323 48 6b c0 65 imul rax, rax, 101 ; 00000065H 00327 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0032b c6 44 01 08 1e mov BYTE PTR [rcx+rax+8], 30 ; 124 : m_DecoderTable[ 102 ] = 31; 00330 b8 01 00 00 00 mov eax, 1 00335 48 6b c0 66 imul rax, rax, 102 ; 00000066H 00339 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0033d c6 44 01 08 1f mov BYTE PTR [rcx+rax+8], 31 ; 125 : m_DecoderTable[ 103 ] = 32; 00342 b8 01 00 00 00 mov eax, 1 00347 48 6b c0 67 imul rax, rax, 103 ; 00000067H 0034b 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0034f c6 44 01 08 20 mov BYTE PTR [rcx+rax+8], 32 ; 00000020H ; 126 : m_DecoderTable[ 104 ] = 33; 00354 b8 01 00 00 00 mov eax, 1 00359 48 6b c0 68 imul rax, rax, 104 ; 00000068H 0035d 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00361 c6 44 01 08 21 mov BYTE PTR [rcx+rax+8], 33 ; 00000021H ; 127 : m_DecoderTable[ 105 ] = 34; 00366 b8 01 00 00 00 mov eax, 1 0036b 48 6b c0 69 imul rax, rax, 105 ; 00000069H 0036f 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00373 c6 44 01 08 22 mov BYTE PTR [rcx+rax+8], 34 ; 00000022H ; 128 : m_DecoderTable[ 106 ] = 35; 00378 b8 01 00 00 00 mov eax, 1 0037d 48 6b c0 6a imul rax, rax, 106 ; 0000006aH 00381 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00385 c6 44 01 08 23 mov BYTE PTR [rcx+rax+8], 35 ; 00000023H ; 129 : m_DecoderTable[ 107 ] = 36; 0038a b8 01 00 00 00 mov eax, 1 0038f 48 6b c0 6b imul rax, rax, 107 ; 0000006bH 00393 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00397 c6 44 01 08 24 mov BYTE PTR [rcx+rax+8], 36 ; 00000024H ; 130 : m_DecoderTable[ 108 ] = 37; 0039c b8 01 00 00 00 mov eax, 1 003a1 48 6b c0 6c imul rax, rax, 108 ; 0000006cH 003a5 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 003a9 c6 44 01 08 25 mov BYTE PTR [rcx+rax+8], 37 ; 00000025H ; 131 : m_DecoderTable[ 109 ] = 38; 003ae b8 01 00 00 00 mov eax, 1 003b3 48 6b c0 6d imul rax, rax, 109 ; 0000006dH 003b7 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 003bb c6 44 01 08 26 mov BYTE PTR [rcx+rax+8], 38 ; 00000026H ; 132 : m_DecoderTable[ 110 ] = 39; 003c0 b8 01 00 00 00 mov eax, 1 003c5 48 6b c0 6e imul rax, rax, 110 ; 0000006eH 003c9 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 003cd c6 44 01 08 27 mov BYTE PTR [rcx+rax+8], 39 ; 00000027H ; 133 : m_DecoderTable[ 111 ] = 40; 003d2 b8 01 00 00 00 mov eax, 1 003d7 48 6b c0 6f imul rax, rax, 111 ; 0000006fH 003db 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 003df c6 44 01 08 28 mov BYTE PTR [rcx+rax+8], 40 ; 00000028H ; 134 : m_DecoderTable[ 112 ] = 41; 003e4 b8 01 00 00 00 mov eax, 1 003e9 48 6b c0 70 imul rax, rax, 112 ; 00000070H 003ed 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 003f1 c6 44 01 08 29 mov BYTE PTR [rcx+rax+8], 41 ; 00000029H ; 135 : m_DecoderTable[ 113 ] = 42; 003f6 b8 01 00 00 00 mov eax, 1 003fb 48 6b c0 71 imul rax, rax, 113 ; 00000071H 003ff 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00403 c6 44 01 08 2a mov BYTE PTR [rcx+rax+8], 42 ; 0000002aH ; 136 : m_DecoderTable[ 114 ] = 43; 00408 b8 01 00 00 00 mov eax, 1 0040d 48 6b c0 72 imul rax, rax, 114 ; 00000072H 00411 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00415 c6 44 01 08 2b mov BYTE PTR [rcx+rax+8], 43 ; 0000002bH ; 137 : m_DecoderTable[ 115 ] = 44; 0041a b8 01 00 00 00 mov eax, 1 0041f 48 6b c0 73 imul rax, rax, 115 ; 00000073H 00423 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00427 c6 44 01 08 2c mov BYTE PTR [rcx+rax+8], 44 ; 0000002cH ; 138 : m_DecoderTable[ 116 ] = 45; 0042c b8 01 00 00 00 mov eax, 1 00431 48 6b c0 74 imul rax, rax, 116 ; 00000074H 00435 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00439 c6 44 01 08 2d mov BYTE PTR [rcx+rax+8], 45 ; 0000002dH ; 139 : m_DecoderTable[ 117 ] = 46; 0043e b8 01 00 00 00 mov eax, 1 00443 48 6b c0 75 imul rax, rax, 117 ; 00000075H 00447 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0044b c6 44 01 08 2e mov BYTE PTR [rcx+rax+8], 46 ; 0000002eH ; 140 : m_DecoderTable[ 118 ] = 47; 00450 b8 01 00 00 00 mov eax, 1 00455 48 6b c0 76 imul rax, rax, 118 ; 00000076H 00459 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0045d c6 44 01 08 2f mov BYTE PTR [rcx+rax+8], 47 ; 0000002fH ; 141 : m_DecoderTable[ 119 ] = 48; 00462 b8 01 00 00 00 mov eax, 1 00467 48 6b c0 77 imul rax, rax, 119 ; 00000077H 0046b 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0046f c6 44 01 08 30 mov BYTE PTR [rcx+rax+8], 48 ; 00000030H ; 142 : m_DecoderTable[ 120 ] = 49; 00474 b8 01 00 00 00 mov eax, 1 00479 48 6b c0 78 imul rax, rax, 120 ; 00000078H 0047d 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00481 c6 44 01 08 31 mov BYTE PTR [rcx+rax+8], 49 ; 00000031H ; 143 : m_DecoderTable[ 121 ] = 50; 00486 b8 01 00 00 00 mov eax, 1 0048b 48 6b c0 79 imul rax, rax, 121 ; 00000079H 0048f 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00493 c6 44 01 08 32 mov BYTE PTR [rcx+rax+8], 50 ; 00000032H ; 144 : m_DecoderTable[ 122 ] = 51; 00498 b8 01 00 00 00 mov eax, 1 0049d 48 6b c0 7a imul rax, rax, 122 ; 0000007aH 004a1 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 004a5 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!) 004aa b8 01 00 00 00 mov eax, 1 004af 48 6b c0 09 imul rax, rax, 9 004b3 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 004b7 c6 44 01 08 fe mov BYTE PTR [rcx+rax+8], 254 ; 000000feH ; 150 : m_DecoderTable[ 32 ] = BASE64_IGNORABLE_CHARACTER; // Space character 004bc b8 01 00 00 00 mov eax, 1 004c1 48 6b c0 20 imul rax, rax, 32 ; 00000020H 004c5 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 004c9 c6 44 01 08 fe mov BYTE PTR [rcx+rax+8], 254 ; 000000feH ; 151 : m_DecoderTable[ CARRIAGE_RETURN ] = BASE64_IGNORABLE_CHARACTER; 004ce b8 01 00 00 00 mov eax, 1 004d3 48 6b c0 0d imul rax, rax, 13 004d7 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 004db c6 44 01 08 fe mov BYTE PTR [rcx+rax+8], 254 ; 000000feH ; 152 : m_DecoderTable[ LINE_FEED ] = BASE64_IGNORABLE_CHARACTER; 004e0 b8 01 00 00 00 mov eax, 1 004e5 48 6b c0 0a imul rax, rax, 10 004e9 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 004ed c6 44 01 08 fe mov BYTE PTR [rcx+rax+8], 254 ; 000000feH ; 153 : } 004f2 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 004f6 5d pop rbp 004f7 c3 ret 0 ?m_InitializeDecoderTable@CBase64Coding@@MEAAXXZ ENDP ; CBase64Coding::m_InitializeDecoderTable _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 nLength$ = 88 ?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 55 push rbp 0000a 48 83 ec 60 sub rsp, 96 ; 00000060H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 868 : ATLASSERT( nLength >= 0 ); ; 869 : ATLASSERT( nLength <= GetData()->nAllocLength ); ; 870 : ; 871 : if( nLength < 0 || nLength > GetData()->nAllocLength) 00013 83 7d 58 00 cmp DWORD PTR nLength$[rbp], 0 00017 7c 11 jl SHORT $LN3@SetLength 00019 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0001d e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 00022 8b 40 0c mov eax, DWORD PTR [rax+12] 00025 39 45 58 cmp DWORD PTR nLength$[rbp], eax 00028 7e 0a jle SHORT $LN2@SetLength $LN3@SetLength: ; 872 : AtlThrow(E_INVALIDARG); 0002a b9 57 00 07 80 mov ecx, -2147024809 ; ffffffff80070057H 0002f e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@SetLength: ; 873 : ; 874 : GetData()->nDataLength = nLength; 00034 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00038 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 0003d 8b 4d 58 mov ecx, DWORD PTR nLength$[rbp] 00040 89 48 08 mov DWORD PTR [rax+8], ecx ; 875 : m_pszData[nLength] = 0; 00043 48 63 45 58 movsxd rax, DWORD PTR nLength$[rbp] 00047 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0004b 48 8b 09 mov rcx, QWORD PTR [rcx] 0004e c6 04 01 00 mov BYTE PTR [rcx+rax], 0 $LN4@SetLength: ; 876 : } 00052 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00056 5d pop rbp 00057 c3 ret 0 ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::SetLength _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 0 pStringMgr$ = 8 pNewData$ = 16 tv78 = 88 this$ = 112 nLength$ = 120 ?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 55 push rbp 0000a 48 81 ec 80 00 00 00 sub rsp, 128 ; 00000080H 00011 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 850 : CStringData* pOldData = GetData(); 00016 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 0001a e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 0001f 48 89 45 00 mov QWORD PTR pOldData$[rbp], rax ; 851 : ATLASSERT( pOldData->nAllocLength < nLength ); ; 852 : IAtlStringMgr* pStringMgr = pOldData->pStringMgr; 00023 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00027 48 8b 00 mov rax, QWORD PTR [rax] 0002a 48 89 45 08 mov QWORD PTR pStringMgr$[rbp], rax ; 853 : if ( pOldData->nAllocLength >= nLength || nLength <= 0) 0002e 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00032 8b 4d 78 mov ecx, DWORD PTR nLength$[rbp] 00035 39 48 0c cmp DWORD PTR [rax+12], ecx 00038 7d 06 jge SHORT $LN3@Reallocate 0003a 83 7d 78 00 cmp DWORD PTR nLength$[rbp], 0 0003e 7f 07 jg SHORT $LN2@Reallocate $LN3@Reallocate: ; 854 : { ; 855 : ThrowMemoryException(); 00040 e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException ; 856 : return; 00045 eb 41 jmp SHORT $LN1@Reallocate $LN2@Reallocate: ; 857 : } ; 858 : CStringData* pNewData = pStringMgr->Reallocate( pOldData, nLength, sizeof( XCHAR ) ); 00047 48 8b 45 08 mov rax, QWORD PTR pStringMgr$[rbp] 0004b 48 8b 00 mov rax, QWORD PTR [rax] 0004e 48 8b 40 10 mov rax, QWORD PTR [rax+16] 00052 48 89 45 58 mov QWORD PTR tv78[rbp], rax 00056 41 b9 01 00 00 00 mov r9d, 1 0005c 44 8b 45 78 mov r8d, DWORD PTR nLength$[rbp] 00060 48 8b 55 00 mov rdx, QWORD PTR pOldData$[rbp] 00064 48 8b 4d 08 mov rcx, QWORD PTR pStringMgr$[rbp] 00068 ff 55 58 call QWORD PTR tv78[rbp] 0006b 48 89 45 10 mov QWORD PTR pNewData$[rbp], rax ; 859 : if( pNewData == NULL ) 0006f 48 83 7d 10 00 cmp QWORD PTR pNewData$[rbp], 0 00074 75 05 jne SHORT $LN4@Reallocate ; 860 : { ; 861 : ThrowMemoryException(); 00076 e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<char,0>::ThrowMemoryException $LN4@Reallocate: ; 862 : } ; 863 : Attach( pNewData ); 0007b 48 8b 55 10 mov rdx, QWORD PTR pNewData$[rbp] 0007f 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00083 e8 00 00 00 00 call ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach $LN1@Reallocate: $LN5@Reallocate: ; 864 : } 00088 48 8d 65 60 lea rsp, QWORD PTR [rbp+96] 0008c 5d pop rbp 0008d c3 ret 0 ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::Reallocate _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 pOldData$ = 0 nNewLength$1 = 8 this$ = 96 nLength$ = 104 ?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 55 push rbp 0000a 48 83 ec 70 sub rsp, 112 ; 00000070H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 819 : CStringData* pOldData = GetData(); 00013 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 00017 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 0001c 48 89 45 00 mov QWORD PTR pOldData$[rbp], rax ; 820 : if( pOldData->nDataLength > nLength ) 00020 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00024 8b 4d 68 mov ecx, DWORD PTR nLength$[rbp] 00027 39 48 08 cmp DWORD PTR [rax+8], ecx 0002a 7e 0a jle SHORT $LN2@PrepareWri ; 821 : { ; 822 : nLength = pOldData->nDataLength; 0002c 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00030 8b 40 08 mov eax, DWORD PTR [rax+8] 00033 89 45 68 mov DWORD PTR nLength$[rbp], eax $LN2@PrepareWri: ; 823 : } ; 824 : if( pOldData->IsShared() ) 00036 48 8b 4d 00 mov rcx, QWORD PTR pOldData$[rbp] 0003a e8 00 00 00 00 call ?IsShared@CStringData@ATL@@QEBA_NXZ ; ATL::CStringData::IsShared 0003f 0f b6 c0 movzx eax, al 00042 85 c0 test eax, eax 00044 74 0e je SHORT $LN3@PrepareWri ; 825 : { ; 826 : Fork( nLength ); 00046 8b 55 68 mov edx, DWORD PTR nLength$[rbp] 00049 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 0004d e8 00 00 00 00 call ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Fork ; 827 : } 00052 eb 58 jmp SHORT $LN4@PrepareWri $LN3@PrepareWri: ; 828 : else if( pOldData->nAllocLength < nLength ) 00054 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00058 8b 4d 68 mov ecx, DWORD PTR nLength$[rbp] 0005b 39 48 0c cmp DWORD PTR [rax+12], ecx 0005e 7d 4c jge SHORT $LN5@PrepareWri ; 829 : { ; 830 : // Grow exponentially, until we hit 1G, then by 1M thereafter. ; 831 : int nNewLength = pOldData->nAllocLength; 00060 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00064 8b 40 0c mov eax, DWORD PTR [rax+12] 00067 89 45 08 mov DWORD PTR nNewLength$1[rbp], eax ; 832 : if( nNewLength > 1024 * 1024 * 1024 ) 0006a 81 7d 08 00 00 00 40 cmp DWORD PTR nNewLength$1[rbp], 1073741824 ; 40000000H 00071 7e 0d jle SHORT $LN6@PrepareWri ; 833 : { ; 834 : nNewLength += 1024 * 1024; 00073 8b 45 08 mov eax, DWORD PTR nNewLength$1[rbp] 00076 05 00 00 10 00 add eax, 1048576 ; 00100000H 0007b 89 45 08 mov DWORD PTR nNewLength$1[rbp], eax ; 835 : } 0007e eb 12 jmp SHORT $LN7@PrepareWri $LN6@PrepareWri: ; 836 : else ; 837 : { ; 838 : // Exponential growth factor is 1.5. ; 839 : nNewLength = nNewLength + nNewLength / 2; 00080 8b 45 08 mov eax, DWORD PTR nNewLength$1[rbp] 00083 99 cdq 00084 2b c2 sub eax, edx 00086 d1 f8 sar eax, 1 00088 8b 4d 08 mov ecx, DWORD PTR nNewLength$1[rbp] 0008b 03 c8 add ecx, eax 0008d 8b c1 mov eax, ecx 0008f 89 45 08 mov DWORD PTR nNewLength$1[rbp], eax $LN7@PrepareWri: ; 840 : } ; 841 : if( nNewLength < nLength ) 00092 8b 45 68 mov eax, DWORD PTR nLength$[rbp] 00095 39 45 08 cmp DWORD PTR nNewLength$1[rbp], eax 00098 7d 06 jge SHORT $LN8@PrepareWri ; 842 : { ; 843 : nNewLength = nLength; 0009a 8b 45 68 mov eax, DWORD PTR nLength$[rbp] 0009d 89 45 08 mov DWORD PTR nNewLength$1[rbp], eax $LN8@PrepareWri: ; 844 : } ; 845 : Reallocate( nNewLength ); 000a0 8b 55 08 mov edx, DWORD PTR nNewLength$1[rbp] 000a3 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 000a7 e8 00 00 00 00 call ?Reallocate@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::Reallocate $LN5@PrepareWri: $LN4@PrepareWri: ; 846 : } ; 847 : } 000ac 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 000b0 5d pop rbp 000b1 c3 ret 0 ?PrepareWrite2@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::PrepareWrite2 _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 pOldData$ = 0 nShared$ = 8 nTooShort$ = 12 this$ = 96 nLength$ = 104 ?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 55 push rbp 0000a 48 83 ec 70 sub rsp, 112 ; 00000070H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 804 : if (nLength < 0) 00013 83 7d 68 00 cmp DWORD PTR nLength$[rbp], 0 00017 7d 0a jge SHORT $LN2@PrepareWri ; 805 : AtlThrow(E_INVALIDARG); 00019 b9 57 00 07 80 mov ecx, -2147024809 ; ffffffff80070057H 0001e e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@PrepareWri: ; 806 : ; 807 : CStringData* pOldData = GetData(); 00023 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 00027 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 0002c 48 89 45 00 mov QWORD PTR pOldData$[rbp], rax ; 808 : int nShared = 1-pOldData->nRefs; // nShared < 0 means true, >= 0 means false 00030 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00034 b9 01 00 00 00 mov ecx, 1 00039 2b 48 10 sub ecx, DWORD PTR [rax+16] 0003c 8b c1 mov eax, ecx 0003e 89 45 08 mov DWORD PTR nShared$[rbp], eax ; 809 : int nTooShort = pOldData->nAllocLength-nLength; // nTooShort < 0 means true, >= 0 means false 00041 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00045 8b 4d 68 mov ecx, DWORD PTR nLength$[rbp] 00048 8b 40 0c mov eax, DWORD PTR [rax+12] 0004b 2b c1 sub eax, ecx 0004d 89 45 0c mov DWORD PTR nTooShort$[rbp], eax ; 810 : if( (nShared|nTooShort) < 0 ) // If either sign bit is set (i.e. either is less than zero), we need to copy data 00050 8b 45 0c mov eax, DWORD PTR nTooShort$[rbp] 00053 8b 4d 08 mov ecx, DWORD PTR nShared$[rbp] 00056 0b c8 or ecx, eax 00058 8b c1 mov eax, ecx 0005a 85 c0 test eax, eax 0005c 7d 0c jge SHORT $LN3@PrepareWri ; 811 : { ; 812 : PrepareWrite2( nLength ); 0005e 8b 55 68 mov edx, DWORD PTR nLength$[rbp] 00061 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 00065 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 ); 0006a 48 8b 45 60 mov rax, QWORD PTR this$[rbp] 0006e 48 8b 00 mov rax, QWORD PTR [rax] $LN4@PrepareWri: ; 816 : } 00071 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00075 5d pop rbp 00076 c3 ret 0 ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ENDP ; ATL::CSimpleStringT<char,0>::PrepareWrite _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ PROC ; ATL::CSimpleStringT<char,0>::GetData, COMDAT ; 799 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp ; 800 : return( reinterpret_cast< CStringData* >( m_pszData )-1 ); 0000d 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00011 48 8b 00 mov rax, QWORD PTR [rax] 00014 48 83 e8 18 sub rax, 24 ; 801 : } 00018 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 0001c 5d pop rbp 0001d c3 ret 0 ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ENDP ; ATL::CSimpleStringT<char,0>::GetData _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 pOldData$ = 0 nOldLength$ = 8 pNewData$ = 16 nCharsToCopy$ = 24 tv86 = 92 tv134 = 96 tv76 = 96 tv132 = 104 tv83 = 104 this$ = 128 nLength$ = 136 ?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 55 push rbp 0000a 48 81 ec 90 00 00 00 sub rsp, 144 ; 00000090H 00011 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 784 : CStringData* pOldData = GetData(); 00016 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR this$[rbp] 0001d e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 00022 48 89 45 00 mov QWORD PTR pOldData$[rbp], rax ; 785 : int nOldLength = pOldData->nDataLength; 00026 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 0002a 8b 40 08 mov eax, DWORD PTR [rax+8] 0002d 89 45 08 mov DWORD PTR nOldLength$[rbp], eax ; 786 : CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate( nLength, sizeof( XCHAR ) ); 00030 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00034 48 8b 00 mov rax, QWORD PTR [rax] 00037 48 8b 4d 00 mov rcx, QWORD PTR pOldData$[rbp] 0003b 48 8b 09 mov rcx, QWORD PTR [rcx] 0003e 48 8b 00 mov rax, QWORD PTR [rax] 00041 ff 50 20 call QWORD PTR [rax+32] 00044 48 89 45 60 mov QWORD PTR tv76[rbp], rax 00048 48 8b 45 60 mov rax, QWORD PTR tv76[rbp] 0004c 48 8b 00 mov rax, QWORD PTR [rax] 0004f 48 8b 00 mov rax, QWORD PTR [rax] 00052 48 89 45 68 mov QWORD PTR tv83[rbp], rax 00056 41 b8 01 00 00 00 mov r8d, 1 0005c 8b 95 88 00 00 00 mov edx, DWORD PTR nLength$[rbp] 00062 48 8b 4d 60 mov rcx, QWORD PTR tv76[rbp] 00066 ff 55 68 call QWORD PTR tv83[rbp] 00069 48 89 45 10 mov QWORD PTR pNewData$[rbp], rax ; 787 : if( pNewData == NULL ) 0006d 48 83 7d 10 00 cmp QWORD PTR pNewData$[rbp], 0 00072 75 05 jne SHORT $LN2@Fork ; 788 : { ; 789 : ThrowMemoryException(); 00074 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' 00079 8b 85 88 00 00 00 mov eax, DWORD PTR nLength$[rbp] 0007f 39 45 08 cmp DWORD PTR nOldLength$[rbp], eax 00082 7d 08 jge SHORT $LN4@Fork 00084 8b 45 08 mov eax, DWORD PTR nOldLength$[rbp] 00087 89 45 5c mov DWORD PTR tv86[rbp], eax 0008a eb 09 jmp SHORT $LN5@Fork $LN4@Fork: 0008c 8b 85 88 00 00 00 mov eax, DWORD PTR nLength$[rbp] 00092 89 45 5c mov DWORD PTR tv86[rbp], eax $LN5@Fork: 00095 8b 45 5c mov eax, DWORD PTR tv86[rbp] 00098 ff c0 inc eax 0009a 89 45 18 mov DWORD PTR nCharsToCopy$[rbp], eax ; 792 : memcpy_s( PXSTR( pNewData->data() ), nCharsToCopy * sizeof( XCHAR ), 0009d 48 8b 4d 00 mov rcx, QWORD PTR pOldData$[rbp] 000a1 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 000a6 48 89 45 60 mov QWORD PTR tv134[rbp], rax 000aa 48 8b 4d 10 mov rcx, QWORD PTR pNewData$[rbp] 000ae e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 000b3 48 89 45 68 mov QWORD PTR tv132[rbp], rax 000b7 48 63 45 18 movsxd rax, DWORD PTR nCharsToCopy$[rbp] 000bb 48 63 4d 18 movsxd rcx, DWORD PTR nCharsToCopy$[rbp] 000bf 4c 8b c8 mov r9, rax 000c2 4c 8b 45 60 mov r8, QWORD PTR tv134[rbp] 000c6 48 8b d1 mov rdx, rcx 000c9 48 8b 4d 68 mov rcx, QWORD PTR tv132[rbp] 000cd e8 00 00 00 00 call memcpy_s ; 793 : PCXSTR( pOldData->data() ), nCharsToCopy * sizeof( XCHAR )); ; 794 : pNewData->nDataLength = nOldLength; 000d2 48 8b 45 10 mov rax, QWORD PTR pNewData$[rbp] 000d6 8b 4d 08 mov ecx, DWORD PTR nOldLength$[rbp] 000d9 89 48 08 mov DWORD PTR [rax+8], ecx ; 795 : pOldData->Release(); 000dc 48 8b 4d 00 mov rcx, QWORD PTR pOldData$[rbp] 000e0 e8 00 00 00 00 call ?Release@CStringData@ATL@@QEAAXXZ ; ATL::CStringData::Release ; 796 : Attach( pNewData ); 000e5 48 8b 55 10 mov rdx, QWORD PTR pNewData$[rbp] 000e9 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR this$[rbp] 000f0 e8 00 00 00 00 call ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<char,0>::Attach $LN3@Fork: ; 797 : } 000f5 48 8d 65 70 lea rsp, QWORD PTR [rbp+112] 000f9 5d pop rbp 000fa c3 ret 0 ?Fork@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::Fork _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 pData$ = 88 ?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 55 push rbp 0000b 48 83 ec 60 sub rsp, 96 ; 00000060H 0000f 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 780 : m_pszData = static_cast< PXSTR >( pData->data() ); 00014 48 8b 4d 58 mov rcx, QWORD PTR pData$[rbp] 00018 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 0001d 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00021 48 89 01 mov QWORD PTR [rcx], rax ; 781 : } 00024 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00028 5d pop rbp 00029 c3 ret 0 ?Attach@?$CSimpleStringT@D$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ENDP ; ATL::CSimpleStringT<char,0>::Attach _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 40 55 push rbp 00002 48 83 ec 60 sub rsp, 96 ; 00000060H 00006 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 773 : AtlThrow( E_OUTOFMEMORY ); 0000b b9 0e 00 07 80 mov ecx, -2147024882 ; ffffffff8007000eH 00010 e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@ThrowMemor: ; 774 : } 00015 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00019 5d pop rbp 0001a c3 ret 0 ?ThrowMemoryException@?$CSimpleStringT@D$0A@@ATL@@KAXXZ ENDP ; ATL::CSimpleStringT<char,0>::ThrowMemoryException _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 sizeInXChar$ = 88 ?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 55 push rbp 0000b 48 83 ec 60 sub rsp, 96 ; 00000060H 0000f 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 740 : if( psz == NULL ) 00014 48 83 7d 50 00 cmp QWORD PTR psz$[rbp], 0 00019 75 04 jne SHORT $LN2@StringLeng ; 741 : { ; 742 : return( 0 ); 0001b 33 c0 xor eax, eax 0001d eb 0e jmp SHORT $LN1@StringLeng $LN2@StringLeng: ; 743 : } ; 744 : return( int( strnlen( psz, sizeInXChar ) ) ); 0001f 48 8b 55 58 mov rdx, QWORD PTR sizeInXChar$[rbp] 00023 48 8b 4d 50 mov rcx, QWORD PTR psz$[rbp] 00027 e8 00 00 00 00 call strnlen 0002c 90 npad 1 $LN1@StringLeng: ; 745 : } 0002d 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00031 5d pop rbp 00032 c3 ret 0 ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ENDP ; ATL::CSimpleStringT<char,0>::StringLengthN _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 = 0 this$ = 96 nNewLength$ = 104 ?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 55 push rbp 0000a 48 83 ec 70 sub rsp, 112 ; 00000070H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 558 : if( nNewLength == -1 ) 00013 83 7d 68 ff cmp DWORD PTR nNewLength$[rbp], -1 00017 75 25 jne SHORT $LN2@ReleaseBuf ; 559 : { ; 560 : int nAlloc = GetData()->nAllocLength; 00019 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 0001d e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 00022 8b 40 0c mov eax, DWORD PTR [rax+12] 00025 89 45 00 mov DWORD PTR nAlloc$1[rbp], eax ; 561 : nNewLength = StringLengthN( m_pszData, nAlloc); 00028 48 63 45 00 movsxd rax, DWORD PTR nAlloc$1[rbp] 0002c 48 8b d0 mov rdx, rax 0002f 48 8b 45 60 mov rax, QWORD PTR this$[rbp] 00033 48 8b 08 mov rcx, QWORD PTR [rax] 00036 e8 00 00 00 00 call ?StringLengthN@?$CSimpleStringT@D$0A@@ATL@@SAHPEBD_K@Z ; ATL::CSimpleStringT<char,0>::StringLengthN 0003b 89 45 68 mov DWORD PTR nNewLength$[rbp], eax $LN2@ReleaseBuf: ; 562 : } ; 563 : SetLength( nNewLength ); 0003e 8b 55 68 mov edx, DWORD PTR nNewLength$[rbp] 00041 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 00045 e8 00 00 00 00 call ?SetLength@?$CSimpleStringT@D$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<char,0>::SetLength ; 564 : } 0004a 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 0004e 5d pop rbp 0004f c3 ret 0 ?ReleaseBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAXH@Z ENDP ; ATL::CSimpleStringT<char,0>::ReleaseBuffer _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 ?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 55 push rbp 00006 48 83 ec 60 sub rsp, 96 ; 00000060H 0000a 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 519 : return( GetData()->nDataLength ); 0000f 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00013 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@D$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<char,0>::GetData 00018 8b 40 08 mov eax, DWORD PTR [rax+8] ; 520 : } 0001b 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 0001f 5d pop rbp 00020 c3 ret 0 ?GetLength@?$CSimpleStringT@D$0A@@ATL@@QEBAHXZ ENDP ; ATL::CSimpleStringT<char,0>::GetLength _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 nMinBufferLength$ = 88 ?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 55 push rbp 0000a 48 83 ec 60 sub rsp, 96 ; 00000060H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 508 : return( PrepareWrite( nMinBufferLength ) ); 00013 8b 55 58 mov edx, DWORD PTR nMinBufferLength$[rbp] 00016 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0001a e8 00 00 00 00 call ?PrepareWrite@?$CSimpleStringT@D$0A@@ATL@@AEAAPEADH@Z ; ATL::CSimpleStringT<char,0>::PrepareWrite ; 509 : } 0001f 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00023 5d pop rbp 00024 c3 ret 0 ?GetBuffer@?$CSimpleStringT@D$0A@@ATL@@QEAAPEADH@Z ENDP ; ATL::CSimpleStringT<char,0>::GetBuffer _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ PROC ; ATL::CSimpleStringT<char,0>::operator char const *, COMDAT ; 376 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp ; 377 : return( m_pszData ); 0000d 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00011 48 8b 00 mov rax, QWORD PTR [rax] ; 378 : } 00014 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00018 5d pop rbp 00019 c3 ret 0 ??B?$CSimpleStringT@D$0A@@ATL@@QEBAPEBDXZ ENDP ; ATL::CSimpleStringT<char,0>::operator char const * _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 ?GetData@CByteArray@@QEBAPEBEXZ PROC ; CByteArray::GetData, COMDAT ; 46 : { return (const BYTE*)m_pData; } $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp 0000d 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00011 48 8b 40 08 mov rax, QWORD PTR [rax+8] 00015 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00019 5d pop rbp 0001a c3 ret 0 ?GetData@CByteArray@@QEBAPEBEXZ ENDP ; CByteArray::GetData _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 nIndex$ = 88 newElement$ = 96 ?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 55 push rbp 00010 48 83 ec 60 sub rsp, 96 ; 00000060H 00014 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 36 : if( nIndex < 0 || nIndex >= m_nSize ) 00019 48 83 7d 58 00 cmp QWORD PTR nIndex$[rbp], 0 0001e 7c 0e jl SHORT $LN3@SetAt 00020 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00024 48 8b 40 10 mov rax, QWORD PTR [rax+16] 00028 48 39 45 58 cmp QWORD PTR nIndex$[rbp], rax 0002c 7c 05 jl SHORT $LN2@SetAt $LN3@SetAt: ; 37 : AfxThrowInvalidArgException(); 0002e e8 00 00 00 00 call ?AfxThrowInvalidArgException@@YAXXZ ; AfxThrowInvalidArgException $LN2@SetAt: ; 38 : m_pData[nIndex] = newElement; } 00033 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00037 48 8b 40 08 mov rax, QWORD PTR [rax+8] 0003b 48 8b 4d 58 mov rcx, QWORD PTR nIndex$[rbp] 0003f 0f b6 55 60 movzx edx, BYTE PTR newElement$[rbp] 00043 88 14 08 mov BYTE PTR [rax+rcx], dl $LN4@SetAt: 00046 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 0004a 5d pop rbp 0004b c3 ret 0 ?SetAt@CByteArray@@QEAAX_JE@Z ENDP ; CByteArray::SetAt _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 ?RemoveAll@CByteArray@@QEAAXXZ PROC ; CByteArray::RemoveAll, COMDAT ; 28 : { SetSize(0); } $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 60 sub rsp, 96 ; 00000060H 0000a 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 0000f 49 c7 c0 ff ff ff ff mov r8, -1 00016 33 d2 xor edx, edx 00018 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0001c e8 00 00 00 00 call ?SetSize@CByteArray@@QEAAX_J0@Z ; CByteArray::SetSize 00021 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00025 5d pop rbp 00026 c3 ret 0 ?RemoveAll@CByteArray@@QEAAXXZ ENDP ; CByteArray::RemoveAll _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 ?GetSize@CByteArray@@QEBA_JXZ PROC ; CByteArray::GetSize, COMDAT ; 20 : { return m_nSize; } $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp 0000d 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00011 48 8b 40 10 mov rax, QWORD PTR [rax+16] 00015 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00019 5d pop rbp 0001a c3 ret 0 ?GetSize@CByteArray@@QEBA_JXZ ENDP ; CByteArray::GetSize _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 nLength$ = 88 ?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 55 push rbp 0000a 48 83 ec 60 sub rsp, 96 ; 00000060H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 868 : ATLASSERT( nLength >= 0 ); ; 869 : ATLASSERT( nLength <= GetData()->nAllocLength ); ; 870 : ; 871 : if( nLength < 0 || nLength > GetData()->nAllocLength) 00013 83 7d 58 00 cmp DWORD PTR nLength$[rbp], 0 00017 7c 11 jl SHORT $LN3@SetLength 00019 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0001d e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 00022 8b 40 0c mov eax, DWORD PTR [rax+12] 00025 39 45 58 cmp DWORD PTR nLength$[rbp], eax 00028 7e 0a jle SHORT $LN2@SetLength $LN3@SetLength: ; 872 : AtlThrow(E_INVALIDARG); 0002a b9 57 00 07 80 mov ecx, -2147024809 ; ffffffff80070057H 0002f e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@SetLength: ; 873 : ; 874 : GetData()->nDataLength = nLength; 00034 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00038 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 0003d 8b 4d 58 mov ecx, DWORD PTR nLength$[rbp] 00040 89 48 08 mov DWORD PTR [rax+8], ecx ; 875 : m_pszData[nLength] = 0; 00043 48 63 45 58 movsxd rax, DWORD PTR nLength$[rbp] 00047 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0004b 48 8b 09 mov rcx, QWORD PTR [rcx] 0004e 33 d2 xor edx, edx 00050 66 89 14 41 mov WORD PTR [rcx+rax*2], dx $LN4@SetLength: ; 876 : } 00054 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00058 5d pop rbp 00059 c3 ret 0 ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::SetLength _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 0 pStringMgr$ = 8 pNewData$ = 16 tv78 = 88 this$ = 112 nLength$ = 120 ?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 55 push rbp 0000a 48 81 ec 80 00 00 00 sub rsp, 128 ; 00000080H 00011 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 850 : CStringData* pOldData = GetData(); 00016 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 0001a e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 0001f 48 89 45 00 mov QWORD PTR pOldData$[rbp], rax ; 851 : ATLASSERT( pOldData->nAllocLength < nLength ); ; 852 : IAtlStringMgr* pStringMgr = pOldData->pStringMgr; 00023 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00027 48 8b 00 mov rax, QWORD PTR [rax] 0002a 48 89 45 08 mov QWORD PTR pStringMgr$[rbp], rax ; 853 : if ( pOldData->nAllocLength >= nLength || nLength <= 0) 0002e 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00032 8b 4d 78 mov ecx, DWORD PTR nLength$[rbp] 00035 39 48 0c cmp DWORD PTR [rax+12], ecx 00038 7d 06 jge SHORT $LN3@Reallocate 0003a 83 7d 78 00 cmp DWORD PTR nLength$[rbp], 0 0003e 7f 07 jg SHORT $LN2@Reallocate $LN3@Reallocate: ; 854 : { ; 855 : ThrowMemoryException(); 00040 e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException ; 856 : return; 00045 eb 41 jmp SHORT $LN1@Reallocate $LN2@Reallocate: ; 857 : } ; 858 : CStringData* pNewData = pStringMgr->Reallocate( pOldData, nLength, sizeof( XCHAR ) ); 00047 48 8b 45 08 mov rax, QWORD PTR pStringMgr$[rbp] 0004b 48 8b 00 mov rax, QWORD PTR [rax] 0004e 48 8b 40 10 mov rax, QWORD PTR [rax+16] 00052 48 89 45 58 mov QWORD PTR tv78[rbp], rax 00056 41 b9 02 00 00 00 mov r9d, 2 0005c 44 8b 45 78 mov r8d, DWORD PTR nLength$[rbp] 00060 48 8b 55 00 mov rdx, QWORD PTR pOldData$[rbp] 00064 48 8b 4d 08 mov rcx, QWORD PTR pStringMgr$[rbp] 00068 ff 55 58 call QWORD PTR tv78[rbp] 0006b 48 89 45 10 mov QWORD PTR pNewData$[rbp], rax ; 859 : if( pNewData == NULL ) 0006f 48 83 7d 10 00 cmp QWORD PTR pNewData$[rbp], 0 00074 75 05 jne SHORT $LN4@Reallocate ; 860 : { ; 861 : ThrowMemoryException(); 00076 e8 00 00 00 00 call ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException $LN4@Reallocate: ; 862 : } ; 863 : Attach( pNewData ); 0007b 48 8b 55 10 mov rdx, QWORD PTR pNewData$[rbp] 0007f 48 8b 4d 70 mov rcx, QWORD PTR this$[rbp] 00083 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 : } 00088 48 8d 65 60 lea rsp, QWORD PTR [rbp+96] 0008c 5d pop rbp 0008d c3 ret 0 ?Reallocate@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::Reallocate _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 pOldData$ = 0 nNewLength$1 = 8 this$ = 96 nLength$ = 104 ?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 55 push rbp 0000a 48 83 ec 70 sub rsp, 112 ; 00000070H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 819 : CStringData* pOldData = GetData(); 00013 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 00017 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 0001c 48 89 45 00 mov QWORD PTR pOldData$[rbp], rax ; 820 : if( pOldData->nDataLength > nLength ) 00020 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00024 8b 4d 68 mov ecx, DWORD PTR nLength$[rbp] 00027 39 48 08 cmp DWORD PTR [rax+8], ecx 0002a 7e 0a jle SHORT $LN2@PrepareWri ; 821 : { ; 822 : nLength = pOldData->nDataLength; 0002c 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00030 8b 40 08 mov eax, DWORD PTR [rax+8] 00033 89 45 68 mov DWORD PTR nLength$[rbp], eax $LN2@PrepareWri: ; 823 : } ; 824 : if( pOldData->IsShared() ) 00036 48 8b 4d 00 mov rcx, QWORD PTR pOldData$[rbp] 0003a e8 00 00 00 00 call ?IsShared@CStringData@ATL@@QEBA_NXZ ; ATL::CStringData::IsShared 0003f 0f b6 c0 movzx eax, al 00042 85 c0 test eax, eax 00044 74 0e je SHORT $LN3@PrepareWri ; 825 : { ; 826 : Fork( nLength ); 00046 8b 55 68 mov edx, DWORD PTR nLength$[rbp] 00049 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 0004d e8 00 00 00 00 call ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::Fork ; 827 : } 00052 eb 58 jmp SHORT $LN4@PrepareWri $LN3@PrepareWri: ; 828 : else if( pOldData->nAllocLength < nLength ) 00054 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00058 8b 4d 68 mov ecx, DWORD PTR nLength$[rbp] 0005b 39 48 0c cmp DWORD PTR [rax+12], ecx 0005e 7d 4c jge SHORT $LN5@PrepareWri ; 829 : { ; 830 : // Grow exponentially, until we hit 1G, then by 1M thereafter. ; 831 : int nNewLength = pOldData->nAllocLength; 00060 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00064 8b 40 0c mov eax, DWORD PTR [rax+12] 00067 89 45 08 mov DWORD PTR nNewLength$1[rbp], eax ; 832 : if( nNewLength > 1024 * 1024 * 1024 ) 0006a 81 7d 08 00 00 00 40 cmp DWORD PTR nNewLength$1[rbp], 1073741824 ; 40000000H 00071 7e 0d jle SHORT $LN6@PrepareWri ; 833 : { ; 834 : nNewLength += 1024 * 1024; 00073 8b 45 08 mov eax, DWORD PTR nNewLength$1[rbp] 00076 05 00 00 10 00 add eax, 1048576 ; 00100000H 0007b 89 45 08 mov DWORD PTR nNewLength$1[rbp], eax ; 835 : } 0007e eb 12 jmp SHORT $LN7@PrepareWri $LN6@PrepareWri: ; 836 : else ; 837 : { ; 838 : // Exponential growth factor is 1.5. ; 839 : nNewLength = nNewLength + nNewLength / 2; 00080 8b 45 08 mov eax, DWORD PTR nNewLength$1[rbp] 00083 99 cdq 00084 2b c2 sub eax, edx 00086 d1 f8 sar eax, 1 00088 8b 4d 08 mov ecx, DWORD PTR nNewLength$1[rbp] 0008b 03 c8 add ecx, eax 0008d 8b c1 mov eax, ecx 0008f 89 45 08 mov DWORD PTR nNewLength$1[rbp], eax $LN7@PrepareWri: ; 840 : } ; 841 : if( nNewLength < nLength ) 00092 8b 45 68 mov eax, DWORD PTR nLength$[rbp] 00095 39 45 08 cmp DWORD PTR nNewLength$1[rbp], eax 00098 7d 06 jge SHORT $LN8@PrepareWri ; 842 : { ; 843 : nNewLength = nLength; 0009a 8b 45 68 mov eax, DWORD PTR nLength$[rbp] 0009d 89 45 08 mov DWORD PTR nNewLength$1[rbp], eax $LN8@PrepareWri: ; 844 : } ; 845 : Reallocate( nNewLength ); 000a0 8b 55 08 mov edx, DWORD PTR nNewLength$1[rbp] 000a3 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 000a7 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 : } 000ac 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 000b0 5d pop rbp 000b1 c3 ret 0 ?PrepareWrite2@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite2 _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 pOldData$ = 0 nShared$ = 8 nTooShort$ = 12 this$ = 96 nLength$ = 104 ?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 55 push rbp 0000a 48 83 ec 70 sub rsp, 112 ; 00000070H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 804 : if (nLength < 0) 00013 83 7d 68 00 cmp DWORD PTR nLength$[rbp], 0 00017 7d 0a jge SHORT $LN2@PrepareWri ; 805 : AtlThrow(E_INVALIDARG); 00019 b9 57 00 07 80 mov ecx, -2147024809 ; ffffffff80070057H 0001e e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@PrepareWri: ; 806 : ; 807 : CStringData* pOldData = GetData(); 00023 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 00027 e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 0002c 48 89 45 00 mov QWORD PTR pOldData$[rbp], rax ; 808 : int nShared = 1-pOldData->nRefs; // nShared < 0 means true, >= 0 means false 00030 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00034 b9 01 00 00 00 mov ecx, 1 00039 2b 48 10 sub ecx, DWORD PTR [rax+16] 0003c 8b c1 mov eax, ecx 0003e 89 45 08 mov DWORD PTR nShared$[rbp], eax ; 809 : int nTooShort = pOldData->nAllocLength-nLength; // nTooShort < 0 means true, >= 0 means false 00041 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00045 8b 4d 68 mov ecx, DWORD PTR nLength$[rbp] 00048 8b 40 0c mov eax, DWORD PTR [rax+12] 0004b 2b c1 sub eax, ecx 0004d 89 45 0c mov DWORD PTR nTooShort$[rbp], eax ; 810 : if( (nShared|nTooShort) < 0 ) // If either sign bit is set (i.e. either is less than zero), we need to copy data 00050 8b 45 0c mov eax, DWORD PTR nTooShort$[rbp] 00053 8b 4d 08 mov ecx, DWORD PTR nShared$[rbp] 00056 0b c8 or ecx, eax 00058 8b c1 mov eax, ecx 0005a 85 c0 test eax, eax 0005c 7d 0c jge SHORT $LN3@PrepareWri ; 811 : { ; 812 : PrepareWrite2( nLength ); 0005e 8b 55 68 mov edx, DWORD PTR nLength$[rbp] 00061 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 00065 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 ); 0006a 48 8b 45 60 mov rax, QWORD PTR this$[rbp] 0006e 48 8b 00 mov rax, QWORD PTR [rax] $LN4@PrepareWri: ; 816 : } 00071 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00075 5d pop rbp 00076 c3 ret 0 ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ PROC ; ATL::CSimpleStringT<wchar_t,0>::GetData, COMDAT ; 799 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp ; 800 : return( reinterpret_cast< CStringData* >( m_pszData )-1 ); 0000d 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00011 48 8b 00 mov rax, QWORD PTR [rax] 00014 48 83 e8 18 sub rax, 24 ; 801 : } 00018 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 0001c 5d pop rbp 0001d c3 ret 0 ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ENDP ; ATL::CSimpleStringT<wchar_t,0>::GetData _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 pOldData$ = 0 nOldLength$ = 8 pNewData$ = 16 nCharsToCopy$ = 24 tv86 = 92 tv136 = 96 tv76 = 96 tv134 = 104 tv83 = 104 this$ = 128 nLength$ = 136 ?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 55 push rbp 0000a 48 81 ec 90 00 00 00 sub rsp, 144 ; 00000090H 00011 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 784 : CStringData* pOldData = GetData(); 00016 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR this$[rbp] 0001d e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 00022 48 89 45 00 mov QWORD PTR pOldData$[rbp], rax ; 785 : int nOldLength = pOldData->nDataLength; 00026 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 0002a 8b 40 08 mov eax, DWORD PTR [rax+8] 0002d 89 45 08 mov DWORD PTR nOldLength$[rbp], eax ; 786 : CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate( nLength, sizeof( XCHAR ) ); 00030 48 8b 45 00 mov rax, QWORD PTR pOldData$[rbp] 00034 48 8b 00 mov rax, QWORD PTR [rax] 00037 48 8b 4d 00 mov rcx, QWORD PTR pOldData$[rbp] 0003b 48 8b 09 mov rcx, QWORD PTR [rcx] 0003e 48 8b 00 mov rax, QWORD PTR [rax] 00041 ff 50 20 call QWORD PTR [rax+32] 00044 48 89 45 60 mov QWORD PTR tv76[rbp], rax 00048 48 8b 45 60 mov rax, QWORD PTR tv76[rbp] 0004c 48 8b 00 mov rax, QWORD PTR [rax] 0004f 48 8b 00 mov rax, QWORD PTR [rax] 00052 48 89 45 68 mov QWORD PTR tv83[rbp], rax 00056 41 b8 02 00 00 00 mov r8d, 2 0005c 8b 95 88 00 00 00 mov edx, DWORD PTR nLength$[rbp] 00062 48 8b 4d 60 mov rcx, QWORD PTR tv76[rbp] 00066 ff 55 68 call QWORD PTR tv83[rbp] 00069 48 89 45 10 mov QWORD PTR pNewData$[rbp], rax ; 787 : if( pNewData == NULL ) 0006d 48 83 7d 10 00 cmp QWORD PTR pNewData$[rbp], 0 00072 75 05 jne SHORT $LN2@Fork ; 788 : { ; 789 : ThrowMemoryException(); 00074 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' 00079 8b 85 88 00 00 00 mov eax, DWORD PTR nLength$[rbp] 0007f 39 45 08 cmp DWORD PTR nOldLength$[rbp], eax 00082 7d 08 jge SHORT $LN4@Fork 00084 8b 45 08 mov eax, DWORD PTR nOldLength$[rbp] 00087 89 45 5c mov DWORD PTR tv86[rbp], eax 0008a eb 09 jmp SHORT $LN5@Fork $LN4@Fork: 0008c 8b 85 88 00 00 00 mov eax, DWORD PTR nLength$[rbp] 00092 89 45 5c mov DWORD PTR tv86[rbp], eax $LN5@Fork: 00095 8b 45 5c mov eax, DWORD PTR tv86[rbp] 00098 ff c0 inc eax 0009a 89 45 18 mov DWORD PTR nCharsToCopy$[rbp], eax ; 792 : memcpy_s( PXSTR( pNewData->data() ), nCharsToCopy * sizeof( XCHAR ), 0009d 48 8b 4d 00 mov rcx, QWORD PTR pOldData$[rbp] 000a1 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 000a6 48 89 45 60 mov QWORD PTR tv136[rbp], rax 000aa 48 8b 4d 10 mov rcx, QWORD PTR pNewData$[rbp] 000ae e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 000b3 48 89 45 68 mov QWORD PTR tv134[rbp], rax 000b7 48 63 45 18 movsxd rax, DWORD PTR nCharsToCopy$[rbp] 000bb 48 d1 e0 shl rax, 1 000be 48 63 4d 18 movsxd rcx, DWORD PTR nCharsToCopy$[rbp] 000c2 48 d1 e1 shl rcx, 1 000c5 4c 8b c8 mov r9, rax 000c8 4c 8b 45 60 mov r8, QWORD PTR tv136[rbp] 000cc 48 8b d1 mov rdx, rcx 000cf 48 8b 4d 68 mov rcx, QWORD PTR tv134[rbp] 000d3 e8 00 00 00 00 call memcpy_s ; 793 : PCXSTR( pOldData->data() ), nCharsToCopy * sizeof( XCHAR )); ; 794 : pNewData->nDataLength = nOldLength; 000d8 48 8b 45 10 mov rax, QWORD PTR pNewData$[rbp] 000dc 8b 4d 08 mov ecx, DWORD PTR nOldLength$[rbp] 000df 89 48 08 mov DWORD PTR [rax+8], ecx ; 795 : pOldData->Release(); 000e2 48 8b 4d 00 mov rcx, QWORD PTR pOldData$[rbp] 000e6 e8 00 00 00 00 call ?Release@CStringData@ATL@@QEAAXXZ ; ATL::CStringData::Release ; 796 : Attach( pNewData ); 000eb 48 8b 55 10 mov rdx, QWORD PTR pNewData$[rbp] 000ef 48 8b 8d 80 00 00 00 mov rcx, QWORD PTR this$[rbp] 000f6 e8 00 00 00 00 call ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ; ATL::CSimpleStringT<wchar_t,0>::Attach $LN3@Fork: ; 797 : } 000fb 48 8d 65 70 lea rsp, QWORD PTR [rbp+112] 000ff 5d pop rbp 00100 c3 ret 0 ?Fork@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::Fork _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 pData$ = 88 ?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 55 push rbp 0000b 48 83 ec 60 sub rsp, 96 ; 00000060H 0000f 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 780 : m_pszData = static_cast< PXSTR >( pData->data() ); 00014 48 8b 4d 58 mov rcx, QWORD PTR pData$[rbp] 00018 e8 00 00 00 00 call ?data@CStringData@ATL@@QEAAPEAXXZ ; ATL::CStringData::data 0001d 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 00021 48 89 01 mov QWORD PTR [rcx], rax ; 781 : } 00024 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00028 5d pop rbp 00029 c3 ret 0 ?Attach@?$CSimpleStringT@_W$0A@@ATL@@AEAAXPEAUCStringData@2@@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::Attach _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 40 55 push rbp 00002 48 83 ec 60 sub rsp, 96 ; 00000060H 00006 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 773 : AtlThrow( E_OUTOFMEMORY ); 0000b b9 0e 00 07 80 mov ecx, -2147024882 ; ffffffff8007000eH 00010 e8 00 00 00 00 call ?AtlThrowImpl@ATL@@YAXJ@Z ; ATL::AtlThrowImpl $LN2@ThrowMemor: ; 774 : } 00015 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00019 5d pop rbp 0001a c3 ret 0 ?ThrowMemoryException@?$CSimpleStringT@_W$0A@@ATL@@KAXXZ ENDP ; ATL::CSimpleStringT<wchar_t,0>::ThrowMemoryException _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 sizeInXChar$ = 88 ?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 55 push rbp 0000b 48 83 ec 60 sub rsp, 96 ; 00000060H 0000f 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 750 : if( psz == NULL ) 00014 48 83 7d 50 00 cmp QWORD PTR psz$[rbp], 0 00019 75 04 jne SHORT $LN2@StringLeng ; 751 : { ; 752 : return( 0 ); 0001b 33 c0 xor eax, eax 0001d eb 0e jmp SHORT $LN1@StringLeng $LN2@StringLeng: ; 753 : } ; 754 : return( int( wcsnlen( psz, sizeInXChar ) ) ); 0001f 48 8b 55 58 mov rdx, QWORD PTR sizeInXChar$[rbp] 00023 48 8b 4d 50 mov rcx, QWORD PTR psz$[rbp] 00027 e8 00 00 00 00 call wcsnlen 0002c 90 npad 1 $LN1@StringLeng: ; 755 : } 0002d 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00031 5d pop rbp 00032 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 /ZI ; 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 = 0 this$ = 96 nNewLength$ = 104 ?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 55 push rbp 0000a 48 83 ec 70 sub rsp, 112 ; 00000070H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 558 : if( nNewLength == -1 ) 00013 83 7d 68 ff cmp DWORD PTR nNewLength$[rbp], -1 00017 75 25 jne SHORT $LN2@ReleaseBuf ; 559 : { ; 560 : int nAlloc = GetData()->nAllocLength; 00019 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 0001d e8 00 00 00 00 call ?GetData@?$CSimpleStringT@_W$0A@@ATL@@AEBAPEAUCStringData@2@XZ ; ATL::CSimpleStringT<wchar_t,0>::GetData 00022 8b 40 0c mov eax, DWORD PTR [rax+12] 00025 89 45 00 mov DWORD PTR nAlloc$1[rbp], eax ; 561 : nNewLength = StringLengthN( m_pszData, nAlloc); 00028 48 63 45 00 movsxd rax, DWORD PTR nAlloc$1[rbp] 0002c 48 8b d0 mov rdx, rax 0002f 48 8b 45 60 mov rax, QWORD PTR this$[rbp] 00033 48 8b 08 mov rcx, QWORD PTR [rax] 00036 e8 00 00 00 00 call ?StringLengthN@?$CSimpleStringT@_W$0A@@ATL@@SAHPEB_W_K@Z ; ATL::CSimpleStringT<wchar_t,0>::StringLengthN 0003b 89 45 68 mov DWORD PTR nNewLength$[rbp], eax $LN2@ReleaseBuf: ; 562 : } ; 563 : SetLength( nNewLength ); 0003e 8b 55 68 mov edx, DWORD PTR nNewLength$[rbp] 00041 48 8b 4d 60 mov rcx, QWORD PTR this$[rbp] 00045 e8 00 00 00 00 call ?SetLength@?$CSimpleStringT@_W$0A@@ATL@@AEAAXH@Z ; ATL::CSimpleStringT<wchar_t,0>::SetLength ; 564 : } 0004a 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 0004e 5d pop rbp 0004f c3 ret 0 ?ReleaseBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAXH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::ReleaseBuffer _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 nMinBufferLength$ = 88 ?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 55 push rbp 0000a 48 83 ec 60 sub rsp, 96 ; 00000060H 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 508 : return( PrepareWrite( nMinBufferLength ) ); 00013 8b 55 58 mov edx, DWORD PTR nMinBufferLength$[rbp] 00016 48 8b 4d 50 mov rcx, QWORD PTR this$[rbp] 0001a e8 00 00 00 00 call ?PrepareWrite@?$CSimpleStringT@_W$0A@@ATL@@AEAAPEA_WH@Z ; ATL::CSimpleStringT<wchar_t,0>::PrepareWrite ; 509 : } 0001f 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00023 5d pop rbp 00024 c3 ret 0 ?GetBuffer@?$CSimpleStringT@_W$0A@@ATL@@QEAAPEA_WH@Z ENDP ; ATL::CSimpleStringT<wchar_t,0>::GetBuffer _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 = 64 tv79 = 72 this$ = 96 ?Release@CStringData@ATL@@QEAAXXZ PROC ; ATL::CStringData::Release, COMDAT ; 85 : { $LN4: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 70 sub rsp, 112 ; 00000070H 0000a 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 86 : ATLASSERT( nRefs != 0 ); ; 87 : ; 88 : if( _InterlockedDecrement( &nRefs ) <= 0 ) 0000f 48 8b 45 60 mov rax, QWORD PTR this$[rbp] 00013 48 83 c0 10 add rax, 16 00017 b9 ff ff ff ff mov ecx, -1 0001c f0 0f c1 08 lock xadd DWORD PTR [rax], ecx 00020 ff c9 dec ecx 00022 8b c1 mov eax, ecx 00024 85 c0 test eax, eax 00026 7f 28 jg SHORT $LN2@Release ; 89 : { ; 90 : pStringMgr->Free( this ); 00028 48 8b 45 60 mov rax, QWORD PTR this$[rbp] 0002c 48 8b 00 mov rax, QWORD PTR [rax] 0002f 48 89 45 40 mov QWORD PTR tv77[rbp], rax 00033 48 8b 45 60 mov rax, QWORD PTR this$[rbp] 00037 48 8b 00 mov rax, QWORD PTR [rax] 0003a 48 8b 00 mov rax, QWORD PTR [rax] 0003d 48 8b 40 08 mov rax, QWORD PTR [rax+8] 00041 48 89 45 48 mov QWORD PTR tv79[rbp], rax 00045 48 8b 55 60 mov rdx, QWORD PTR this$[rbp] 00049 48 8b 4d 40 mov rcx, QWORD PTR tv77[rbp] 0004d ff 55 48 call QWORD PTR tv79[rbp] $LN2@Release: ; 91 : } ; 92 : } 00050 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00054 5d pop rbp 00055 c3 ret 0 ?Release@CStringData@ATL@@QEAAXXZ ENDP ; ATL::CStringData::Release _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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 = 64 this$ = 96 ?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 55 push rbp 00006 48 83 ec 50 sub rsp, 80 ; 00000050H 0000a 48 8b ec mov rbp, rsp ; 73 : return( nRefs > 1 ); 0000d 48 8b 45 60 mov rax, QWORD PTR this$[rbp] 00011 83 78 10 01 cmp DWORD PTR [rax+16], 1 00015 7e 09 jle SHORT $LN3@IsShared 00017 c7 45 40 01 00 00 00 mov DWORD PTR tv66[rbp], 1 0001e eb 07 jmp SHORT $LN4@IsShared $LN3@IsShared: 00020 c7 45 40 00 00 00 00 mov DWORD PTR tv66[rbp], 0 $LN4@IsShared: 00027 0f b6 45 40 movzx eax, BYTE PTR tv66[rbp] ; 74 : } 0002b 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 0002f 5d pop rbp 00030 c3 ret 0 ?IsShared@CStringData@ATL@@QEBA_NXZ ENDP ; ATL::CStringData::IsShared _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 ?data@CStringData@ATL@@QEAAPEAXXZ PROC ; ATL::CStringData::data, COMDAT ; 58 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp ; 59 : return (this+1); 0000d 48 8b 45 50 mov rax, QWORD PTR this$[rbp] 00011 48 83 c0 18 add rax, 24 ; 60 : } 00015 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00019 5d pop rbp 0001a c3 ret 0 ?data@CStringData@ATL@@QEAAPEAXXZ ENDP ; ATL::CStringData::data _TEXT ENDS ; Function compile flags: /Odtp /ZI ; 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$ = 80 ?AtlThrowImpl@ATL@@YAXJ@Z PROC ; ATL::AtlThrowImpl, COMDAT ; 65 : { $LN5: 00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx 00004 55 push rbp 00005 48 83 ec 60 sub rsp, 96 ; 00000060H 00009 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 66 : ATLTRACE(atlTraceException, 0, _T("AtlThrow: hr = 0x%x\n"), hr ); ; 67 : #ifdef _AFX ; 68 : if( hr == E_OUTOFMEMORY ) 0000e 81 7d 50 0e 00 07 80 cmp DWORD PTR hr$[rbp], -2147024882 ; ffffffff8007000eH 00015 75 07 jne SHORT $LN2@AtlThrowIm ; 69 : { ; 70 : AfxThrowMemoryException(); 00017 e8 00 00 00 00 call ?AfxThrowMemoryException@@YAXXZ ; AfxThrowMemoryException ; 71 : } 0001c eb 08 jmp SHORT $LN3@AtlThrowIm $LN2@AtlThrowIm: ; 72 : else ; 73 : { ; 74 : AfxThrowOleException( hr ); 0001e 8b 4d 50 mov ecx, DWORD PTR hr$[rbp] 00021 e8 00 00 00 00 call ?AfxThrowOleException@@YAXJ@Z ; AfxThrowOleException $LN3@AtlThrowIm: $LN4@AtlThrowIm: ; 75 : } ; 76 : #else ; 77 : throw CAtlException( hr ); ; 78 : #endif ; 79 : }; 00026 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 0002a 5d pop rbp 0002b c3 ret 0 ?AtlThrowImpl@ATL@@YAXJ@Z ENDP ; ATL::AtlThrowImpl _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt\corecrt_memcpy_s.h ; COMDAT memcpy_s _TEXT SEGMENT _Expr_val$1 = 0 _Expr_val$2 = 4 _Expr_val$3 = 8 tv79 = 76 tv75 = 76 tv66 = 76 _Destination$ = 96 _DestinationSize$ = 104 _Source$ = 112 _SourceSize$ = 120 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 55 push rbp 00015 48 83 ec 70 sub rsp, 112 ; 00000070H 00019 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] ; 46 : if (_SourceSize == 0) 0001e 48 83 7d 78 00 cmp QWORD PTR _SourceSize$[rbp], 0 00023 75 07 jne SHORT $LN2@memcpy_s ; 47 : { ; 48 : return 0; 00025 33 c0 xor eax, eax 00027 e9 f2 00 00 00 jmp $LN1@memcpy_s $LN2@memcpy_s: ; 49 : } ; 50 : ; 51 : _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Destination != NULL, EINVAL); 0002c 48 83 7d 60 00 cmp QWORD PTR _Destination$[rbp], 0 00031 74 09 je SHORT $LN9@memcpy_s 00033 c7 45 4c 01 00 00 00 mov DWORD PTR tv66[rbp], 1 0003a eb 07 jmp SHORT $LN10@memcpy_s $LN9@memcpy_s: 0003c c7 45 4c 00 00 00 00 mov DWORD PTR tv66[rbp], 0 $LN10@memcpy_s: 00043 8b 45 4c mov eax, DWORD PTR tv66[rbp] 00046 89 45 00 mov DWORD PTR _Expr_val$1[rbp], eax 00049 83 7d 00 00 cmp DWORD PTR _Expr_val$1[rbp], 0 0004d 75 1a jne SHORT $LN3@memcpy_s 0004f e8 00 00 00 00 call _errno 00054 c7 00 16 00 00 00 mov DWORD PTR [rax], 22 0005a e8 00 00 00 00 call _invalid_parameter_noinfo 0005f b8 16 00 00 00 mov eax, 22 00064 e9 b5 00 00 00 jmp $LN1@memcpy_s $LN3@memcpy_s: ; 52 : if (_Source == NULL || _DestinationSize < _SourceSize) 00069 48 83 7d 70 00 cmp QWORD PTR _Source$[rbp], 0 0006e 74 0e je SHORT $LN5@memcpy_s 00070 48 8b 45 78 mov rax, QWORD PTR _SourceSize$[rbp] 00074 48 39 45 68 cmp QWORD PTR _DestinationSize$[rbp], rax 00078 0f 83 8d 00 00 00 jae $LN4@memcpy_s $LN5@memcpy_s: ; 53 : { ; 54 : memset(_Destination, 0, _DestinationSize); 0007e 4c 8b 45 68 mov r8, QWORD PTR _DestinationSize$[rbp] 00082 33 d2 xor edx, edx 00084 48 8b 4d 60 mov rcx, QWORD PTR _Destination$[rbp] 00088 e8 00 00 00 00 call memset ; 55 : ; 56 : _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Source != NULL, EINVAL); 0008d 48 83 7d 70 00 cmp QWORD PTR _Source$[rbp], 0 00092 74 09 je SHORT $LN11@memcpy_s 00094 c7 45 4c 01 00 00 00 mov DWORD PTR tv75[rbp], 1 0009b eb 07 jmp SHORT $LN12@memcpy_s $LN11@memcpy_s: 0009d c7 45 4c 00 00 00 00 mov DWORD PTR tv75[rbp], 0 $LN12@memcpy_s: 000a4 8b 45 4c mov eax, DWORD PTR tv75[rbp] 000a7 89 45 04 mov DWORD PTR _Expr_val$2[rbp], eax 000aa 83 7d 04 00 cmp DWORD PTR _Expr_val$2[rbp], 0 000ae 75 17 jne SHORT $LN6@memcpy_s 000b0 e8 00 00 00 00 call _errno 000b5 c7 00 16 00 00 00 mov DWORD PTR [rax], 22 000bb e8 00 00 00 00 call _invalid_parameter_noinfo 000c0 b8 16 00 00 00 mov eax, 22 000c5 eb 57 jmp SHORT $LN1@memcpy_s $LN6@memcpy_s: ; 57 : _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_DestinationSize >= _SourceSize, ERANGE); 000c7 48 8b 45 78 mov rax, QWORD PTR _SourceSize$[rbp] 000cb 48 39 45 68 cmp QWORD PTR _DestinationSize$[rbp], rax 000cf 72 09 jb SHORT $LN13@memcpy_s 000d1 c7 45 4c 01 00 00 00 mov DWORD PTR tv79[rbp], 1 000d8 eb 07 jmp SHORT $LN14@memcpy_s $LN13@memcpy_s: 000da c7 45 4c 00 00 00 00 mov DWORD PTR tv79[rbp], 0 $LN14@memcpy_s: 000e1 8b 45 4c mov eax, DWORD PTR tv79[rbp] 000e4 89 45 08 mov DWORD PTR _Expr_val$3[rbp], eax 000e7 83 7d 08 00 cmp DWORD PTR _Expr_val$3[rbp], 0 000eb 75 17 jne SHORT $LN7@memcpy_s 000ed e8 00 00 00 00 call _errno 000f2 c7 00 22 00 00 00 mov DWORD PTR [rax], 34 ; 00000022H 000f8 e8 00 00 00 00 call _invalid_parameter_noinfo 000fd b8 22 00 00 00 mov eax, 34 ; 00000022H 00102 eb 1a jmp SHORT $LN1@memcpy_s $LN7@memcpy_s: ; 58 : ; 59 : // Unreachable, but required to suppress /analyze warnings: ; 60 : return EINVAL; 00104 b8 16 00 00 00 mov eax, 22 00109 eb 13 jmp SHORT $LN1@memcpy_s $LN4@memcpy_s: ; 61 : } ; 62 : memcpy(_Destination, _Source, _SourceSize); 0010b 4c 8b 45 78 mov r8, QWORD PTR _SourceSize$[rbp] 0010f 48 8b 55 70 mov rdx, QWORD PTR _Source$[rbp] 00113 48 8b 4d 60 mov rcx, QWORD PTR _Destination$[rbp] 00117 e8 00 00 00 00 call memcpy ; 63 : return 0; 0011c 33 c0 xor eax, eax $LN1@memcpy_s: ; 64 : } 0011e 48 8d 65 50 lea rsp, QWORD PTR [rbp+80] 00122 5d pop rbp 00123 c3 ret 0 memcpy_s ENDP _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z _TEXT SEGMENT __formal$ = 80 __formal$ = 88 __formal$ = 96 ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT $LN3: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f 55 push rbp 00010 48 83 ec 40 sub rsp, 64 ; 00000040H 00014 48 8b ec mov rbp, rsp 00017 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 0001b 5d pop rbp 0001c c3 ret 0 ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z ENDP ; __empty_global_delete _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z _TEXT SEGMENT __formal$ = 80 __formal$ = 88 ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z PROC ; __empty_global_delete, COMDAT $LN3: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000a 55 push rbp 0000b 48 83 ec 40 sub rsp, 64 ; 00000040H 0000f 48 8b ec mov rbp, rsp 00012 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00016 5d pop rbp 00017 c3 ret 0 ?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z ENDP ; __empty_global_delete _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX_K@Z _TEXT SEGMENT __formal$ = 80 __formal$ = 88 ?__empty_global_delete@@YAXPEAX_K@Z PROC ; __empty_global_delete, COMDAT $LN3: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000a 55 push rbp 0000b 48 83 ec 40 sub rsp, 64 ; 00000040H 0000f 48 8b ec mov rbp, rsp 00012 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00016 5d pop rbp 00017 c3 ret 0 ?__empty_global_delete@@YAXPEAX_K@Z ENDP ; __empty_global_delete _TEXT ENDS ; Function compile flags: /Odtp /ZI ; File D:\Works\Corpsms_2010\public\ProxySocket\CBase64Coding.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX@Z _TEXT SEGMENT __formal$ = 80 ?__empty_global_delete@@YAXPEAX@Z PROC ; __empty_global_delete, COMDAT $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 55 push rbp 00006 48 83 ec 40 sub rsp, 64 ; 00000040H 0000a 48 8b ec mov rbp, rsp 0000d 48 8d 65 40 lea rsp, QWORD PTR [rbp+64] 00011 5d pop rbp 00012 c3 ret 0 ?__empty_global_delete@@YAXPEAX@Z ENDP ; __empty_global_delete _TEXT ENDS END