SmsCenter/Release_Unicode/CBase64Coding.cod

7104 lines
240 KiB
Plaintext
Raw Blame History

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