SmsCenter/Release_Unicode/CBase64Coding.cod

7466 lines
247 KiB
Plaintext
Raw Blame History

; 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; //Ĭ<>Ϸ<EFBFBD><CFB7>سɹ<D8B3>
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