From fa0967c2d56fadd5ab4dcdc17840eaad0b29b20e Mon Sep 17 00:00:00 2001 From: Iizerd Date: Thu, 14 Oct 2021 02:15:59 -0700 Subject: [PATCH] fixed rip moving --- CodeVirtualizer/Jit.cpp | 4 +- CodeVirtualizer/Main.cpp | 63 +- CodeVirtualizer/NativeCode.cpp | 14 +- CodeVirtualizer/OpaqueBranching.cpp | 1 + CodeVirtualizer/x64/Debug/Jit.cod | 1345 ++++---- CodeVirtualizer/x64/Debug/Main.cod | 2772 +++++------------ CodeVirtualizer/x64/Debug/NativeCode.cod | 1491 ++++----- CodeVirtualizer/x64/Debug/OpaqueBranching.cod | 87 +- x64/Debug/CodeVirtualizer.ilk | Bin 3661156 -> 4434560 bytes 9 files changed, 2139 insertions(+), 3638 deletions(-) diff --git a/CodeVirtualizer/Jit.cpp b/CodeVirtualizer/Jit.cpp index a3c09c8..0797690 100644 --- a/CodeVirtualizer/Jit.cpp +++ b/CodeVirtualizer/Jit.cpp @@ -149,8 +149,6 @@ PNATIVE_CODE_BLOCK JitEmitPreRipMov(PNATIVE_CODE_LINK Link, INT32 Delta) RipDelta += ((FourByte - Count) * 4); RipDelta += Delta; //Add the actual instruction - printf("%p IS THE DATAOFFSET\n", DataOffset); - system("pause"); if (!JitEmitRipRelativeMovD(Block, RipDelta, DataOffset)) { NcDeleteBlock(Block); @@ -242,7 +240,7 @@ PNATIVE_CODE_BLOCK JitEmitPostRipMov(PNATIVE_CODE_LINK Link, INT32 Delta) { INT32 RipDelta = Link->RawDataSize - (FourByte * 4) - (TwoByte * 2); RipDelta += (FourByte * DWORD_MOV_INST_LENGTH); - RipDelta += WORD_MOV_INST_LENGTH; + RipDelta += (TwoByte * WORD_MOV_INST_LENGTH); RipDelta += BYTE_MOV_INST_LENGTH; RipDelta *= (-1); RipDelta += Delta; diff --git a/CodeVirtualizer/Main.cpp b/CodeVirtualizer/Main.cpp index 0c6ec1c..9386a91 100644 --- a/CodeVirtualizer/Main.cpp +++ b/CodeVirtualizer/Main.cpp @@ -37,21 +37,75 @@ UCHAR TestBuffer[] = { }; ULONG TestBufferSize = sizeof(TestBuffer); -UCHAR meme1[] = { 0x31, 0xc0 }; +UCHAR meme1[] = { 0xb8, 0xde, 0xc0, 0xac, 0x0e }; +UCHAR meme2[] = { 0xc3 }; int main() { XedTablesInit(); srand(time(NULL)); + PNATIVE_CODE_LINK Return1776 = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST, meme1, sizeof(meme1)); + PNATIVE_CODE_LINK RetInst = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST, meme2, sizeof(meme2)); + PNATIVE_CODE_BLOCK Pre1 = JitEmitPreRipMov(Return1776); + PNATIVE_CODE_BLOCK Post1 = JitEmitPostRipMov(Return1776); + PNATIVE_CODE_BLOCK Pre2 = JitEmitPreRipMov(RetInst); + PNATIVE_CODE_BLOCK Post2 = JitEmitPostRipMov(RetInst); + + NcAppendToBlock(Pre1, Return1776); + NcInsertBlockAfter(Pre1->End, Post1, 0); + Pre1->End = Post1->End; + NcInsertBlockAfter(Pre1->End, Pre2, 0); + Pre1->End = Pre2->End; + NcAppendToBlock(Pre1, RetInst); + NcInsertBlockAfter(Pre1->End, Post2, 0); + Pre1->End = Post2->End; + + /*Pre->Start = Return1776; + Pre->End = Return1776;*/ + + for (ULONG i = 0; i < Return1776->RawDataSize; i++) + Return1776->RawData[i] = (UCHAR)rand(); + for (ULONG i = 0; i < RetInst->RawDataSize; i++) + RetInst->RawData[i] = (UCHAR)rand(); + + + /*NcDebugPrint(Pre); + NcPrintBlockCode(Pre);*/ + + ULONG AsmLen; + PVOID Asm = NcAssemble(Pre1, &AsmLen); + PUCHAR Tb = (PUCHAR)Asm; + for (uint32_t i = 0; i < AsmLen; i++) + { + std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)Tb[i] << ' '; + } + + system("pause"); + + typedef ULONG64(*FnGet1776)(); + FnGet1776 ExecBuffer = (FnGet1776)MakeExecutableBuffer(Asm, AsmLen); + if (ExecBuffer) + { + printf("The numba was: %X\n", ExecBuffer()); + printf("The numba was: %X\n", ExecBuffer()); + + printf("The numba was: %X\n", ExecBuffer()); + + printf("The numba was: %X\n", ExecBuffer()); - NATIVE_CODE_BLOCK Block; + } + + + //NcDebugPrint(Post); + + + + /*NATIVE_CODE_BLOCK Block; NcDisassemble(&Block, TestBuffer, TestBufferSize); PNATIVE_CODE_LINK NewLink = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST, meme1, sizeof(meme1)); NcInsertLinkBefore(Block.End->Prev->Prev->Prev->Prev, NewLink); - - ULONG AssembledSize; PVOID AssembledBlock = NcAssemble(&Block, &AssembledSize); if (!AssembledBlock || !AssembledSize) @@ -65,6 +119,7 @@ int main() { std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)Tb[i] << ' '; } + */ //PNATIVE_CODE_BLOCK OpaqueBranch = ObfGenOpaqueBranch(Block.Start, Block.End); diff --git a/CodeVirtualizer/NativeCode.cpp b/CodeVirtualizer/NativeCode.cpp index c585f9c..887f57d 100644 --- a/CodeVirtualizer/NativeCode.cpp +++ b/CodeVirtualizer/NativeCode.cpp @@ -28,6 +28,8 @@ _NATIVE_CODE_LINK::_NATIVE_CODE_LINK(ULONG F, PVOID Rd, ULONG Rds) RawData = new UCHAR[Rds]; if (Rd) RtlCopyMemory(RawData, Rd, Rds); + + XedDecode(&XedInstruction, RawData, RawDataSize); } _NATIVE_CODE_LINK::~_NATIVE_CODE_LINK() @@ -120,7 +122,7 @@ VOID NcUnlink(PNATIVE_CODE_LINK Link) ULONG NcCalcBlockSize(PNATIVE_CODE_BLOCK Block) { ULONG TotalSize = 0; - for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) + for (PNATIVE_CODE_LINK T = Block->Start; T != Block->End->Next; T = T->Next) { if (T->Flags & CODE_FLAG_IS_LABEL) continue; @@ -173,7 +175,7 @@ BOOL NcInsertBlockAfter(PNATIVE_CODE_LINK Link, PNATIVE_CODE_BLOCK Block, BOOL F Block->Start->Prev = Link; Link->Next = Block->Start; - for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) + for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) T->Block = Link->Block; return TRUE; @@ -193,7 +195,7 @@ BOOL NcInsertBlockBefore(PNATIVE_CODE_LINK Link, PNATIVE_CODE_BLOCK Block, BOOL Block->End->Next = Link; Link->Prev = Block->End; - for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) + for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) T->Block = Link->Block; return TRUE; @@ -504,7 +506,7 @@ PVOID NcAssemble(PNATIVE_CODE_BLOCK Block, PULONG OutSize) PUCHAR BufferOffset = Buffer; - for (PNATIVE_CODE_LINK T = Block->Start; T != Block->End->Next; T = T->Next) + for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) { if (T->Flags & CODE_FLAG_IS_LABEL) continue; @@ -535,7 +537,7 @@ VOID NcDebugPrint(PNATIVE_CODE_BLOCK Block) if (!ConsoleHandle) return; - for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) + for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) { if (T->Flags & CODE_FLAG_IS_LABEL) { @@ -561,7 +563,7 @@ VOID NcDebugPrint(PNATIVE_CODE_BLOCK Block) VOID NcPrintBlockCode(PNATIVE_CODE_BLOCK Block) { - for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) + for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) { if (!(T->Flags & CODE_FLAG_IS_LABEL)) { diff --git a/CodeVirtualizer/OpaqueBranching.cpp b/CodeVirtualizer/OpaqueBranching.cpp index a80dee6..98006e4 100644 --- a/CodeVirtualizer/OpaqueBranching.cpp +++ b/CodeVirtualizer/OpaqueBranching.cpp @@ -135,6 +135,7 @@ PNATIVE_CODE_BLOCK ObfGenOpaqueBranch(PNATIVE_CODE_LINK Start, PNATIVE_CODE_LINK NcAppendToBlock(Taken, new NATIVE_CODE_LINK(JmpLabel, Taken)); NcInsertBlockAfter(NotTaken->End, Taken, FALSE); + NotTaken->End = Taken->End; delete Taken; return NotTaken; diff --git a/CodeVirtualizer/x64/Debug/Jit.cod b/CodeVirtualizer/x64/Debug/Jit.cod index aaa69e6..fc3f3f4 100644 --- a/CodeVirtualizer/x64/Debug/Jit.cod +++ b/CodeVirtualizer/x64/Debug/Jit.cod @@ -88,9 +88,6 @@ 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 __local_stdio_printf_options -PUBLIC _vfprintf_l -PUBLIC printf PUBLIC wmemcpy PUBLIC ?_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z ; std::_Adjust_manually_vector_aligned PUBLIC ?_Orphan_all@_Container_base12@std@@QEAAXXZ ; std::_Container_base12::_Orphan_all @@ -132,7 +129,6 @@ PUBLIC ??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z ; std::_Deallocate<16,0> PUBLIC ??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z ; std::_Deallocate_plain > PUBLIC ?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAEAV?$allocator@U_Container_proxy@std@@@2@QEAU_Container_proxy@2@_K@Z ; std::_Default_allocator_traits >::deallocate PUBLIC __JustMyCode_Default -PUBLIC ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA ; `__local_stdio_printf_options'::`2'::_OptionsStorage PUBLIC ?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z@4JA ; `std::_Adjust_manually_vector_aligned'::`1'::__LINE__Var PUBLIC ??_C@_0BB@FCMFBGOM@invalid?5argument@ ; `string' PUBLIC ??_C@_02DKCKIIND@?$CFs@ ; `string' @@ -143,8 +139,6 @@ PUBLIC ??_C@_1CG@JNLFBNGN@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAa PUBLIC ??_C@_0GI@DEICPIDJ@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ ; `string' PUBLIC ?__LINE__Var@?0??_Maklocwcs@std@@YAPEA_WPEB_W@Z@4JA ; `std::_Maklocwcs'::`1'::__LINE__Var PUBLIC ??_C@_0GI@LHMPPKJI@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ ; `string' -PUBLIC ??_C@_0BG@BLDOCDOA@?$CFp?5IS?5THE?5DATAOFFSET?6@ ; `string' -PUBLIC ??_C@_05PDJBBECF@pause@ ; `string' PUBLIC ??_C@_0N@LPFKKEBD@?3AM?3am?3PM?3pm@ ; `string' PUBLIC ??_C@_1BK@MHIKGOKE@?$AA?3?$AAA?$AAM?$AA?3?$AAa?$AAm?$AA?3?$AAP?$AAM?$AA?3?$AAp?$AAm@ ; `string' EXTRN ??2@YAPEAX_K@Z:PROC ; operator new @@ -153,13 +147,10 @@ EXTRN __imp__invalid_parameter:PROC EXTRN memcpy:PROC EXTRN __imp_wcslen:PROC EXTRN strlen:PROC -EXTRN __imp_system:PROC EXTRN __imp__calloc_dbg:PROC EXTRN __imp__CrtDbgReport:PROC EXTRN __imp_??0_Lockit@std@@QEAA@H@Z:PROC EXTRN __imp_??1_Lockit@std@@QEAA@XZ:PROC -EXTRN __imp___acrt_iob_func:PROC -EXTRN __imp___stdio_common_vfprintf:PROC EXTRN ?_Xbad_alloc@std@@YAXXZ:PROC ; std::_Xbad_alloc EXTRN _Mbrtowc:PROC EXTRN __imp_?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ:PROC @@ -199,10 +190,6 @@ EXTRN __GSHandlerCheck:PROC EXTRN __GSHandlerCheck_EH4:PROC EXTRN __security_check_cookie:PROC EXTRN __security_cookie:QWORD -; COMDAT ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA -_BSS SEGMENT -?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA DQ 01H DUP (?) ; `__local_stdio_printf_options'::`2'::_OptionsStorage -_BSS ENDS ; COMDAT pdata pdata SEGMENT $pdata$?__empty_global_delete@@YAXPEAX@Z DD imagerel $LN3 @@ -229,24 +216,6 @@ $pdata$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DD imagerel $LN3 pdata ENDS ; COMDAT pdata pdata SEGMENT -$pdata$__local_stdio_printf_options DD imagerel $LN3 - DD imagerel $LN3+59 - DD imagerel $unwind$__local_stdio_printf_options -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$_vfprintf_l DD imagerel $LN3 - DD imagerel $LN3+126 - DD imagerel $unwind$_vfprintf_l -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$printf DD imagerel $LN3 - DD imagerel $LN3+214 - DD imagerel $unwind$printf -pdata ENDS -; COMDAT pdata -pdata SEGMENT $pdata$wmemcpy DD imagerel $LN3 DD imagerel $LN3+106 DD imagerel $unwind$wmemcpy @@ -416,7 +385,7 @@ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?JitEmitPreRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z DD imagerel $LN25 - DD imagerel $LN25+1088 + DD imagerel $LN25+1056 DD imagerel $unwind$?JitEmitPreRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z pdata ENDS ; COMDAT pdata @@ -434,7 +403,7 @@ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?JitEmitPostRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z DD imagerel $LN25 - DD imagerel $LN25+1200 + DD imagerel $LN25+1205 DD imagerel $unwind$?JitEmitPostRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z pdata ENDS ; COMDAT pdata @@ -551,15 +520,6 @@ CONST ENDS CONST SEGMENT ??_C@_0N@LPFKKEBD@?3AM?3am?3PM?3pm@ DB ':AM:am:PM:pm', 00H ; `string' CONST ENDS -; COMDAT ??_C@_05PDJBBECF@pause@ -CONST SEGMENT -??_C@_05PDJBBECF@pause@ DB 'pause', 00H ; `string' -CONST ENDS -; COMDAT ??_C@_0BG@BLDOCDOA@?$CFp?5IS?5THE?5DATAOFFSET?6@ -CONST SEGMENT -??_C@_0BG@BLDOCDOA@?$CFp?5IS?5THE?5DATAOFFSET?6@ DB '%p IS THE DATAOFFSET' - DB 0aH, 00H ; `string' -CONST ENDS ; COMDAT ??_C@_0GI@LHMPPKJI@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ CONST SEGMENT ??_C@_0GI@LHMPPKJI@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ DB 'C:\Pro' @@ -1414,49 +1374,6 @@ $unwind$wmemcpy DD 025053401H xdata ENDS ; COMDAT xdata xdata SEGMENT -$unwind$printf DD 025054a19H - DD 011d2322H - DD 07016002bH - DD 05015H - DD imagerel __GSHandlerCheck - DD 0148H -xdata ENDS -; COMDAT CONST -CONST SEGMENT -printf$rtcName$0 DB 05fH - DB 041H - DB 072H - DB 067H - DB 04cH - DB 069H - DB 073H - DB 074H - DB 00H - ORG $+7 -printf$rtcVarDesc DD 048H - DD 08H - DQ FLAT:printf$rtcName$0 - ORG $+48 -printf$rtcFrameData DD 01H - DD 00H - DQ FLAT:printf$rtcVarDesc -CONST ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$_vfprintf_l DD 035053901H - DD 011d3322H - DD 07016001fH - DD 05015H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$__local_stdio_printf_options DD 025051e01H - DD 010a230fH - DD 07003001dH - DD 05002H -xdata ENDS -; COMDAT xdata -xdata SEGMENT $ip2state$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DB 02H DB 00H DB 00H @@ -1915,7 +1832,7 @@ RipDelta$ = 256 Value$ = 264 ?JitiEmitWrapperB@@YAHKPEAU_NATIVE_CODE_BLOCK@@HK@Z PROC ; JitiEmitWrapperB, COMDAT -; 285 : { +; 283 : { $LN8: 00000 44 89 4c 24 20 mov DWORD PTR [rsp+32], r9d @@ -1937,7 +1854,7 @@ $LN8: 00 00 lea rcx, OFFSET FLAT:__DD050276_Jit@cpp 0003e e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 286 : switch (OpType) +; 284 : switch (OpType) 00043 8b 85 f0 00 00 00 mov eax, DWORD PTR OpType$[rbp] @@ -1955,8 +1872,8 @@ $LN8: 0006a eb 4f jmp SHORT $LN2@JitiEmitWr $LN4@JitiEmitWr: -; 287 : { -; 288 : case JIT_BITWISE_XOR: return JitEmitRipRelativeXorB(Block, RipDelta, Value); +; 285 : { +; 286 : case JIT_BITWISE_XOR: return JitEmitRipRelativeXorB(Block, RipDelta, Value); 0006c 44 8b 85 08 01 00 00 mov r8d, DWORD PTR Value$[rbp] @@ -1968,7 +1885,7 @@ $LN4@JitiEmitWr: 00085 eb 34 jmp SHORT $LN1@JitiEmitWr $LN5@JitiEmitWr: -; 289 : case JIT_BITWISE_AND: return JitEmitRipRelativeAndB(Block, RipDelta, Value); +; 287 : case JIT_BITWISE_AND: return JitEmitRipRelativeAndB(Block, RipDelta, Value); 00087 44 8b 85 08 01 00 00 mov r8d, DWORD PTR Value$[rbp] @@ -1980,7 +1897,7 @@ $LN5@JitiEmitWr: 000a0 eb 19 jmp SHORT $LN1@JitiEmitWr $LN6@JitiEmitWr: -; 290 : case JIT_BITWISE_OR: return JitEmitRipRelativeOrB(Block, RipDelta, Value); +; 288 : case JIT_BITWISE_OR: return JitEmitRipRelativeOrB(Block, RipDelta, Value); 000a2 44 8b 85 08 01 00 00 mov r8d, DWORD PTR Value$[rbp] @@ -1992,8 +1909,8 @@ $LN6@JitiEmitWr: $LN2@JitiEmitWr: $LN1@JitiEmitWr: -; 291 : } -; 292 : } +; 289 : } +; 290 : } 000bb 48 8d a5 d8 00 00 00 lea rsp, QWORD PTR [rbp+216] @@ -2013,7 +1930,7 @@ RipDelta$ = 256 Value$ = 264 ?JitiEmitWrapperW@@YAHKPEAU_NATIVE_CODE_BLOCK@@HK@Z PROC ; JitiEmitWrapperW, COMDAT -; 276 : { +; 274 : { $LN8: 00000 44 89 4c 24 20 mov DWORD PTR [rsp+32], r9d @@ -2035,7 +1952,7 @@ $LN8: 00 00 lea rcx, OFFSET FLAT:__DD050276_Jit@cpp 0003e e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 277 : switch (OpType) +; 275 : switch (OpType) 00043 8b 85 f0 00 00 00 mov eax, DWORD PTR OpType$[rbp] @@ -2053,8 +1970,8 @@ $LN8: 0006a eb 4f jmp SHORT $LN2@JitiEmitWr $LN4@JitiEmitWr: -; 278 : { -; 279 : case JIT_BITWISE_XOR: return JitEmitRipRelativeXorW(Block, RipDelta, Value); +; 276 : { +; 277 : case JIT_BITWISE_XOR: return JitEmitRipRelativeXorW(Block, RipDelta, Value); 0006c 44 8b 85 08 01 00 00 mov r8d, DWORD PTR Value$[rbp] @@ -2066,7 +1983,7 @@ $LN4@JitiEmitWr: 00085 eb 34 jmp SHORT $LN1@JitiEmitWr $LN5@JitiEmitWr: -; 280 : case JIT_BITWISE_AND: return JitEmitRipRelativeAndW(Block, RipDelta, Value); +; 278 : case JIT_BITWISE_AND: return JitEmitRipRelativeAndW(Block, RipDelta, Value); 00087 44 8b 85 08 01 00 00 mov r8d, DWORD PTR Value$[rbp] @@ -2078,7 +1995,7 @@ $LN5@JitiEmitWr: 000a0 eb 19 jmp SHORT $LN1@JitiEmitWr $LN6@JitiEmitWr: -; 281 : case JIT_BITWISE_OR: return JitEmitRipRelativeOrW(Block, RipDelta, Value); +; 279 : case JIT_BITWISE_OR: return JitEmitRipRelativeOrW(Block, RipDelta, Value); 000a2 44 8b 85 08 01 00 00 mov r8d, DWORD PTR Value$[rbp] @@ -2090,8 +2007,8 @@ $LN6@JitiEmitWr: $LN2@JitiEmitWr: $LN1@JitiEmitWr: -; 282 : } -; 283 : } +; 280 : } +; 281 : } 000bb 48 8d a5 d8 00 00 00 lea rsp, QWORD PTR [rbp+216] @@ -2111,7 +2028,7 @@ RipDelta$ = 256 Value$ = 264 ?JitiEmitWrapperD@@YAHKPEAU_NATIVE_CODE_BLOCK@@HK@Z PROC ; JitiEmitWrapperD, COMDAT -; 267 : { +; 265 : { $LN8: 00000 44 89 4c 24 20 mov DWORD PTR [rsp+32], r9d @@ -2133,7 +2050,7 @@ $LN8: 00 00 lea rcx, OFFSET FLAT:__DD050276_Jit@cpp 0003e e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 268 : switch (OpType) +; 266 : switch (OpType) 00043 8b 85 f0 00 00 00 mov eax, DWORD PTR OpType$[rbp] @@ -2151,8 +2068,8 @@ $LN8: 0006a eb 4f jmp SHORT $LN2@JitiEmitWr $LN4@JitiEmitWr: -; 269 : { -; 270 : case JIT_BITWISE_XOR: return JitEmitRipRelativeXorD(Block, RipDelta, Value); +; 267 : { +; 268 : case JIT_BITWISE_XOR: return JitEmitRipRelativeXorD(Block, RipDelta, Value); 0006c 44 8b 85 08 01 00 00 mov r8d, DWORD PTR Value$[rbp] @@ -2164,7 +2081,7 @@ $LN4@JitiEmitWr: 00085 eb 34 jmp SHORT $LN1@JitiEmitWr $LN5@JitiEmitWr: -; 271 : case JIT_BITWISE_AND: return JitEmitRipRelativeAndD(Block, RipDelta, Value); +; 269 : case JIT_BITWISE_AND: return JitEmitRipRelativeAndD(Block, RipDelta, Value); 00087 44 8b 85 08 01 00 00 mov r8d, DWORD PTR Value$[rbp] @@ -2176,7 +2093,7 @@ $LN5@JitiEmitWr: 000a0 eb 19 jmp SHORT $LN1@JitiEmitWr $LN6@JitiEmitWr: -; 272 : case JIT_BITWISE_OR: return JitEmitRipRelativeOrD(Block, RipDelta, Value); +; 270 : case JIT_BITWISE_OR: return JitEmitRipRelativeOrD(Block, RipDelta, Value); 000a2 44 8b 85 08 01 00 00 mov r8d, DWORD PTR Value$[rbp] @@ -2188,8 +2105,8 @@ $LN6@JitiEmitWr: $LN2@JitiEmitWr: $LN1@JitiEmitWr: -; 273 : } -; 274 : } +; 271 : } +; 272 : } 000bb 48 8d a5 d8 00 00 00 lea rsp, QWORD PTR [rbp+216] @@ -2230,7 +2147,7 @@ SaveFlags$ = 728 Delta$ = 736 ?JitEmitPostRipBitwiseOp@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@PEAU_JIT_BITWISE_DATA@@KHH@Z PROC ; JitEmitPostRipBitwiseOp, COMDAT -; 369 : { +; 367 : { $LN29: 00000 44 89 4c 24 20 mov DWORD PTR [rsp+32], r9d @@ -2252,7 +2169,7 @@ $LN29: 00 00 lea rcx, OFFSET FLAT:__DD050276_Jit@cpp 00040 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 370 : ULONG FourByte = Link->RawDataSize / 4; +; 368 : ULONG FourByte = Link->RawDataSize / 4; 00045 33 d2 xor edx, edx 00047 48 8b 85 c0 02 @@ -2262,7 +2179,7 @@ $LN29: 00056 f7 f1 div ecx 00058 89 45 04 mov DWORD PTR FourByte$[rbp], eax -; 371 : ULONG TwoByte = (Link->RawDataSize - (FourByte * 4)) / 2; +; 369 : ULONG TwoByte = (Link->RawDataSize - (FourByte * 4)) / 2; 0005b 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 0005e c1 e0 02 shl eax, 2 @@ -2276,7 +2193,7 @@ $LN29: 00076 f7 f1 div ecx 00078 89 45 24 mov DWORD PTR TwoByte$[rbp], eax -; 372 : ULONG OneByte = (Link->RawDataSize - (FourByte * 4) - (TwoByte * 2)); +; 370 : ULONG OneByte = (Link->RawDataSize - (FourByte * 4) - (TwoByte * 2)); 0007b 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 0007e c1 e0 02 shl eax, 2 @@ -2290,8 +2207,8 @@ $LN29: 00094 2b c1 sub eax, ecx 00096 89 45 44 mov DWORD PTR OneByte$[rbp], eax -; 373 : -; 374 : PNATIVE_CODE_BLOCK Block = new NATIVE_CODE_BLOCK; +; 371 : +; 372 : PNATIVE_CODE_BLOCK Block = new NATIVE_CODE_BLOCK; 00099 b9 30 00 00 00 mov ecx, 48 ; 00000030H 0009e e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new @@ -2319,19 +2236,19 @@ $LN17@JitEmitPos: 00 00 mov rax, QWORD PTR $T4[rbp] 000e9 48 89 45 68 mov QWORD PTR Block$[rbp], rax -; 375 : if (!Block) +; 373 : if (!Block) 000ed 48 83 7d 68 00 cmp QWORD PTR Block$[rbp], 0 000f2 75 07 jne SHORT $LN4@JitEmitPos -; 376 : return NULL; +; 374 : return NULL; 000f4 33 c0 xor eax, eax 000f6 e9 ed 03 00 00 jmp $LN1@JitEmitPos $LN4@JitEmitPos: -; 377 : -; 378 : if (SaveFlags && !JitEmitPushfqInst(Block)) +; 375 : +; 376 : if (SaveFlags && !JitEmitPushfqInst(Block)) 000fb 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 @@ -2341,13 +2258,13 @@ $LN4@JitEmitPos: 0010d 85 c0 test eax, eax 0010f 75 4a jne SHORT $LN5@JitEmitPos -; 379 : { -; 380 : NcDeleteBlock(Block); +; 377 : { +; 378 : NcDeleteBlock(Block); 00111 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 00115 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 381 : delete Block; +; 379 : delete Block; 0011a 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 0011e 48 89 85 08 02 @@ -2368,30 +2285,30 @@ $LN18@JitEmitPos: 00 mov QWORD PTR tv128[rbp], 0 $LN19@JitEmitPos: -; 382 : return NULL; +; 380 : return NULL; 00154 33 c0 xor eax, eax 00156 e9 8d 03 00 00 jmp $LN1@JitEmitPos $LN5@JitEmitPos: -; 383 : } -; 384 : -; 385 : ULONG Count = FourByte; +; 381 : } +; 382 : +; 383 : ULONG Count = FourByte; 0015b 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 0015e 89 85 84 00 00 00 mov DWORD PTR Count$[rbp], eax $LN2@JitEmitPos: -; 386 : while (Count) +; 384 : while (Count) 00164 83 bd 84 00 00 00 00 cmp DWORD PTR Count$[rbp], 0 0016b 0f 84 11 01 00 00 je $LN3@JitEmitPos -; 387 : { -; 388 : INT32 RipDelta = Link->RawDataSize - ((FourByte - Count) * 4); +; 385 : { +; 386 : INT32 RipDelta = Link->RawDataSize - ((FourByte - Count) * 4); 00171 8b 85 84 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -2407,13 +2324,13 @@ $LN2@JitEmitPos: 0018f 89 85 a4 00 00 00 mov DWORD PTR RipDelta$1[rbp], eax -; 389 : if (SaveFlags) +; 387 : if (SaveFlags) 00195 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 0019c 74 0e je SHORT $LN6@JitEmitPos -; 390 : RipDelta += 1; +; 388 : RipDelta += 1; 0019e 8b 85 a4 00 00 00 mov eax, DWORD PTR RipDelta$1[rbp] @@ -2422,7 +2339,7 @@ $LN2@JitEmitPos: 00 mov DWORD PTR RipDelta$1[rbp], eax $LN6@JitEmitPos: -; 391 : RipDelta += (FourByte - (Count - 1)) * DWORD_RIP_INST_LENGTH; +; 389 : RipDelta += (FourByte - (Count - 1)) * DWORD_RIP_INST_LENGTH; 001ac 8b 85 84 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -2438,14 +2355,14 @@ $LN6@JitEmitPos: 001c8 89 85 a4 00 00 00 mov DWORD PTR RipDelta$1[rbp], eax -; 392 : RipDelta *= (-1); +; 390 : RipDelta *= (-1); 001ce 6b 85 a4 00 00 00 ff imul eax, DWORD PTR RipDelta$1[rbp], -1 001d5 89 85 a4 00 00 00 mov DWORD PTR RipDelta$1[rbp], eax -; 393 : RipDelta += Delta; +; 391 : RipDelta += Delta; 001db 8b 85 e0 02 00 00 mov eax, DWORD PTR Delta$[rbp] @@ -2456,7 +2373,7 @@ $LN6@JitEmitPos: 001eb 89 85 a4 00 00 00 mov DWORD PTR RipDelta$1[rbp], eax -; 394 : if (!JitiEmitWrapperD(OpType, Block, RipDelta, JitData->Data[FourByte - Count])) +; 392 : if (!JitiEmitWrapperD(OpType, Block, RipDelta, JitData->Data[FourByte - Count])) 001f1 8b 85 84 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -2476,13 +2393,13 @@ $LN6@JitEmitPos: 00221 85 c0 test eax, eax 00223 75 4a jne SHORT $LN7@JitEmitPos -; 395 : { -; 396 : NcDeleteBlock(Block); +; 393 : { +; 394 : NcDeleteBlock(Block); 00225 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 00229 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 397 : delete Block; +; 395 : delete Block; 0022e 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 00232 48 89 85 28 02 @@ -2503,14 +2420,14 @@ $LN20@JitEmitPos: 00 mov QWORD PTR tv158[rbp], 0 $LN21@JitEmitPos: -; 398 : return NULL; +; 396 : return NULL; 00268 33 c0 xor eax, eax 0026a e9 79 02 00 00 jmp $LN1@JitEmitPos $LN7@JitEmitPos: -; 399 : } -; 400 : --Count; +; 397 : } +; 398 : --Count; 0026f 8b 85 84 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -2518,20 +2435,20 @@ $LN7@JitEmitPos: 00277 89 85 84 00 00 00 mov DWORD PTR Count$[rbp], eax -; 401 : } +; 399 : } 0027d e9 e2 fe ff ff jmp $LN2@JitEmitPos $LN3@JitEmitPos: -; 402 : -; 403 : if (TwoByte) +; 400 : +; 401 : if (TwoByte) 00282 83 7d 24 00 cmp DWORD PTR TwoByte$[rbp], 0 00286 0f 84 ef 00 00 00 je $LN8@JitEmitPos -; 404 : { -; 405 : INT32 RipDelta = Link->RawDataSize - (FourByte * 4); +; 402 : { +; 403 : INT32 RipDelta = Link->RawDataSize - (FourByte * 4); 0028c 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 0028f c1 e0 02 shl eax, 2 @@ -2543,13 +2460,13 @@ $LN3@JitEmitPos: 002a0 89 85 c4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 406 : if (SaveFlags) +; 404 : if (SaveFlags) 002a6 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 002ad 74 0e je SHORT $LN9@JitEmitPos -; 407 : RipDelta += 1; +; 405 : RipDelta += 1; 002af 8b 85 c4 00 00 00 mov eax, DWORD PTR RipDelta$2[rbp] @@ -2558,7 +2475,7 @@ $LN3@JitEmitPos: 00 mov DWORD PTR RipDelta$2[rbp], eax $LN9@JitEmitPos: -; 408 : RipDelta += (FourByte * DWORD_RIP_INST_LENGTH); +; 406 : RipDelta += (FourByte * DWORD_RIP_INST_LENGTH); 002bd 6b 45 04 0a imul eax, DWORD PTR FourByte$[rbp], 10 002c1 8b 8d c4 00 00 @@ -2568,7 +2485,7 @@ $LN9@JitEmitPos: 002cb 89 85 c4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 409 : RipDelta += WORD_RIP_INST_LENGTH; +; 407 : RipDelta += WORD_RIP_INST_LENGTH; 002d1 8b 85 c4 00 00 00 mov eax, DWORD PTR RipDelta$2[rbp] @@ -2576,14 +2493,14 @@ $LN9@JitEmitPos: 002da 89 85 c4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 410 : RipDelta *= (-1); +; 408 : RipDelta *= (-1); 002e0 6b 85 c4 00 00 00 ff imul eax, DWORD PTR RipDelta$2[rbp], -1 002e7 89 85 c4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 411 : RipDelta += Delta; +; 409 : RipDelta += Delta; 002ed 8b 85 e0 02 00 00 mov eax, DWORD PTR Delta$[rbp] @@ -2594,7 +2511,7 @@ $LN9@JitEmitPos: 002fd 89 85 c4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 412 : if (!JitiEmitWrapperW(OpType, Block, RipDelta, JitData->Data[3])) +; 410 : if (!JitiEmitWrapperW(OpType, Block, RipDelta, JitData->Data[3])) 00303 b8 04 00 00 00 mov eax, 4 00308 48 6b c0 03 imul rax, rax, 3 @@ -2610,13 +2527,13 @@ $LN9@JitEmitPos: 0032d 85 c0 test eax, eax 0032f 75 4a jne SHORT $LN8@JitEmitPos -; 413 : { -; 414 : NcDeleteBlock(Block); +; 411 : { +; 412 : NcDeleteBlock(Block); 00331 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 00335 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 415 : delete Block; +; 413 : delete Block; 0033a 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 0033e 48 89 85 48 02 @@ -2637,23 +2554,23 @@ $LN22@JitEmitPos: 00 mov QWORD PTR tv185[rbp], 0 $LN23@JitEmitPos: -; 416 : return NULL; +; 414 : return NULL; 00374 33 c0 xor eax, eax 00376 e9 6d 01 00 00 jmp $LN1@JitEmitPos $LN8@JitEmitPos: -; 417 : } -; 418 : } -; 419 : -; 420 : if (OneByte) +; 415 : } +; 416 : } +; 417 : +; 418 : if (OneByte) 0037b 83 7d 44 00 cmp DWORD PTR OneByte$[rbp], 0 0037f 0f 84 02 01 00 00 je $LN11@JitEmitPos -; 421 : { -; 422 : INT32 RipDelta = Link->RawDataSize - (FourByte * 4) - (TwoByte * 2); +; 419 : { +; 420 : INT32 RipDelta = Link->RawDataSize - (FourByte * 4) - (TwoByte * 2); 00385 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 00388 c1 e0 02 shl eax, 2 @@ -2668,13 +2585,13 @@ $LN8@JitEmitPos: 003a0 89 85 e4 00 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 423 : if (SaveFlags) +; 421 : if (SaveFlags) 003a6 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 003ad 74 0e je SHORT $LN12@JitEmitPos -; 424 : RipDelta += 1; +; 422 : RipDelta += 1; 003af 8b 85 e4 00 00 00 mov eax, DWORD PTR RipDelta$3[rbp] @@ -2683,7 +2600,7 @@ $LN8@JitEmitPos: 00 mov DWORD PTR RipDelta$3[rbp], eax $LN12@JitEmitPos: -; 425 : RipDelta += (FourByte * DWORD_RIP_INST_LENGTH); +; 423 : RipDelta += (FourByte * DWORD_RIP_INST_LENGTH); 003bd 6b 45 04 0a imul eax, DWORD PTR FourByte$[rbp], 10 003c1 8b 8d e4 00 00 @@ -2693,7 +2610,7 @@ $LN12@JitEmitPos: 003cb 89 85 e4 00 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 426 : RipDelta += WORD_RIP_INST_LENGTH; +; 424 : RipDelta += WORD_RIP_INST_LENGTH; 003d1 8b 85 e4 00 00 00 mov eax, DWORD PTR RipDelta$3[rbp] @@ -2701,7 +2618,7 @@ $LN12@JitEmitPos: 003da 89 85 e4 00 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 427 : RipDelta += BYTE_RIP_INST_LENGTH; +; 425 : RipDelta += BYTE_RIP_INST_LENGTH; 003e0 8b 85 e4 00 00 00 mov eax, DWORD PTR RipDelta$3[rbp] @@ -2709,14 +2626,14 @@ $LN12@JitEmitPos: 003e9 89 85 e4 00 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 428 : RipDelta *= (-1); +; 426 : RipDelta *= (-1); 003ef 6b 85 e4 00 00 00 ff imul eax, DWORD PTR RipDelta$3[rbp], -1 003f6 89 85 e4 00 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 429 : RipDelta += Delta; +; 427 : RipDelta += Delta; 003fc 8b 85 e0 02 00 00 mov eax, DWORD PTR Delta$[rbp] @@ -2727,7 +2644,7 @@ $LN12@JitEmitPos: 0040c 89 85 e4 00 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 430 : if (!JitiEmitWrapperB(OpType, Block, RipDelta, JitData->Data[4])) +; 428 : if (!JitiEmitWrapperB(OpType, Block, RipDelta, JitData->Data[4])) 00412 b8 04 00 00 00 mov eax, 4 00417 48 6b c0 04 imul rax, rax, 4 @@ -2743,13 +2660,13 @@ $LN12@JitEmitPos: 0043c 85 c0 test eax, eax 0043e 75 47 jne SHORT $LN11@JitEmitPos -; 431 : { -; 432 : NcDeleteBlock(Block); +; 429 : { +; 430 : NcDeleteBlock(Block); 00440 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 00444 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 433 : delete Block; +; 431 : delete Block; 00449 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 0044d 48 89 85 68 02 @@ -2770,16 +2687,16 @@ $LN24@JitEmitPos: 00 mov QWORD PTR tv214[rbp], 0 $LN25@JitEmitPos: -; 434 : return NULL; +; 432 : return NULL; 00483 33 c0 xor eax, eax 00485 eb 61 jmp SHORT $LN1@JitEmitPos $LN11@JitEmitPos: -; 435 : } -; 436 : } -; 437 : -; 438 : if (SaveFlags && !JitEmitPopfqInst(Block)) +; 433 : } +; 434 : } +; 435 : +; 436 : if (SaveFlags && !JitEmitPopfqInst(Block)) 00487 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 @@ -2789,13 +2706,13 @@ $LN11@JitEmitPos: 00499 85 c0 test eax, eax 0049b 75 47 jne SHORT $LN14@JitEmitPos -; 439 : { -; 440 : NcDeleteBlock(Block); +; 437 : { +; 438 : NcDeleteBlock(Block); 0049d 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 004a1 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 441 : delete Block; +; 439 : delete Block; 004a6 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 004aa 48 89 85 88 02 @@ -2816,20 +2733,20 @@ $LN26@JitEmitPos: 00 mov QWORD PTR tv224[rbp], 0 $LN27@JitEmitPos: -; 442 : return NULL; +; 440 : return NULL; 004e0 33 c0 xor eax, eax 004e2 eb 04 jmp SHORT $LN1@JitEmitPos $LN14@JitEmitPos: -; 443 : } -; 444 : -; 445 : return Block; +; 441 : } +; 442 : +; 443 : return Block; 004e4 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] $LN1@JitEmitPos: -; 446 : } +; 444 : } 004e8 48 8d a5 a8 02 00 00 lea rsp, QWORD PTR [rbp+680] @@ -2961,7 +2878,7 @@ SaveFlags$ = 728 Delta$ = 736 ?JitEmitPreRipBitwiseOp@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@PEAU_JIT_BITWISE_DATA@@KHH@Z PROC ; JitEmitPreRipBitwiseOp, COMDAT -; 295 : { +; 293 : { $LN29: 00000 44 89 4c 24 20 mov DWORD PTR [rsp+32], r9d @@ -2983,7 +2900,7 @@ $LN29: 00 00 lea rcx, OFFSET FLAT:__DD050276_Jit@cpp 00040 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 296 : ULONG FourByte = Link->RawDataSize / 4; +; 294 : ULONG FourByte = Link->RawDataSize / 4; 00045 33 d2 xor edx, edx 00047 48 8b 85 c0 02 @@ -2993,7 +2910,7 @@ $LN29: 00056 f7 f1 div ecx 00058 89 45 04 mov DWORD PTR FourByte$[rbp], eax -; 297 : ULONG TwoByte = (Link->RawDataSize - (FourByte * 4)) / 2; +; 295 : ULONG TwoByte = (Link->RawDataSize - (FourByte * 4)) / 2; 0005b 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 0005e c1 e0 02 shl eax, 2 @@ -3007,7 +2924,7 @@ $LN29: 00076 f7 f1 div ecx 00078 89 45 24 mov DWORD PTR TwoByte$[rbp], eax -; 298 : ULONG OneByte = (Link->RawDataSize - (FourByte * 4) - (TwoByte * 2)); +; 296 : ULONG OneByte = (Link->RawDataSize - (FourByte * 4) - (TwoByte * 2)); 0007b 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 0007e c1 e0 02 shl eax, 2 @@ -3021,8 +2938,8 @@ $LN29: 00094 2b c1 sub eax, ecx 00096 89 45 44 mov DWORD PTR OneByte$[rbp], eax -; 299 : -; 300 : PNATIVE_CODE_BLOCK Block = new NATIVE_CODE_BLOCK; +; 297 : +; 298 : PNATIVE_CODE_BLOCK Block = new NATIVE_CODE_BLOCK; 00099 b9 30 00 00 00 mov ecx, 48 ; 00000030H 0009e e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new @@ -3050,19 +2967,19 @@ $LN17@JitEmitPre: 00 00 mov rax, QWORD PTR $T4[rbp] 000e9 48 89 45 68 mov QWORD PTR Block$[rbp], rax -; 301 : if (!Block) +; 299 : if (!Block) 000ed 48 83 7d 68 00 cmp QWORD PTR Block$[rbp], 0 000f2 75 07 jne SHORT $LN4@JitEmitPre -; 302 : return NULL; +; 300 : return NULL; 000f4 33 c0 xor eax, eax 000f6 e9 67 03 00 00 jmp $LN1@JitEmitPre $LN4@JitEmitPre: -; 303 : -; 304 : if (SaveFlags && !JitEmitPushfqInst(Block)) +; 301 : +; 302 : if (SaveFlags && !JitEmitPushfqInst(Block)) 000fb 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 @@ -3072,13 +2989,13 @@ $LN4@JitEmitPre: 0010d 85 c0 test eax, eax 0010f 75 4a jne SHORT $LN5@JitEmitPre -; 305 : { -; 306 : NcDeleteBlock(Block); +; 303 : { +; 304 : NcDeleteBlock(Block); 00111 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 00115 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 307 : delete Block; +; 305 : delete Block; 0011a 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 0011e 48 89 85 08 02 @@ -3099,30 +3016,30 @@ $LN18@JitEmitPre: 00 mov QWORD PTR tv128[rbp], 0 $LN19@JitEmitPre: -; 308 : return NULL; +; 306 : return NULL; 00154 33 c0 xor eax, eax 00156 e9 07 03 00 00 jmp $LN1@JitEmitPre $LN5@JitEmitPre: -; 309 : } -; 310 : -; 311 : ULONG Count = FourByte; +; 307 : } +; 308 : +; 309 : ULONG Count = FourByte; 0015b 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 0015e 89 85 84 00 00 00 mov DWORD PTR Count$[rbp], eax $LN2@JitEmitPre: -; 312 : while (Count) +; 310 : while (Count) 00164 83 bd 84 00 00 00 00 cmp DWORD PTR Count$[rbp], 0 0016b 0f 84 f7 00 00 00 je $LN3@JitEmitPre -; 313 : { -; 314 : INT32 RipDelta = (((Count - 1) * DWORD_RIP_INST_LENGTH) + (TwoByte * WORD_RIP_INST_LENGTH) + (OneByte * BYTE_RIP_INST_LENGTH)); +; 311 : { +; 312 : INT32 RipDelta = (((Count - 1) * DWORD_RIP_INST_LENGTH) + (TwoByte * WORD_RIP_INST_LENGTH) + (OneByte * BYTE_RIP_INST_LENGTH)); 00171 8b 85 84 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -3135,13 +3052,13 @@ $LN2@JitEmitPre: 00188 89 85 a4 00 00 00 mov DWORD PTR RipDelta$1[rbp], eax -; 315 : if (SaveFlags) +; 313 : if (SaveFlags) 0018e 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 00195 74 0e je SHORT $LN6@JitEmitPre -; 316 : RipDelta += 1; +; 314 : RipDelta += 1; 00197 8b 85 a4 00 00 00 mov eax, DWORD PTR RipDelta$1[rbp] @@ -3150,7 +3067,7 @@ $LN2@JitEmitPre: 00 mov DWORD PTR RipDelta$1[rbp], eax $LN6@JitEmitPre: -; 317 : RipDelta += ((FourByte - Count) * 4); +; 315 : RipDelta += ((FourByte - Count) * 4); 001a5 8b 85 84 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -3163,7 +3080,7 @@ $LN6@JitEmitPre: 001bb 89 85 a4 00 00 00 mov DWORD PTR RipDelta$1[rbp], eax -; 318 : RipDelta += Delta; +; 316 : RipDelta += Delta; 001c1 8b 85 e0 02 00 00 mov eax, DWORD PTR Delta$[rbp] @@ -3174,7 +3091,7 @@ $LN6@JitEmitPre: 001d1 89 85 a4 00 00 00 mov DWORD PTR RipDelta$1[rbp], eax -; 319 : if (!JitiEmitWrapperD(OpType, Block, RipDelta, JitData->Data[FourByte - Count])) +; 317 : if (!JitiEmitWrapperD(OpType, Block, RipDelta, JitData->Data[FourByte - Count])) 001d7 8b 85 84 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -3194,13 +3111,13 @@ $LN6@JitEmitPre: 00207 85 c0 test eax, eax 00209 75 4a jne SHORT $LN7@JitEmitPre -; 320 : { -; 321 : NcDeleteBlock(Block); +; 318 : { +; 319 : NcDeleteBlock(Block); 0020b 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 0020f e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 322 : delete Block; +; 320 : delete Block; 00214 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 00218 48 89 85 28 02 @@ -3221,14 +3138,14 @@ $LN20@JitEmitPre: 00 mov QWORD PTR tv158[rbp], 0 $LN21@JitEmitPre: -; 323 : return NULL; +; 321 : return NULL; 0024e 33 c0 xor eax, eax 00250 e9 0d 02 00 00 jmp $LN1@JitEmitPre $LN7@JitEmitPre: -; 324 : } -; 325 : --Count; +; 322 : } +; 323 : --Count; 00255 8b 85 84 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -3236,32 +3153,32 @@ $LN7@JitEmitPre: 0025d 89 85 84 00 00 00 mov DWORD PTR Count$[rbp], eax -; 326 : } +; 324 : } 00263 e9 fc fe ff ff jmp $LN2@JitEmitPre $LN3@JitEmitPre: -; 327 : -; 328 : if (TwoByte) +; 325 : +; 326 : if (TwoByte) 00268 83 7d 24 00 cmp DWORD PTR TwoByte$[rbp], 0 0026c 0f 84 c1 00 00 00 je $LN8@JitEmitPre -; 329 : { -; 330 : INT32 RipDelta = (OneByte * BYTE_RIP_INST_LENGTH); +; 327 : { +; 328 : INT32 RipDelta = (OneByte * BYTE_RIP_INST_LENGTH); 00272 6b 45 44 07 imul eax, DWORD PTR OneByte$[rbp], 7 00276 89 85 c4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 331 : if (SaveFlags) +; 329 : if (SaveFlags) 0027c 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 00283 74 0e je SHORT $LN9@JitEmitPre -; 332 : RipDelta += 1; +; 330 : RipDelta += 1; 00285 8b 85 c4 00 00 00 mov eax, DWORD PTR RipDelta$2[rbp] @@ -3270,7 +3187,7 @@ $LN3@JitEmitPre: 00 mov DWORD PTR RipDelta$2[rbp], eax $LN9@JitEmitPre: -; 333 : RipDelta += (FourByte * 4); +; 331 : RipDelta += (FourByte * 4); 00293 8b 85 c4 00 00 00 mov eax, DWORD PTR RipDelta$2[rbp] @@ -3279,7 +3196,7 @@ $LN9@JitEmitPre: 0029f 89 85 c4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 334 : RipDelta += Delta; +; 332 : RipDelta += Delta; 002a5 8b 85 e0 02 00 00 mov eax, DWORD PTR Delta$[rbp] @@ -3290,7 +3207,7 @@ $LN9@JitEmitPre: 002b5 89 85 c4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 335 : if (!JitiEmitWrapperW(OpType, Block, RipDelta, JitData->Data[3])) +; 333 : if (!JitiEmitWrapperW(OpType, Block, RipDelta, JitData->Data[3])) 002bb b8 04 00 00 00 mov eax, 4 002c0 48 6b c0 03 imul rax, rax, 3 @@ -3306,13 +3223,13 @@ $LN9@JitEmitPre: 002e5 85 c0 test eax, eax 002e7 75 4a jne SHORT $LN8@JitEmitPre -; 336 : { -; 337 : NcDeleteBlock(Block); +; 334 : { +; 335 : NcDeleteBlock(Block); 002e9 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 002ed e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 338 : delete Block; +; 336 : delete Block; 002f2 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 002f6 48 89 85 48 02 @@ -3333,34 +3250,34 @@ $LN22@JitEmitPre: 00 mov QWORD PTR tv181[rbp], 0 $LN23@JitEmitPre: -; 339 : return NULL; +; 337 : return NULL; 0032c 33 c0 xor eax, eax 0032e e9 2f 01 00 00 jmp $LN1@JitEmitPre $LN8@JitEmitPre: -; 340 : } -; 341 : } -; 342 : -; 343 : if (OneByte) +; 338 : } +; 339 : } +; 340 : +; 341 : if (OneByte) 00333 83 7d 44 00 cmp DWORD PTR OneByte$[rbp], 0 00337 0f 84 c4 00 00 00 je $LN11@JitEmitPre -; 344 : { -; 345 : INT32 RipDelta = 0; +; 342 : { +; 343 : INT32 RipDelta = 0; 0033d c7 85 e4 00 00 00 00 00 00 00 mov DWORD PTR RipDelta$3[rbp], 0 -; 346 : if (SaveFlags) +; 344 : if (SaveFlags) 00347 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 0034e 74 0e je SHORT $LN12@JitEmitPre -; 347 : RipDelta += 1; +; 345 : RipDelta += 1; 00350 8b 85 e4 00 00 00 mov eax, DWORD PTR RipDelta$3[rbp] @@ -3369,7 +3286,7 @@ $LN8@JitEmitPre: 00 mov DWORD PTR RipDelta$3[rbp], eax $LN12@JitEmitPre: -; 348 : RipDelta += (FourByte * 4) + (TwoByte * 2); +; 346 : RipDelta += (FourByte * 4) + (TwoByte * 2); 0035e 8b 85 e4 00 00 00 mov eax, DWORD PTR RipDelta$3[rbp] @@ -3380,7 +3297,7 @@ $LN12@JitEmitPre: 00370 89 85 e4 00 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 349 : RipDelta += Delta; +; 347 : RipDelta += Delta; 00376 8b 85 e0 02 00 00 mov eax, DWORD PTR Delta$[rbp] @@ -3391,7 +3308,7 @@ $LN12@JitEmitPre: 00386 89 85 e4 00 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 350 : if (!JitiEmitWrapperB(OpType, Block, RipDelta, JitData->Data[4])) +; 348 : if (!JitiEmitWrapperB(OpType, Block, RipDelta, JitData->Data[4])) 0038c b8 04 00 00 00 mov eax, 4 00391 48 6b c0 04 imul rax, rax, 4 @@ -3407,13 +3324,13 @@ $LN12@JitEmitPre: 003b6 85 c0 test eax, eax 003b8 75 47 jne SHORT $LN11@JitEmitPre -; 351 : { -; 352 : NcDeleteBlock(Block); +; 349 : { +; 350 : NcDeleteBlock(Block); 003ba 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 003be e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 353 : delete Block; +; 351 : delete Block; 003c3 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 003c7 48 89 85 68 02 @@ -3434,16 +3351,16 @@ $LN24@JitEmitPre: 00 mov QWORD PTR tv204[rbp], 0 $LN25@JitEmitPre: -; 354 : return NULL; +; 352 : return NULL; 003fd 33 c0 xor eax, eax 003ff eb 61 jmp SHORT $LN1@JitEmitPre $LN11@JitEmitPre: -; 355 : } -; 356 : } -; 357 : -; 358 : if (SaveFlags && !JitEmitPopfqInst(Block)) +; 353 : } +; 354 : } +; 355 : +; 356 : if (SaveFlags && !JitEmitPopfqInst(Block)) 00401 83 bd d8 02 00 00 00 cmp DWORD PTR SaveFlags$[rbp], 0 @@ -3453,13 +3370,13 @@ $LN11@JitEmitPre: 00413 85 c0 test eax, eax 00415 75 47 jne SHORT $LN14@JitEmitPre -; 359 : { -; 360 : NcDeleteBlock(Block); +; 357 : { +; 358 : NcDeleteBlock(Block); 00417 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 0041b e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 361 : delete Block; +; 359 : delete Block; 00420 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 00424 48 89 85 88 02 @@ -3480,20 +3397,20 @@ $LN26@JitEmitPre: 00 mov QWORD PTR tv214[rbp], 0 $LN27@JitEmitPre: -; 362 : return NULL; +; 360 : return NULL; 0045a 33 c0 xor eax, eax 0045c eb 04 jmp SHORT $LN1@JitEmitPre $LN14@JitEmitPre: -; 363 : } -; 364 : -; 365 : return Block; +; 361 : } +; 362 : +; 363 : return Block; 0045e 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] $LN1@JitEmitPre: -; 366 : } +; 364 : } 00462 48 8d a5 a8 02 00 00 lea rsp, QWORD PTR [rbp+680] @@ -3615,8 +3532,8 @@ $T11 = 840 $T12 = 872 $T13 = 904 $T14 = 936 -tv209 = 952 -tv196 = 952 +tv210 = 952 +tv197 = 952 tv173 = 952 tv152 = 952 tv131 = 952 @@ -3626,7 +3543,7 @@ Link$ = 1008 Delta$ = 1016 ?JitEmitPostRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z PROC ; JitEmitPostRipMov, COMDAT -; 201 : { +; 199 : { $LN25: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx @@ -3651,7 +3568,7 @@ $LN25: 00 00 lea rcx, OFFSET FLAT:__DD050276_Jit@cpp 00046 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 202 : ULONG FourByte = Link->RawDataSize / 4; +; 200 : ULONG FourByte = Link->RawDataSize / 4; 0004b 33 d2 xor edx, edx 0004d 48 8b 85 f0 03 @@ -3661,7 +3578,7 @@ $LN25: 0005c f7 f1 div ecx 0005e 89 45 04 mov DWORD PTR FourByte$[rbp], eax -; 203 : ULONG TwoByte = (Link->RawDataSize - (FourByte * 4)) / 2; +; 201 : ULONG TwoByte = (Link->RawDataSize - (FourByte * 4)) / 2; 00061 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 00064 c1 e0 02 shl eax, 2 @@ -3675,7 +3592,7 @@ $LN25: 0007c f7 f1 div ecx 0007e 89 45 24 mov DWORD PTR TwoByte$[rbp], eax -; 204 : ULONG OneByte = (Link->RawDataSize - (FourByte * 4) - (TwoByte * 2)); +; 202 : ULONG OneByte = (Link->RawDataSize - (FourByte * 4) - (TwoByte * 2)); 00081 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 00084 c1 e0 02 shl eax, 2 @@ -3689,8 +3606,8 @@ $LN25: 0009a 2b c1 sub eax, ecx 0009c 89 45 44 mov DWORD PTR OneByte$[rbp], eax -; 205 : -; 206 : PNATIVE_CODE_BLOCK Block = new NATIVE_CODE_BLOCK; +; 203 : +; 204 : PNATIVE_CODE_BLOCK Block = new NATIVE_CODE_BLOCK; 0009f b9 30 00 00 00 mov ecx, 48 ; 00000030H 000a4 e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new @@ -3718,8 +3635,8 @@ $LN12@JitEmitPos: 00 00 mov rax, QWORD PTR $T7[rbp] 000ef 48 89 45 68 mov QWORD PTR Block$[rbp], rax -; 207 : -; 208 : Block->Start = Block->End = new NATIVE_CODE_LINK; +; 205 : +; 206 : Block->Start = Block->End = new NATIVE_CODE_LINK; 000f3 b9 f0 00 00 00 mov ecx, 240 ; 000000f0H 000f8 e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new @@ -3752,27 +3669,27 @@ $LN14@JitEmitPos: 00 00 mov rcx, QWORD PTR $T9[rbp] 00156 48 89 08 mov QWORD PTR [rax], rcx -; 209 : ULONG ZeroValue = 0; +; 207 : ULONG ZeroValue = 0; 00159 c7 85 84 00 00 00 00 00 00 00 mov DWORD PTR ZeroValue$[rbp], 0 -; 210 : ULONG Count = FourByte; +; 208 : ULONG Count = FourByte; 00163 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 00166 89 85 a4 00 00 00 mov DWORD PTR Count$[rbp], eax $LN2@JitEmitPos: -; 211 : while (Count) +; 209 : while (Count) 0016c 83 bd a4 00 00 00 00 cmp DWORD PTR Count$[rbp], 0 00173 0f 84 e0 00 00 00 je $LN3@JitEmitPos -; 212 : { -; 213 : INT32 RipDelta = Link->RawDataSize - ((FourByte - Count) * 4); +; 210 : { +; 211 : INT32 RipDelta = Link->RawDataSize - ((FourByte - Count) * 4); 00179 8b 85 a4 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -3788,7 +3705,7 @@ $LN2@JitEmitPos: 00197 89 85 c4 00 00 00 mov DWORD PTR RipDelta$4[rbp], eax -; 214 : RipDelta += (FourByte - (Count - 1)) * DWORD_MOV_INST_LENGTH; +; 212 : RipDelta += (FourByte - (Count - 1)) * DWORD_MOV_INST_LENGTH; 0019d 8b 85 a4 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -3804,14 +3721,14 @@ $LN2@JitEmitPos: 001b9 89 85 c4 00 00 00 mov DWORD PTR RipDelta$4[rbp], eax -; 215 : RipDelta *= (-1); +; 213 : RipDelta *= (-1); 001bf 6b 85 c4 00 00 00 ff imul eax, DWORD PTR RipDelta$4[rbp], -1 001c6 89 85 c4 00 00 00 mov DWORD PTR RipDelta$4[rbp], eax -; 216 : RipDelta += Delta; +; 214 : RipDelta += Delta; 001cc 8b 85 f8 03 00 00 mov eax, DWORD PTR Delta$[rbp] @@ -3822,7 +3739,7 @@ $LN2@JitEmitPos: 001dc 89 85 c4 00 00 00 mov DWORD PTR RipDelta$4[rbp], eax -; 217 : if (!JitEmitRipRelativeMovD(Block, RipDelta, (PUCHAR)&ZeroValue)) +; 215 : if (!JitEmitRipRelativeMovD(Block, RipDelta, (PUCHAR)&ZeroValue)) 001e2 4c 8d 85 84 00 00 00 lea r8, QWORD PTR ZeroValue$[rbp] @@ -3833,13 +3750,13 @@ $LN2@JitEmitPos: 001f8 85 c0 test eax, eax 001fa 75 4a jne SHORT $LN4@JitEmitPos -; 218 : { -; 219 : NcDeleteBlock(Block); +; 216 : { +; 217 : NcDeleteBlock(Block); 001fc 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 00200 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 220 : delete Block; +; 218 : delete Block; 00205 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 00209 48 89 85 48 03 @@ -3860,14 +3777,14 @@ $LN15@JitEmitPos: 00 mov QWORD PTR tv152[rbp], 0 $LN16@JitEmitPos: -; 221 : return NULL; +; 219 : return NULL; 0023f 33 c0 xor eax, eax - 00241 e9 3b 02 00 00 jmp $LN1@JitEmitPos + 00241 e9 40 02 00 00 jmp $LN1@JitEmitPos $LN4@JitEmitPos: -; 222 : } -; 223 : --Count; +; 220 : } +; 221 : --Count; 00246 8b 85 a4 00 00 00 mov eax, DWORD PTR Count$[rbp] @@ -3875,20 +3792,20 @@ $LN4@JitEmitPos: 0024e 89 85 a4 00 00 00 mov DWORD PTR Count$[rbp], eax -; 224 : } +; 222 : } 00254 e9 13 ff ff ff jmp $LN2@JitEmitPos $LN3@JitEmitPos: -; 225 : -; 226 : if (TwoByte) +; 223 : +; 224 : if (TwoByte) 00259 83 7d 24 00 cmp DWORD PTR TwoByte$[rbp], 0 0025d 0f 84 c4 00 00 00 je $LN5@JitEmitPos -; 227 : { -; 228 : INT32 RipDelta = Link->RawDataSize - (FourByte * 4); +; 225 : { +; 226 : INT32 RipDelta = Link->RawDataSize - (FourByte * 4); 00263 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 00266 c1 e0 02 shl eax, 2 @@ -3900,7 +3817,7 @@ $LN3@JitEmitPos: 00277 89 85 e4 00 00 00 mov DWORD PTR RipDelta$5[rbp], eax -; 229 : RipDelta += (FourByte * DWORD_MOV_INST_LENGTH); +; 227 : RipDelta += (FourByte * DWORD_MOV_INST_LENGTH); 0027d 6b 45 04 0a imul eax, DWORD PTR FourByte$[rbp], 10 00281 8b 8d e4 00 00 @@ -3910,7 +3827,7 @@ $LN3@JitEmitPos: 0028b 89 85 e4 00 00 00 mov DWORD PTR RipDelta$5[rbp], eax -; 230 : RipDelta += WORD_MOV_INST_LENGTH; +; 228 : RipDelta += WORD_MOV_INST_LENGTH; 00291 8b 85 e4 00 00 00 mov eax, DWORD PTR RipDelta$5[rbp] @@ -3918,14 +3835,14 @@ $LN3@JitEmitPos: 0029a 89 85 e4 00 00 00 mov DWORD PTR RipDelta$5[rbp], eax -; 231 : RipDelta *= (-1); +; 229 : RipDelta *= (-1); 002a0 6b 85 e4 00 00 00 ff imul eax, DWORD PTR RipDelta$5[rbp], -1 002a7 89 85 e4 00 00 00 mov DWORD PTR RipDelta$5[rbp], eax -; 232 : RipDelta += Delta; +; 230 : RipDelta += Delta; 002ad 8b 85 f8 03 00 00 mov eax, DWORD PTR Delta$[rbp] @@ -3936,7 +3853,7 @@ $LN3@JitEmitPos: 002bd 89 85 e4 00 00 00 mov DWORD PTR RipDelta$5[rbp], eax -; 233 : if (!JitEmitRipRelativeMovW(Block, RipDelta, (PUCHAR)&ZeroValue)) +; 231 : if (!JitEmitRipRelativeMovW(Block, RipDelta, (PUCHAR)&ZeroValue)) 002c3 4c 8d 85 84 00 00 00 lea r8, QWORD PTR ZeroValue$[rbp] @@ -3947,13 +3864,13 @@ $LN3@JitEmitPos: 002d9 85 c0 test eax, eax 002db 75 4a jne SHORT $LN5@JitEmitPos -; 234 : { -; 235 : NcDeleteBlock(Block); +; 232 : { +; 233 : NcDeleteBlock(Block); 002dd 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] 002e1 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 236 : delete Block; +; 234 : delete Block; 002e6 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] 002ea 48 89 85 68 03 @@ -3974,23 +3891,23 @@ $LN17@JitEmitPos: 00 mov QWORD PTR tv173[rbp], 0 $LN18@JitEmitPos: -; 237 : return NULL; +; 235 : return NULL; 00320 33 c0 xor eax, eax - 00322 e9 5a 01 00 00 jmp $LN1@JitEmitPos + 00322 e9 5f 01 00 00 jmp $LN1@JitEmitPos $LN5@JitEmitPos: -; 238 : } -; 239 : } -; 240 : -; 241 : if (OneByte) +; 236 : } +; 237 : } +; 238 : +; 239 : if (OneByte) 00327 83 7d 44 00 cmp DWORD PTR OneByte$[rbp], 0 - 0032b 0f 84 d7 00 00 + 0032b 0f 84 dc 00 00 00 je $LN7@JitEmitPos -; 242 : { -; 243 : INT32 RipDelta = Link->RawDataSize - (FourByte * 4) - (TwoByte * 2); +; 240 : { +; 241 : INT32 RipDelta = Link->RawDataSize - (FourByte * 4) - (TwoByte * 2); 00331 8b 45 04 mov eax, DWORD PTR FourByte$[rbp] 00334 c1 e0 02 shl eax, 2 @@ -4005,7 +3922,7 @@ $LN5@JitEmitPos: 0034c 89 85 04 01 00 00 mov DWORD PTR RipDelta$6[rbp], eax -; 244 : RipDelta += (FourByte * DWORD_MOV_INST_LENGTH); +; 242 : RipDelta += (FourByte * DWORD_MOV_INST_LENGTH); 00352 6b 45 04 0a imul eax, DWORD PTR FourByte$[rbp], 10 00356 8b 8d 04 01 00 @@ -4015,161 +3932,163 @@ $LN5@JitEmitPos: 00360 89 85 04 01 00 00 mov DWORD PTR RipDelta$6[rbp], eax -; 245 : RipDelta += WORD_MOV_INST_LENGTH; +; 243 : RipDelta += (TwoByte * WORD_MOV_INST_LENGTH); - 00366 8b 85 04 01 00 - 00 mov eax, DWORD PTR RipDelta$6[rbp] - 0036c 83 c0 09 add eax, 9 - 0036f 89 85 04 01 00 + 00366 6b 45 24 09 imul eax, DWORD PTR TwoByte$[rbp], 9 + 0036a 8b 8d 04 01 00 + 00 mov ecx, DWORD PTR RipDelta$6[rbp] + 00370 03 c8 add ecx, eax + 00372 8b c1 mov eax, ecx + 00374 89 85 04 01 00 00 mov DWORD PTR RipDelta$6[rbp], eax -; 246 : RipDelta += BYTE_MOV_INST_LENGTH; +; 244 : RipDelta += BYTE_MOV_INST_LENGTH; - 00375 8b 85 04 01 00 + 0037a 8b 85 04 01 00 00 mov eax, DWORD PTR RipDelta$6[rbp] - 0037b 83 c0 07 add eax, 7 - 0037e 89 85 04 01 00 + 00380 83 c0 07 add eax, 7 + 00383 89 85 04 01 00 00 mov DWORD PTR RipDelta$6[rbp], eax -; 247 : RipDelta *= (-1); +; 245 : RipDelta *= (-1); - 00384 6b 85 04 01 00 + 00389 6b 85 04 01 00 00 ff imul eax, DWORD PTR RipDelta$6[rbp], -1 - 0038b 89 85 04 01 00 + 00390 89 85 04 01 00 00 mov DWORD PTR RipDelta$6[rbp], eax -; 248 : RipDelta += Delta; +; 246 : RipDelta += Delta; - 00391 8b 85 f8 03 00 + 00396 8b 85 f8 03 00 00 mov eax, DWORD PTR Delta$[rbp] - 00397 8b 8d 04 01 00 + 0039c 8b 8d 04 01 00 00 mov ecx, DWORD PTR RipDelta$6[rbp] - 0039d 03 c8 add ecx, eax - 0039f 8b c1 mov eax, ecx - 003a1 89 85 04 01 00 + 003a2 03 c8 add ecx, eax + 003a4 8b c1 mov eax, ecx + 003a6 89 85 04 01 00 00 mov DWORD PTR RipDelta$6[rbp], eax -; 249 : if (!JitEmitRipRelativeMovB(Block, RipDelta, (PUCHAR)&ZeroValue)) +; 247 : if (!JitEmitRipRelativeMovB(Block, RipDelta, (PUCHAR)&ZeroValue)) - 003a7 4c 8d 85 84 00 + 003ac 4c 8d 85 84 00 00 00 lea r8, QWORD PTR ZeroValue$[rbp] - 003ae 8b 95 04 01 00 + 003b3 8b 95 04 01 00 00 mov edx, DWORD PTR RipDelta$6[rbp] - 003b4 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 003b8 e8 00 00 00 00 call ?JitEmitRipRelativeMovB@@YAHPEAU_NATIVE_CODE_BLOCK@@HPEAE@Z ; JitEmitRipRelativeMovB - 003bd 85 c0 test eax, eax - 003bf 75 47 jne SHORT $LN7@JitEmitPos + 003b9 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 003bd e8 00 00 00 00 call ?JitEmitRipRelativeMovB@@YAHPEAU_NATIVE_CODE_BLOCK@@HPEAE@Z ; JitEmitRipRelativeMovB + 003c2 85 c0 test eax, eax + 003c4 75 47 jne SHORT $LN7@JitEmitPos -; 250 : { -; 251 : NcDeleteBlock(Block); +; 248 : { +; 249 : NcDeleteBlock(Block); - 003c1 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 003c5 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock + 003c6 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 003ca e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 252 : delete Block; +; 250 : delete Block; - 003ca 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 003ce 48 89 85 88 03 + 003cf 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 003d3 48 89 85 88 03 00 00 mov QWORD PTR $T13[rbp], rax - 003d5 48 83 bd 88 03 + 003da 48 83 bd 88 03 00 00 00 cmp QWORD PTR $T13[rbp], 0 - 003dd 74 1a je SHORT $LN19@JitEmitPos - 003df ba 01 00 00 00 mov edx, 1 - 003e4 48 8b 8d 88 03 + 003e2 74 1a je SHORT $LN19@JitEmitPos + 003e4 ba 01 00 00 00 mov edx, 1 + 003e9 48 8b 8d 88 03 00 00 mov rcx, QWORD PTR $T13[rbp] - 003eb e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z - 003f0 48 89 85 b8 03 - 00 00 mov QWORD PTR tv196[rbp], rax - 003f7 eb 0b jmp SHORT $LN20@JitEmitPos + 003f0 e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z + 003f5 48 89 85 b8 03 + 00 00 mov QWORD PTR tv197[rbp], rax + 003fc eb 0b jmp SHORT $LN20@JitEmitPos $LN19@JitEmitPos: - 003f9 48 c7 85 b8 03 + 003fe 48 c7 85 b8 03 00 00 00 00 00 - 00 mov QWORD PTR tv196[rbp], 0 + 00 mov QWORD PTR tv197[rbp], 0 $LN20@JitEmitPos: -; 253 : return NULL; +; 251 : return NULL; - 00404 33 c0 xor eax, eax - 00406 eb 79 jmp SHORT $LN1@JitEmitPos + 00409 33 c0 xor eax, eax + 0040b eb 79 jmp SHORT $LN1@JitEmitPos $LN7@JitEmitPos: -; 254 : } -; 255 : } -; 256 : -; 257 : PNATIVE_CODE_LINK StartLink = Block->Start; +; 252 : } +; 253 : } +; 254 : +; 255 : PNATIVE_CODE_LINK StartLink = Block->Start; - 00408 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 0040c 48 8b 00 mov rax, QWORD PTR [rax] - 0040f 48 89 85 28 01 + 0040d 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 00411 48 8b 00 mov rax, QWORD PTR [rax] + 00414 48 89 85 28 01 00 00 mov QWORD PTR StartLink$[rbp], rax -; 258 : Block->Start = Block->Start->Next; +; 256 : Block->Start = Block->Start->Next; - 00416 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 0041a 48 8b 00 mov rax, QWORD PTR [rax] - 0041d 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 00421 48 8b 00 mov rax, QWORD PTR [rax] - 00424 48 89 01 mov QWORD PTR [rcx], rax + 0041b 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 0041f 48 8b 00 mov rax, QWORD PTR [rax] + 00422 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 00426 48 8b 00 mov rax, QWORD PTR [rax] + 00429 48 89 01 mov QWORD PTR [rcx], rax -; 259 : if (Block->Start) +; 257 : if (Block->Start) - 00427 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 0042b 48 83 38 00 cmp QWORD PTR [rax], 0 - 0042f 74 0f je SHORT $LN9@JitEmitPos + 0042c 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 00430 48 83 38 00 cmp QWORD PTR [rax], 0 + 00434 74 0f je SHORT $LN9@JitEmitPos -; 260 : Block->Start->Prev = NULL; +; 258 : Block->Start->Prev = NULL; - 00431 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 00435 48 8b 00 mov rax, QWORD PTR [rax] - 00438 48 c7 40 08 00 + 00436 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 0043a 48 8b 00 mov rax, QWORD PTR [rax] + 0043d 48 c7 40 08 00 00 00 00 mov QWORD PTR [rax+8], 0 $LN9@JitEmitPos: -; 261 : delete StartLink; +; 259 : delete StartLink; - 00440 48 8b 85 28 01 + 00445 48 8b 85 28 01 00 00 mov rax, QWORD PTR StartLink$[rbp] - 00447 48 89 85 a8 03 + 0044c 48 89 85 a8 03 00 00 mov QWORD PTR $T14[rbp], rax - 0044e 48 83 bd a8 03 + 00453 48 83 bd a8 03 00 00 00 cmp QWORD PTR $T14[rbp], 0 - 00456 74 1a je SHORT $LN21@JitEmitPos - 00458 ba 01 00 00 00 mov edx, 1 - 0045d 48 8b 8d a8 03 + 0045b 74 1a je SHORT $LN21@JitEmitPos + 0045d ba 01 00 00 00 mov edx, 1 + 00462 48 8b 8d a8 03 00 00 mov rcx, QWORD PTR $T14[rbp] - 00464 e8 00 00 00 00 call ??_G_NATIVE_CODE_LINK@@QEAAPEAXI@Z - 00469 48 89 85 b8 03 - 00 00 mov QWORD PTR tv209[rbp], rax - 00470 eb 0b jmp SHORT $LN22@JitEmitPos + 00469 e8 00 00 00 00 call ??_G_NATIVE_CODE_LINK@@QEAAPEAXI@Z + 0046e 48 89 85 b8 03 + 00 00 mov QWORD PTR tv210[rbp], rax + 00475 eb 0b jmp SHORT $LN22@JitEmitPos $LN21@JitEmitPos: - 00472 48 c7 85 b8 03 + 00477 48 c7 85 b8 03 00 00 00 00 00 - 00 mov QWORD PTR tv209[rbp], 0 + 00 mov QWORD PTR tv210[rbp], 0 $LN22@JitEmitPos: -; 262 : -; 263 : return Block; +; 260 : +; 261 : return Block; - 0047d 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 00482 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] $LN1@JitEmitPos: -; 264 : } +; 262 : } - 00481 48 8b f8 mov rdi, rax - 00484 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] - 00488 48 8d 15 00 00 + 00486 48 8b f8 mov rdi, rax + 00489 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] + 0048d 48 8d 15 00 00 00 00 lea rdx, OFFSET FLAT:?JitEmitPostRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z$rtcFrameData - 0048f e8 00 00 00 00 call _RTC_CheckStackVars - 00494 48 8b c7 mov rax, rdi - 00497 48 8b 8d c0 03 + 00494 e8 00 00 00 00 call _RTC_CheckStackVars + 00499 48 8b c7 mov rax, rdi + 0049c 48 8b 8d c0 03 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] - 0049e 48 33 cd xor rcx, rbp - 004a1 e8 00 00 00 00 call __security_check_cookie - 004a6 48 8d a5 d8 03 + 004a3 48 33 cd xor rcx, rbp + 004a6 e8 00 00 00 00 call __security_check_cookie + 004ab 48 8d a5 d8 03 00 00 lea rsp, QWORD PTR [rbp+984] - 004ad 5f pop rdi - 004ae 5d pop rbp - 004af c3 ret 0 + 004b2 5f pop rdi + 004b3 5d pop rbp + 004b4 c3 ret 0 ?JitEmitPostRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z ENDP ; JitEmitPostRipMov _TEXT ENDS ; COMDAT text$x @@ -4192,8 +4111,8 @@ $T11 = 840 $T12 = 872 $T13 = 904 $T14 = 936 -tv209 = 952 -tv196 = 952 +tv210 = 952 +tv197 = 952 tv173 = 952 tv152 = 952 tv131 = 952 @@ -4238,8 +4157,8 @@ $T11 = 840 $T12 = 872 $T13 = 904 $T14 = 936 -tv209 = 952 -tv196 = 952 +tv210 = 952 +tv197 = 952 tv173 = 952 tv152 = 952 tv131 = 952 @@ -4285,8 +4204,8 @@ $T11 = 840 $T12 = 872 $T13 = 904 $T14 = 936 -tv209 = 952 -tv196 = 952 +tv210 = 952 +tv197 = 952 tv173 = 952 tv152 = 952 tv131 = 952 @@ -4332,8 +4251,8 @@ $T11 = 840 $T12 = 872 $T13 = 904 $T14 = 936 -tv209 = 952 -tv196 = 952 +tv210 = 952 +tv197 = 952 tv173 = 952 tv152 = 952 tv131 = 952 @@ -4380,10 +4299,10 @@ $T8 = 840 $T9 = 872 $T10 = 904 $T11 = 936 -tv205 = 952 -tv192 = 952 -tv174 = 952 -tv156 = 952 +tv202 = 952 +tv189 = 952 +tv171 = 952 +tv153 = 952 tv131 = 952 tv86 = 952 Link$ = 992 @@ -4530,7 +4449,7 @@ $LN2@JitEmitPre: 00163 83 bd a4 00 00 00 00 cmp DWORD PTR Count$[rbp], 0 - 0016a 0f 84 f8 00 00 + 0016a 0f 84 d8 00 00 00 je $LN3@JitEmitPre ; 145 : { @@ -4574,322 +4493,307 @@ $LN2@JitEmitPre: 00 mov DWORD PTR RipDelta$1[rbp], eax ; 151 : //Add the actual instruction -; 152 : printf("%p IS THE DATAOFFSET\n", DataOffset); - - 001bf 48 8b 95 88 00 - 00 00 mov rdx, QWORD PTR DataOffset$[rbp] - 001c6 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_0BG@BLDOCDOA@?$CFp?5IS?5THE?5DATAOFFSET?6@ - 001cd e8 00 00 00 00 call printf - -; 153 : system("pause"); - - 001d2 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_05PDJBBECF@pause@ - 001d9 ff 15 00 00 00 - 00 call QWORD PTR __imp_system - -; 154 : if (!JitEmitRipRelativeMovD(Block, RipDelta, DataOffset)) +; 152 : if (!JitEmitRipRelativeMovD(Block, RipDelta, DataOffset)) - 001df 4c 8b 85 88 00 + 001bf 4c 8b 85 88 00 00 00 mov r8, QWORD PTR DataOffset$[rbp] - 001e6 8b 95 c4 00 00 + 001c6 8b 95 c4 00 00 00 mov edx, DWORD PTR RipDelta$1[rbp] - 001ec 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 001f0 e8 00 00 00 00 call ?JitEmitRipRelativeMovD@@YAHPEAU_NATIVE_CODE_BLOCK@@HPEAE@Z ; JitEmitRipRelativeMovD - 001f5 85 c0 test eax, eax - 001f7 75 4a jne SHORT $LN4@JitEmitPre + 001cc 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 001d0 e8 00 00 00 00 call ?JitEmitRipRelativeMovD@@YAHPEAU_NATIVE_CODE_BLOCK@@HPEAE@Z ; JitEmitRipRelativeMovD + 001d5 85 c0 test eax, eax + 001d7 75 4a jne SHORT $LN4@JitEmitPre -; 155 : { -; 156 : NcDeleteBlock(Block); +; 153 : { +; 154 : NcDeleteBlock(Block); - 001f9 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 001fd e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock + 001d9 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 001dd e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 157 : delete Block; +; 155 : delete Block; - 00202 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 00206 48 89 85 48 03 + 001e2 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 001e6 48 89 85 48 03 00 00 mov QWORD PTR $T8[rbp], rax - 0020d 48 83 bd 48 03 + 001ed 48 83 bd 48 03 00 00 00 cmp QWORD PTR $T8[rbp], 0 - 00215 74 1a je SHORT $LN15@JitEmitPre - 00217 ba 01 00 00 00 mov edx, 1 - 0021c 48 8b 8d 48 03 + 001f5 74 1a je SHORT $LN15@JitEmitPre + 001f7 ba 01 00 00 00 mov edx, 1 + 001fc 48 8b 8d 48 03 00 00 mov rcx, QWORD PTR $T8[rbp] - 00223 e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z - 00228 48 89 85 b8 03 - 00 00 mov QWORD PTR tv156[rbp], rax - 0022f eb 0b jmp SHORT $LN16@JitEmitPre + 00203 e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z + 00208 48 89 85 b8 03 + 00 00 mov QWORD PTR tv153[rbp], rax + 0020f eb 0b jmp SHORT $LN16@JitEmitPre $LN15@JitEmitPre: - 00231 48 c7 85 b8 03 + 00211 48 c7 85 b8 03 00 00 00 00 00 - 00 mov QWORD PTR tv156[rbp], 0 + 00 mov QWORD PTR tv153[rbp], 0 $LN16@JitEmitPre: -; 158 : return NULL; +; 156 : return NULL; - 0023c 33 c0 xor eax, eax - 0023e e9 f3 01 00 00 jmp $LN1@JitEmitPre + 0021c 33 c0 xor eax, eax + 0021e e9 f3 01 00 00 jmp $LN1@JitEmitPre $LN4@JitEmitPre: -; 159 : } -; 160 : DataOffset += 4; +; 157 : } +; 158 : DataOffset += 4; - 00243 48 8b 85 88 00 + 00223 48 8b 85 88 00 00 00 mov rax, QWORD PTR DataOffset$[rbp] - 0024a 48 83 c0 04 add rax, 4 - 0024e 48 89 85 88 00 + 0022a 48 83 c0 04 add rax, 4 + 0022e 48 89 85 88 00 00 00 mov QWORD PTR DataOffset$[rbp], rax -; 161 : --Count; +; 159 : --Count; - 00255 8b 85 a4 00 00 + 00235 8b 85 a4 00 00 00 mov eax, DWORD PTR Count$[rbp] - 0025b ff c8 dec eax - 0025d 89 85 a4 00 00 + 0023b ff c8 dec eax + 0023d 89 85 a4 00 00 00 mov DWORD PTR Count$[rbp], eax -; 162 : } +; 160 : } - 00263 e9 fb fe ff ff jmp $LN2@JitEmitPre + 00243 e9 1b ff ff ff jmp $LN2@JitEmitPre $LN3@JitEmitPre: -; 163 : -; 164 : if (TwoByte) +; 161 : +; 162 : if (TwoByte) - 00268 83 7d 24 00 cmp DWORD PTR TwoByte$[rbp], 0 - 0026c 0f 84 a8 00 00 + 00248 83 7d 24 00 cmp DWORD PTR TwoByte$[rbp], 0 + 0024c 0f 84 a8 00 00 00 je $LN5@JitEmitPre -; 165 : { -; 166 : INT32 RipDelta = (OneByte * BYTE_MOV_INST_LENGTH); +; 163 : { +; 164 : INT32 RipDelta = (OneByte * BYTE_MOV_INST_LENGTH); - 00272 6b 45 44 07 imul eax, DWORD PTR OneByte$[rbp], 7 - 00276 89 85 e4 00 00 + 00252 6b 45 44 07 imul eax, DWORD PTR OneByte$[rbp], 7 + 00256 89 85 e4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 167 : RipDelta += (FourByte * 4); +; 165 : RipDelta += (FourByte * 4); - 0027c 8b 85 e4 00 00 + 0025c 8b 85 e4 00 00 00 mov eax, DWORD PTR RipDelta$2[rbp] - 00282 8b 4d 04 mov ecx, DWORD PTR FourByte$[rbp] - 00285 8d 04 88 lea eax, DWORD PTR [rax+rcx*4] - 00288 89 85 e4 00 00 + 00262 8b 4d 04 mov ecx, DWORD PTR FourByte$[rbp] + 00265 8d 04 88 lea eax, DWORD PTR [rax+rcx*4] + 00268 89 85 e4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 168 : RipDelta += Delta; +; 166 : RipDelta += Delta; - 0028e 8b 85 e8 03 00 + 0026e 8b 85 e8 03 00 00 mov eax, DWORD PTR Delta$[rbp] - 00294 8b 8d e4 00 00 + 00274 8b 8d e4 00 00 00 mov ecx, DWORD PTR RipDelta$2[rbp] - 0029a 03 c8 add ecx, eax - 0029c 8b c1 mov eax, ecx - 0029e 89 85 e4 00 00 + 0027a 03 c8 add ecx, eax + 0027c 8b c1 mov eax, ecx + 0027e 89 85 e4 00 00 00 mov DWORD PTR RipDelta$2[rbp], eax -; 169 : if (!JitEmitRipRelativeMovW(Block, RipDelta, DataOffset)) +; 167 : if (!JitEmitRipRelativeMovW(Block, RipDelta, DataOffset)) - 002a4 4c 8b 85 88 00 + 00284 4c 8b 85 88 00 00 00 mov r8, QWORD PTR DataOffset$[rbp] - 002ab 8b 95 e4 00 00 + 0028b 8b 95 e4 00 00 00 mov edx, DWORD PTR RipDelta$2[rbp] - 002b1 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 002b5 e8 00 00 00 00 call ?JitEmitRipRelativeMovW@@YAHPEAU_NATIVE_CODE_BLOCK@@HPEAE@Z ; JitEmitRipRelativeMovW - 002ba 85 c0 test eax, eax - 002bc 75 4a jne SHORT $LN6@JitEmitPre + 00291 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 00295 e8 00 00 00 00 call ?JitEmitRipRelativeMovW@@YAHPEAU_NATIVE_CODE_BLOCK@@HPEAE@Z ; JitEmitRipRelativeMovW + 0029a 85 c0 test eax, eax + 0029c 75 4a jne SHORT $LN6@JitEmitPre -; 170 : { -; 171 : NcDeleteBlock(Block); +; 168 : { +; 169 : NcDeleteBlock(Block); - 002be 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 002c2 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock + 0029e 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 002a2 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 172 : delete Block; +; 170 : delete Block; - 002c7 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 002cb 48 89 85 68 03 + 002a7 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 002ab 48 89 85 68 03 00 00 mov QWORD PTR $T9[rbp], rax - 002d2 48 83 bd 68 03 + 002b2 48 83 bd 68 03 00 00 00 cmp QWORD PTR $T9[rbp], 0 - 002da 74 1a je SHORT $LN17@JitEmitPre - 002dc ba 01 00 00 00 mov edx, 1 - 002e1 48 8b 8d 68 03 + 002ba 74 1a je SHORT $LN17@JitEmitPre + 002bc ba 01 00 00 00 mov edx, 1 + 002c1 48 8b 8d 68 03 00 00 mov rcx, QWORD PTR $T9[rbp] - 002e8 e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z - 002ed 48 89 85 b8 03 - 00 00 mov QWORD PTR tv174[rbp], rax - 002f4 eb 0b jmp SHORT $LN18@JitEmitPre + 002c8 e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z + 002cd 48 89 85 b8 03 + 00 00 mov QWORD PTR tv171[rbp], rax + 002d4 eb 0b jmp SHORT $LN18@JitEmitPre $LN17@JitEmitPre: - 002f6 48 c7 85 b8 03 + 002d6 48 c7 85 b8 03 00 00 00 00 00 - 00 mov QWORD PTR tv174[rbp], 0 + 00 mov QWORD PTR tv171[rbp], 0 $LN18@JitEmitPre: -; 173 : return NULL; +; 171 : return NULL; - 00301 33 c0 xor eax, eax - 00303 e9 2e 01 00 00 jmp $LN1@JitEmitPre + 002e1 33 c0 xor eax, eax + 002e3 e9 2e 01 00 00 jmp $LN1@JitEmitPre $LN6@JitEmitPre: -; 174 : } -; 175 : DataOffset += 2; +; 172 : } +; 173 : DataOffset += 2; - 00308 48 8b 85 88 00 + 002e8 48 8b 85 88 00 00 00 mov rax, QWORD PTR DataOffset$[rbp] - 0030f 48 83 c0 02 add rax, 2 - 00313 48 89 85 88 00 + 002ef 48 83 c0 02 add rax, 2 + 002f3 48 89 85 88 00 00 00 mov QWORD PTR DataOffset$[rbp], rax $LN5@JitEmitPre: -; 176 : } -; 177 : -; 178 : if (OneByte) +; 174 : } +; 175 : +; 176 : if (OneByte) - 0031a 83 7d 44 00 cmp DWORD PTR OneByte$[rbp], 0 - 0031e 0f 84 99 00 00 + 002fa 83 7d 44 00 cmp DWORD PTR OneByte$[rbp], 0 + 002fe 0f 84 99 00 00 00 je $LN7@JitEmitPre -; 179 : { -; 180 : INT32 RipDelta = 0; +; 177 : { +; 178 : INT32 RipDelta = 0; - 00324 c7 85 04 01 00 + 00304 c7 85 04 01 00 00 00 00 00 00 mov DWORD PTR RipDelta$3[rbp], 0 -; 181 : RipDelta += (FourByte * 4) + (TwoByte * 2); +; 179 : RipDelta += (FourByte * 4) + (TwoByte * 2); - 0032e 8b 85 04 01 00 + 0030e 8b 85 04 01 00 00 mov eax, DWORD PTR RipDelta$3[rbp] - 00334 8b 4d 04 mov ecx, DWORD PTR FourByte$[rbp] - 00337 8d 04 88 lea eax, DWORD PTR [rax+rcx*4] - 0033a 8b 4d 24 mov ecx, DWORD PTR TwoByte$[rbp] - 0033d 8d 04 48 lea eax, DWORD PTR [rax+rcx*2] - 00340 89 85 04 01 00 + 00314 8b 4d 04 mov ecx, DWORD PTR FourByte$[rbp] + 00317 8d 04 88 lea eax, DWORD PTR [rax+rcx*4] + 0031a 8b 4d 24 mov ecx, DWORD PTR TwoByte$[rbp] + 0031d 8d 04 48 lea eax, DWORD PTR [rax+rcx*2] + 00320 89 85 04 01 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 182 : RipDelta += Delta; +; 180 : RipDelta += Delta; - 00346 8b 85 e8 03 00 + 00326 8b 85 e8 03 00 00 mov eax, DWORD PTR Delta$[rbp] - 0034c 8b 8d 04 01 00 + 0032c 8b 8d 04 01 00 00 mov ecx, DWORD PTR RipDelta$3[rbp] - 00352 03 c8 add ecx, eax - 00354 8b c1 mov eax, ecx - 00356 89 85 04 01 00 + 00332 03 c8 add ecx, eax + 00334 8b c1 mov eax, ecx + 00336 89 85 04 01 00 00 mov DWORD PTR RipDelta$3[rbp], eax -; 183 : if (!JitEmitRipRelativeMovB(Block, RipDelta, DataOffset)) +; 181 : if (!JitEmitRipRelativeMovB(Block, RipDelta, DataOffset)) - 0035c 4c 8b 85 88 00 + 0033c 4c 8b 85 88 00 00 00 mov r8, QWORD PTR DataOffset$[rbp] - 00363 8b 95 04 01 00 + 00343 8b 95 04 01 00 00 mov edx, DWORD PTR RipDelta$3[rbp] - 00369 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 0036d e8 00 00 00 00 call ?JitEmitRipRelativeMovB@@YAHPEAU_NATIVE_CODE_BLOCK@@HPEAE@Z ; JitEmitRipRelativeMovB - 00372 85 c0 test eax, eax - 00374 75 47 jne SHORT $LN7@JitEmitPre + 00349 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 0034d e8 00 00 00 00 call ?JitEmitRipRelativeMovB@@YAHPEAU_NATIVE_CODE_BLOCK@@HPEAE@Z ; JitEmitRipRelativeMovB + 00352 85 c0 test eax, eax + 00354 75 47 jne SHORT $LN7@JitEmitPre -; 184 : { -; 185 : NcDeleteBlock(Block); +; 182 : { +; 183 : NcDeleteBlock(Block); - 00376 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 0037a e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock + 00356 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 0035a e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 186 : delete Block; +; 184 : delete Block; - 0037f 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 00383 48 89 85 88 03 + 0035f 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 00363 48 89 85 88 03 00 00 mov QWORD PTR $T10[rbp], rax - 0038a 48 83 bd 88 03 + 0036a 48 83 bd 88 03 00 00 00 cmp QWORD PTR $T10[rbp], 0 - 00392 74 1a je SHORT $LN19@JitEmitPre - 00394 ba 01 00 00 00 mov edx, 1 - 00399 48 8b 8d 88 03 + 00372 74 1a je SHORT $LN19@JitEmitPre + 00374 ba 01 00 00 00 mov edx, 1 + 00379 48 8b 8d 88 03 00 00 mov rcx, QWORD PTR $T10[rbp] - 003a0 e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z - 003a5 48 89 85 b8 03 - 00 00 mov QWORD PTR tv192[rbp], rax - 003ac eb 0b jmp SHORT $LN20@JitEmitPre + 00380 e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z + 00385 48 89 85 b8 03 + 00 00 mov QWORD PTR tv189[rbp], rax + 0038c eb 0b jmp SHORT $LN20@JitEmitPre $LN19@JitEmitPre: - 003ae 48 c7 85 b8 03 + 0038e 48 c7 85 b8 03 00 00 00 00 00 - 00 mov QWORD PTR tv192[rbp], 0 + 00 mov QWORD PTR tv189[rbp], 0 $LN20@JitEmitPre: -; 187 : return NULL; +; 185 : return NULL; - 003b9 33 c0 xor eax, eax - 003bb eb 79 jmp SHORT $LN1@JitEmitPre + 00399 33 c0 xor eax, eax + 0039b eb 79 jmp SHORT $LN1@JitEmitPre $LN7@JitEmitPre: -; 188 : } -; 189 : } -; 190 : -; 191 : PNATIVE_CODE_LINK StartLink = Block->Start; +; 186 : } +; 187 : } +; 188 : +; 189 : PNATIVE_CODE_LINK StartLink = Block->Start; - 003bd 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 003c1 48 8b 00 mov rax, QWORD PTR [rax] - 003c4 48 89 85 28 01 + 0039d 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 003a1 48 8b 00 mov rax, QWORD PTR [rax] + 003a4 48 89 85 28 01 00 00 mov QWORD PTR StartLink$[rbp], rax -; 192 : Block->Start = Block->Start->Next; +; 190 : Block->Start = Block->Start->Next; - 003cb 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 003cf 48 8b 00 mov rax, QWORD PTR [rax] - 003d2 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] - 003d6 48 8b 00 mov rax, QWORD PTR [rax] - 003d9 48 89 01 mov QWORD PTR [rcx], rax + 003ab 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 003af 48 8b 00 mov rax, QWORD PTR [rax] + 003b2 48 8b 4d 68 mov rcx, QWORD PTR Block$[rbp] + 003b6 48 8b 00 mov rax, QWORD PTR [rax] + 003b9 48 89 01 mov QWORD PTR [rcx], rax -; 193 : if (Block->Start) +; 191 : if (Block->Start) - 003dc 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 003e0 48 83 38 00 cmp QWORD PTR [rax], 0 - 003e4 74 0f je SHORT $LN9@JitEmitPre + 003bc 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 003c0 48 83 38 00 cmp QWORD PTR [rax], 0 + 003c4 74 0f je SHORT $LN9@JitEmitPre -; 194 : Block->Start->Prev = NULL; +; 192 : Block->Start->Prev = NULL; - 003e6 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] - 003ea 48 8b 00 mov rax, QWORD PTR [rax] - 003ed 48 c7 40 08 00 + 003c6 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 003ca 48 8b 00 mov rax, QWORD PTR [rax] + 003cd 48 c7 40 08 00 00 00 00 mov QWORD PTR [rax+8], 0 $LN9@JitEmitPre: -; 195 : delete StartLink; +; 193 : delete StartLink; - 003f5 48 8b 85 28 01 + 003d5 48 8b 85 28 01 00 00 mov rax, QWORD PTR StartLink$[rbp] - 003fc 48 89 85 a8 03 + 003dc 48 89 85 a8 03 00 00 mov QWORD PTR $T11[rbp], rax - 00403 48 83 bd a8 03 + 003e3 48 83 bd a8 03 00 00 00 cmp QWORD PTR $T11[rbp], 0 - 0040b 74 1a je SHORT $LN21@JitEmitPre - 0040d ba 01 00 00 00 mov edx, 1 - 00412 48 8b 8d a8 03 + 003eb 74 1a je SHORT $LN21@JitEmitPre + 003ed ba 01 00 00 00 mov edx, 1 + 003f2 48 8b 8d a8 03 00 00 mov rcx, QWORD PTR $T11[rbp] - 00419 e8 00 00 00 00 call ??_G_NATIVE_CODE_LINK@@QEAAPEAXI@Z - 0041e 48 89 85 b8 03 - 00 00 mov QWORD PTR tv205[rbp], rax - 00425 eb 0b jmp SHORT $LN22@JitEmitPre + 003f9 e8 00 00 00 00 call ??_G_NATIVE_CODE_LINK@@QEAAPEAXI@Z + 003fe 48 89 85 b8 03 + 00 00 mov QWORD PTR tv202[rbp], rax + 00405 eb 0b jmp SHORT $LN22@JitEmitPre $LN21@JitEmitPre: - 00427 48 c7 85 b8 03 + 00407 48 c7 85 b8 03 00 00 00 00 00 - 00 mov QWORD PTR tv205[rbp], 0 + 00 mov QWORD PTR tv202[rbp], 0 $LN22@JitEmitPre: -; 196 : -; 197 : return Block; +; 194 : +; 195 : return Block; - 00432 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] + 00412 48 8b 45 68 mov rax, QWORD PTR Block$[rbp] $LN1@JitEmitPre: -; 198 : } +; 196 : } - 00436 48 8d a5 c8 03 + 00416 48 8d a5 c8 03 00 00 lea rsp, QWORD PTR [rbp+968] - 0043d 5f pop rdi - 0043e 5d pop rbp - 0043f c3 ret 0 + 0041d 5f pop rdi + 0041e 5d pop rbp + 0041f c3 ret 0 ?JitEmitPreRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z ENDP ; JitEmitPreRipMov _TEXT ENDS ; COMDAT text$x @@ -4912,10 +4816,10 @@ $T8 = 840 $T9 = 872 $T10 = 904 $T11 = 936 -tv205 = 952 -tv192 = 952 -tv174 = 952 -tv156 = 952 +tv202 = 952 +tv189 = 952 +tv171 = 952 +tv153 = 952 tv131 = 952 tv86 = 952 Link$ = 992 @@ -4957,10 +4861,10 @@ $T8 = 840 $T9 = 872 $T10 = 904 $T11 = 936 -tv205 = 952 -tv192 = 952 -tv174 = 952 -tv156 = 952 +tv202 = 952 +tv189 = 952 +tv171 = 952 +tv153 = 952 tv131 = 952 tv86 = 952 Link$ = 992 @@ -5003,10 +4907,10 @@ $T8 = 840 $T9 = 872 $T10 = 904 $T11 = 936 -tv205 = 952 -tv192 = 952 -tv174 = 952 -tv156 = 952 +tv202 = 952 +tv189 = 952 +tv171 = 952 +tv153 = 952 tv131 = 952 tv86 = 952 Link$ = 992 @@ -5049,10 +4953,10 @@ $T8 = 840 $T9 = 872 $T10 = 904 $T11 = 936 -tv205 = 952 -tv192 = 952 -tv174 = 952 -tv156 = 952 +tv202 = 952 +tv189 = 952 +tv171 = 952 +tv153 = 952 tv131 = 952 tv86 = 952 Link$ = 992 @@ -8011,195 +7915,6 @@ $LN3: wmemcpy ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt\stdio.h -; COMDAT printf -_TEXT SEGMENT -_Result$ = 4 -_ArgList$ = 40 -tv77 = 280 -tv75 = 288 -__$ArrayPad$ = 296 -_Format$ = 336 -printf PROC ; COMDAT - -; 956 : { - -$LN3: - 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 0000a 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 - 0000f 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 - 00014 55 push rbp - 00015 57 push rdi - 00016 48 81 ec 58 01 - 00 00 sub rsp, 344 ; 00000158H - 0001d 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00022 48 8b fc mov rdi, rsp - 00025 b9 56 00 00 00 mov ecx, 86 ; 00000056H - 0002a b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 0002f f3 ab rep stosd - 00031 48 8b 8c 24 78 - 01 00 00 mov rcx, QWORD PTR [rsp+376] - 00039 48 8b 05 00 00 - 00 00 mov rax, QWORD PTR __security_cookie - 00040 48 33 c5 xor rax, rbp - 00043 48 89 85 28 01 - 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax - 0004a 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__6DFAE8B8_stdio@h - 00051 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 957 : int _Result; -; 958 : va_list _ArgList; -; 959 : __crt_va_start(_ArgList, _Format); - - 00056 48 8d 85 58 01 - 00 00 lea rax, QWORD PTR _Format$[rbp+8] - 0005d 48 89 45 28 mov QWORD PTR _ArgList$[rbp], rax - -; 960 : _Result = _vfprintf_l(stdout, _Format, NULL, _ArgList); - - 00061 48 8b 45 28 mov rax, QWORD PTR _ArgList$[rbp] - 00065 48 89 85 18 01 - 00 00 mov QWORD PTR tv77[rbp], rax - 0006c b9 01 00 00 00 mov ecx, 1 - 00071 ff 15 00 00 00 - 00 call QWORD PTR __imp___acrt_iob_func - 00077 48 89 85 20 01 - 00 00 mov QWORD PTR tv75[rbp], rax - 0007e 4c 8b 8d 18 01 - 00 00 mov r9, QWORD PTR tv77[rbp] - 00085 45 33 c0 xor r8d, r8d - 00088 48 8b 95 50 01 - 00 00 mov rdx, QWORD PTR _Format$[rbp] - 0008f 48 8b 8d 20 01 - 00 00 mov rcx, QWORD PTR tv75[rbp] - 00096 e8 00 00 00 00 call _vfprintf_l - 0009b 89 45 04 mov DWORD PTR _Result$[rbp], eax - -; 961 : __crt_va_end(_ArgList); - - 0009e 48 c7 45 28 00 - 00 00 00 mov QWORD PTR _ArgList$[rbp], 0 - -; 962 : return _Result; - - 000a6 8b 45 04 mov eax, DWORD PTR _Result$[rbp] - -; 963 : } - - 000a9 8b f8 mov edi, eax - 000ab 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] - 000af 48 8d 15 00 00 - 00 00 lea rdx, OFFSET FLAT:printf$rtcFrameData - 000b6 e8 00 00 00 00 call _RTC_CheckStackVars - 000bb 8b c7 mov eax, edi - 000bd 48 8b 8d 28 01 - 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] - 000c4 48 33 cd xor rcx, rbp - 000c7 e8 00 00 00 00 call __security_check_cookie - 000cc 48 8d a5 38 01 - 00 00 lea rsp, QWORD PTR [rbp+312] - 000d3 5f pop rdi - 000d4 5d pop rbp - 000d5 c3 ret 0 -printf ENDP -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt\stdio.h -; COMDAT _vfprintf_l -_TEXT SEGMENT -_Stream$ = 224 -_Format$ = 232 -_Locale$ = 240 -_ArgList$ = 248 -_vfprintf_l PROC ; COMDAT - -; 644 : { - -$LN3: - 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 - 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 - 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 00014 55 push rbp - 00015 57 push rdi - 00016 48 81 ec f8 00 - 00 00 sub rsp, 248 ; 000000f8H - 0001d 48 8d 6c 24 30 lea rbp, QWORD PTR [rsp+48] - 00022 48 8b fc mov rdi, rsp - 00025 b9 3e 00 00 00 mov ecx, 62 ; 0000003eH - 0002a b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 0002f f3 ab rep stosd - 00031 48 8b 8c 24 18 - 01 00 00 mov rcx, QWORD PTR [rsp+280] - 00039 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__6DFAE8B8_stdio@h - 00040 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 645 : return __stdio_common_vfprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Stream, _Format, _Locale, _ArgList); - - 00045 e8 00 00 00 00 call __local_stdio_printf_options - 0004a 48 8b 8d f8 00 - 00 00 mov rcx, QWORD PTR _ArgList$[rbp] - 00051 48 89 4c 24 20 mov QWORD PTR [rsp+32], rcx - 00056 4c 8b 8d f0 00 - 00 00 mov r9, QWORD PTR _Locale$[rbp] - 0005d 4c 8b 85 e8 00 - 00 00 mov r8, QWORD PTR _Format$[rbp] - 00064 48 8b 95 e0 00 - 00 00 mov rdx, QWORD PTR _Stream$[rbp] - 0006b 48 8b 08 mov rcx, QWORD PTR [rax] - 0006e ff 15 00 00 00 - 00 call QWORD PTR __imp___stdio_common_vfprintf - -; 646 : } - - 00074 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 0007b 5f pop rdi - 0007c 5d pop rbp - 0007d c3 ret 0 -_vfprintf_l ENDP -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt\corecrt_stdio_config.h -; COMDAT __local_stdio_printf_options -_TEXT SEGMENT -__local_stdio_printf_options PROC ; COMDAT - -; 90 : { - -$LN3: - 00000 40 55 push rbp - 00002 57 push rdi - 00003 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 0000a 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 0000f 48 8b fc mov rdi, rsp - 00012 b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 00017 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 0001c f3 ab rep stosd - 0001e 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A2143F22_corecrt_stdio_config@h - 00025 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 91 : static unsigned __int64 _OptionsStorage; -; 92 : return &_OptionsStorage; - - 0002a 48 8d 05 00 00 - 00 00 lea rax, OFFSET FLAT:?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA ; `__local_stdio_printf_options'::`2'::_OptionsStorage - -; 93 : } - - 00031 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 00038 5f pop rdi - 00039 5d pop rbp - 0003a c3 ret 0 -__local_stdio_printf_options ENDP -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI ; File C:\$Fanta\code-virtualizer\CodeVirtualizer\Jit.cpp ; COMDAT ?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z _TEXT SEGMENT diff --git a/CodeVirtualizer/x64/Debug/Main.cod b/CodeVirtualizer/x64/Debug/Main.cod index c81270d..70e2ba9 100644 --- a/CodeVirtualizer/x64/Debug/Main.cod +++ b/CodeVirtualizer/x64/Debug/Main.cod @@ -8,6 +8,7 @@ INCLUDELIB OLDNAMES PUBLIC ?TestBuffer@@3PAEA ; TestBuffer PUBLIC ?TestBufferSize@@3KA ; TestBufferSize PUBLIC ?meme1@@3PAEA ; meme1 +PUBLIC ?meme2@@3PAEA ; meme2 msvcjmc SEGMENT __B2D2BA86_ctype@h DB 01H __79C7FC57_basetsd@h DB 01H @@ -77,7 +78,6 @@ __BB5B4FF8_xed-encode@h DB 01H __21860875_xed-encoder-hl@h DB 01H __F7815311_xed-decoded-inst-api@h DB 01H __4031338C_Main@cpp DB 01H -__BF2A7ACC_vector DB 01H __7EA464AF_istream DB 01H __1D745195_ostream DB 01H __6FFBAAB7_streambuf DB 01H @@ -135,10 +135,14 @@ _DATA SEGMENT DB 04H DB 024H DB 0c3H - ORG $+2 +?meme2@@3PAEA DB 0c3H ; meme2 + ORG $+1 ?TestBufferSize@@3KA DD 02eH ; TestBufferSize -?meme1@@3PAEA DB 031H ; meme1 +?meme1@@3PAEA DB 0b8H ; meme1 + DB 0deH DB 0c0H + DB 0acH + DB 0eH _DATA ENDS PUBLIC ?__empty_global_delete@@YAXPEAX@Z ; __empty_global_delete PUBLIC ?__empty_global_delete@@YAXPEAX_K@Z ; __empty_global_delete @@ -148,8 +152,6 @@ PUBLIC __local_stdio_printf_options PUBLIC _vfprintf_l PUBLIC printf PUBLIC wmemcpy -PUBLIC ?_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z ; std::_Adjust_manually_vector_aligned -PUBLIC ?_Orphan_all@_Container_base12@std@@QEAAXXZ ; std::_Container_base12::_Orphan_all PUBLIC ?eq_int_type@?$_Narrow_char_traits@DH@std@@SA_NAEBH0@Z ; std::_Narrow_char_traits::eq_int_type PUBLIC ?eof@?$_Narrow_char_traits@DH@std@@SAHXZ ; std::_Narrow_char_traits::eof PUBLIC ??$_Maklocstr@_W@std@@YAPEA_WPEBDPEA_WAEBU_Cvtvec@@@Z ; std::_Maklocstr @@ -158,13 +160,6 @@ PUBLIC ??$_Maklocstr@D@std@@YAPEADPEBDPEADAEBU_Cvtvec@@@Z ; std::_Maklocstr > >::_Getvals PUBLIC ??$_Getvals@_W@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z ; std::time_get > >::_Getvals -PUBLIC ?deallocate@?$allocator@K@std@@QEAAXQEAK_K@Z ; std::allocator::deallocate -PUBLIC ??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ ; std::vector >::~vector > -PUBLIC ?_Destroy@?$vector@KV?$allocator@K@std@@@std@@AEAAXPEAK0@Z ; std::vector >::_Destroy -PUBLIC ?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ ; std::vector >::_Tidy -PUBLIC ?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ ; std::vector >::_Getal -PUBLIC ?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ ; std::_Compressed_pair,std::_Vector_val >,1>::_Get_first -PUBLIC ??1_NATIVE_CODE_BLOCK@@QEAA@XZ ; _NATIVE_CODE_BLOCK::~_NATIVE_CODE_BLOCK PUBLIC ?MakeExecutableBuffer@@YAPEAXPEAXK@Z ; MakeExecutableBuffer PUBLIC main PUBLIC ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z ; std::operator<< > @@ -172,49 +167,32 @@ PUBLIC ??$?6DU?$char_traits@D@std@@_J@std@@YAAEAV?$basic_ostream@DU?$char_traits PUBLIC ??$setfill@D@std@@YA?AU?$_Fillobj@D@0@D@Z ; std::setfill PUBLIC ??0?$_Fillobj@D@std@@QEAA@D@Z ; std::_Fillobj::_Fillobj PUBLIC ??$?6DU?$char_traits@D@std@@D@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Fillobj@D@0@@Z ; std::operator<<,char> -PUBLIC ??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z ; std::allocator::allocator -PUBLIC ??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z ; std::exchange -PUBLIC ??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z ; std::_Delete_plain_internal > PUBLIC ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z ; std::basic_ostream >::_Sentry_base::_Sentry_base PUBLIC ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ ; std::basic_ostream >::_Sentry_base::~_Sentry_base PUBLIC ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z ; std::basic_ostream >::sentry::sentry PUBLIC ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ ; std::basic_ostream >::sentry::~sentry PUBLIC ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEBA_NXZ ; std::basic_ostream >::sentry::operator bool -PUBLIC ??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z ; std::_Destroy_range > -PUBLIC ??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z ; std::_Deallocate<16,0> -PUBLIC ??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z ; std::_Deallocate_plain > -PUBLIC ?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAEAV?$allocator@U_Container_proxy@std@@@2@QEAU_Container_proxy@2@_K@Z ; std::_Default_allocator_traits >::deallocate PUBLIC __JustMyCode_Default PUBLIC ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA ; `__local_stdio_printf_options'::`2'::_OptionsStorage -PUBLIC ?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z@4JA ; `std::_Adjust_manually_vector_aligned'::`1'::__LINE__Var -PUBLIC ??_C@_0BB@FCMFBGOM@invalid?5argument@ ; `string' -PUBLIC ??_C@_02DKCKIIND@?$CFs@ ; `string' -PUBLIC ??_C@_0GI@JMEOMKJO@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ ; `string' -PUBLIC ??_C@_1NA@FEEOBALC@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ ; `string' -PUBLIC ??_C@_1EK@NIFDJFDG@?$AAs?$AAt?$AAd?$AA?3?$AA?3?$AA_?$AAA?$AAd?$AAj?$AAu?$AAs?$AAt?$AA_?$AAm?$AAa@ ; `string' -PUBLIC ??_C@_1CG@JNLFBNGN@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAa?$AAr?$AAg?$AAu?$AAm?$AAe@ ; `string' PUBLIC ??_C@_0GI@DEICPIDJ@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ ; `string' PUBLIC ?__LINE__Var@?0??_Maklocwcs@std@@YAPEA_WPEB_W@Z@4JA ; `std::_Maklocwcs'::`1'::__LINE__Var PUBLIC ??_C@_0GI@LHMPPKJI@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ ; `string' -PUBLIC ??_C@_0BJ@LHKOPLNN@Something?5failed?5nicka?4?6@ ; `string' PUBLIC ??_C@_05PDJBBECF@pause@ ; `string' +PUBLIC ??_C@_0BD@FOIEMPBM@The?5numba?5was?3?5?$CFX?6@ ; `string' PUBLIC ??_C@_0N@LPFKKEBD@?3AM?3am?3PM?3pm@ ; `string' PUBLIC ??_C@_1BK@MHIKGOKE@?$AA?3?$AAA?$AAM?$AA?3?$AAa?$AAm?$AA?3?$AAP?$AAM?$AA?3?$AAp?$AAm@ ; `string' EXTRN ??2@YAPEAX_K@Z:PROC ; operator new EXTRN ??3@YAXPEAX_K@Z:PROC ; operator delete -EXTRN __imp__invalid_parameter:PROC EXTRN memcpy:PROC EXTRN __imp_wcslen:PROC EXTRN strlen:PROC EXTRN __imp_VirtualAlloc:PROC EXTRN __imp_srand:PROC +EXTRN __imp_rand:PROC EXTRN __imp_system:PROC EXTRN __imp___acrt_iob_func:PROC EXTRN __imp___stdio_common_vfprintf:PROC EXTRN __imp__calloc_dbg:PROC -EXTRN __imp__CrtDbgReport:PROC -EXTRN __imp_??0_Lockit@std@@QEAA@H@Z:PROC -EXTRN __imp_??1_Lockit@std@@QEAA@XZ:PROC EXTRN ?uncaught_exception@std@@YA_NXZ:PROC ; std::uncaught_exception EXTRN ?_Xbad_alloc@std@@YAXXZ:PROC ; std::_Xbad_alloc EXTRN _Mbrtowc:PROC @@ -242,10 +220,11 @@ EXTRN __imp__time64:PROC EXTRN ?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z:PROC ; std::setw EXTRN xed_tables_init:PROC EXTRN ??0_NATIVE_CODE_LINK@@QEAA@KPEAXK@Z:PROC ; _NATIVE_CODE_LINK::_NATIVE_CODE_LINK -EXTRN ??0_NATIVE_CODE_BLOCK@@QEAA@XZ:PROC ; _NATIVE_CODE_BLOCK::_NATIVE_CODE_BLOCK -EXTRN ?NcInsertLinkBefore@@YAXPEAU_NATIVE_CODE_LINK@@0@Z:PROC ; NcInsertLinkBefore -EXTRN ?NcDisassemble@@YAHPEAU_NATIVE_CODE_BLOCK@@PEAXK@Z:PROC ; NcDisassemble +EXTRN ?NcAppendToBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@@Z:PROC ; NcAppendToBlock +EXTRN ?NcInsertBlockAfter@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z:PROC ; NcInsertBlockAfter EXTRN ?NcAssemble@@YAPEAXPEAU_NATIVE_CODE_BLOCK@@PEAK@Z:PROC ; NcAssemble +EXTRN ?JitEmitPreRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z:PROC ; JitEmitPreRipMov +EXTRN ?JitEmitPostRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z:PROC ; JitEmitPostRipMov EXTRN _RTC_CheckStackVars:PROC EXTRN _RTC_InitBase:PROC EXTRN _RTC_Shutdown:PROC @@ -310,18 +289,6 @@ $pdata$wmemcpy DD imagerel $LN3 pdata ENDS ; COMDAT pdata pdata SEGMENT -$pdata$?_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z DD imagerel $LN21 - DD imagerel $LN21+476 - DD imagerel $unwind$?_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$?_Orphan_all@_Container_base12@std@@QEAAXXZ DD imagerel $LN7 - DD imagerel $LN7+233 - DD imagerel $unwind$?_Orphan_all@_Container_base12@std@@QEAAXXZ -pdata ENDS -; COMDAT pdata -pdata SEGMENT $pdata$?eq_int_type@?$_Narrow_char_traits@DH@std@@SA_NAEBH0@Z DD imagerel $LN5 DD imagerel $LN5+118 DD imagerel $unwind$?eq_int_type@?$_Narrow_char_traits@DH@std@@SA_NAEBH0@Z @@ -376,62 +343,20 @@ $pdata$??$_Getvals@_W@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@st pdata ENDS ; COMDAT pdata pdata SEGMENT -$pdata$?deallocate@?$allocator@K@std@@QEAAXQEAK_K@Z DD imagerel $LN3 - DD imagerel $LN3+100 - DD imagerel $unwind$?deallocate@?$allocator@K@std@@QEAAXQEAK_K@Z -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ DD imagerel $LN3 - DD imagerel $LN3+202 - DD imagerel $unwind$??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$?_Destroy@?$vector@KV?$allocator@K@std@@@std@@AEAAXPEAK0@Z DD imagerel $LN3 - DD imagerel $LN3+108 - DD imagerel $unwind$?_Destroy@?$vector@KV?$allocator@K@std@@@std@@AEAAXPEAK0@Z -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ DD imagerel $LN4 - DD imagerel $LN4+280 - DD imagerel $unwind$?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ DD imagerel $LN3 - DD imagerel $LN3+80 - DD imagerel $unwind$?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ DD imagerel $LN3 - DD imagerel $LN3+71 - DD imagerel $unwind$?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$??1_NATIVE_CODE_BLOCK@@QEAA@XZ DD imagerel $LN3 - DD imagerel $LN3+71 - DD imagerel $unwind$??1_NATIVE_CODE_BLOCK@@QEAA@XZ -pdata ENDS -; COMDAT pdata -pdata SEGMENT $pdata$?MakeExecutableBuffer@@YAPEAXPEAXK@Z DD imagerel $LN4 DD imagerel $LN4+136 DD imagerel $unwind$?MakeExecutableBuffer@@YAPEAXPEAXK@Z pdata ENDS ; COMDAT pdata pdata SEGMENT -$pdata$main DD imagerel $LN14 - DD imagerel $LN14+646 +$pdata$main DD imagerel $LN19 + DD imagerel $LN19+1107 DD imagerel $unwind$main pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$main$dtor$0 DD imagerel main$dtor$0 - DD imagerel main$dtor$0+36 + DD imagerel main$dtor$0+44 DD imagerel $unwind$main$dtor$0 pdata ENDS ; COMDAT pdata @@ -484,24 +409,6 @@ $pdata$??$?6DU?$char_traits@D@std@@D@std@@YAAEAV?$basic_ostream@DU?$char_traits@ pdata ENDS ; COMDAT pdata pdata SEGMENT -$pdata$??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z DD imagerel $LN3 - DD imagerel $LN3+76 - DD imagerel $unwind$??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z DD imagerel $LN3 - DD imagerel $LN3+107 - DD imagerel $unwind$??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z DD imagerel $LN3 - DD imagerel $LN3+89 - DD imagerel $unwind$??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z -pdata ENDS -; COMDAT pdata -pdata SEGMENT $pdata$??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z DD imagerel $LN4 DD imagerel $LN4+171 DD imagerel $unwind$??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z @@ -536,30 +443,6 @@ $pdata$??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEBA_NXZ DD imager DD imagerel $LN3+75 DD imagerel $unwind$??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEBA_NXZ pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z DD imagerel $LN3 - DD imagerel $LN3+75 - DD imagerel $unwind$??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z DD imagerel $LN4 - DD imagerel $LN4+121 - DD imagerel $unwind$??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z DD imagerel $LN3 - DD imagerel $LN3+95 - DD imagerel $unwind$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z -pdata ENDS -; COMDAT pdata -pdata SEGMENT -$pdata$?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAEAV?$allocator@U_Container_proxy@std@@@2@QEAU_Container_proxy@2@_K@Z DD imagerel $LN3 - DD imagerel $LN3+97 - DD imagerel $unwind$?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAEAV?$allocator@U_Container_proxy@std@@@2@QEAU_Container_proxy@2@_K@Z -pdata ENDS ; COMDAT rtc$TMZ rtc$TMZ SEGMENT _RTC_Shutdown.rtc$TMZ DQ FLAT:_RTC_Shutdown @@ -578,14 +461,14 @@ CONST ENDS CONST SEGMENT ??_C@_0N@LPFKKEBD@?3AM?3am?3PM?3pm@ DB ':AM:am:PM:pm', 00H ; `string' CONST ENDS -; COMDAT ??_C@_05PDJBBECF@pause@ +; COMDAT ??_C@_0BD@FOIEMPBM@The?5numba?5was?3?5?$CFX?6@ CONST SEGMENT -??_C@_05PDJBBECF@pause@ DB 'pause', 00H ; `string' +??_C@_0BD@FOIEMPBM@The?5numba?5was?3?5?$CFX?6@ DB 'The numba was: %X', 0aH + DB 00H ; `string' CONST ENDS -; COMDAT ??_C@_0BJ@LHKOPLNN@Something?5failed?5nicka?4?6@ +; COMDAT ??_C@_05PDJBBECF@pause@ CONST SEGMENT -??_C@_0BJ@LHKOPLNN@Something?5failed?5nicka?4?6@ DB 'Something failed nic' - DB 'ka.', 0aH, 00H ; `string' +??_C@_05PDJBBECF@pause@ DB 'pause', 00H ; `string' CONST ENDS ; COMDAT ??_C@_0GI@LHMPPKJI@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ CONST SEGMENT @@ -603,128 +486,6 @@ CONST SEGMENT DB 'gram Files (x86)\Microsoft Visual Studio\2019\Community\VC\To' DB 'ols\MSVC\14.27.29110\include\xlocale', 00H ; `string' CONST ENDS -; COMDAT ??_C@_1CG@JNLFBNGN@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAa?$AAr?$AAg?$AAu?$AAm?$AAe@ -CONST SEGMENT -??_C@_1CG@JNLFBNGN@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAa?$AAr?$AAg?$AAu?$AAm?$AAe@ DB '"' - DB 00H, 'i', 00H, 'n', 00H, 'v', 00H, 'a', 00H, 'l', 00H, 'i', 00H - DB 'd', 00H, ' ', 00H, 'a', 00H, 'r', 00H, 'g', 00H, 'u', 00H, 'm' - DB 00H, 'e', 00H, 'n', 00H, 't', 00H, '"', 00H, 00H, 00H ; `string' -CONST ENDS -; COMDAT ??_C@_1EK@NIFDJFDG@?$AAs?$AAt?$AAd?$AA?3?$AA?3?$AA_?$AAA?$AAd?$AAj?$AAu?$AAs?$AAt?$AA_?$AAm?$AAa@ -CONST SEGMENT -??_C@_1EK@NIFDJFDG@?$AAs?$AAt?$AAd?$AA?3?$AA?3?$AA_?$AAA?$AAd?$AAj?$AAu?$AAs?$AAt?$AA_?$AAm?$AAa@ DB 's' - DB 00H, 't', 00H, 'd', 00H, ':', 00H, ':', 00H, '_', 00H, 'A', 00H - DB 'd', 00H, 'j', 00H, 'u', 00H, 's', 00H, 't', 00H, '_', 00H, 'm' - DB 00H, 'a', 00H, 'n', 00H, 'u', 00H, 'a', 00H, 'l', 00H, 'l', 00H - DB 'y', 00H, '_', 00H, 'v', 00H, 'e', 00H, 'c', 00H, 't', 00H, 'o' - DB 00H, 'r', 00H, '_', 00H, 'a', 00H, 'l', 00H, 'i', 00H, 'g', 00H - DB 'n', 00H, 'e', 00H, 'd', 00H, 00H, 00H ; `string' -CONST ENDS -; COMDAT ??_C@_1NA@FEEOBALC@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ -CONST SEGMENT -??_C@_1NA@FEEOBALC@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ DB 'C' - DB 00H, ':', 00H, '\', 00H, 'P', 00H, 'r', 00H, 'o', 00H, 'g', 00H - DB 'r', 00H, 'a', 00H, 'm', 00H, ' ', 00H, 'F', 00H, 'i', 00H, 'l' - DB 00H, 'e', 00H, 's', 00H, ' ', 00H, '(', 00H, 'x', 00H, '8', 00H - DB '6', 00H, ')', 00H, '\', 00H, 'M', 00H, 'i', 00H, 'c', 00H, 'r' - DB 00H, 'o', 00H, 's', 00H, 'o', 00H, 'f', 00H, 't', 00H, ' ', 00H - DB 'V', 00H, 'i', 00H, 's', 00H, 'u', 00H, 'a', 00H, 'l', 00H, ' ' - DB 00H, 'S', 00H, 't', 00H, 'u', 00H, 'd', 00H, 'i', 00H, 'o', 00H - DB '\', 00H, '2', 00H, '0', 00H, '1', 00H, '9', 00H, '\', 00H, 'C' - DB 00H, 'o', 00H, 'm', 00H, 'm', 00H, 'u', 00H, 'n', 00H, 'i', 00H - DB 't', 00H, 'y', 00H, '\', 00H, 'V', 00H, 'C', 00H, '\', 00H, 'T' - DB 00H, 'o', 00H, 'o', 00H, 'l', 00H, 's', 00H, '\', 00H, 'M', 00H - DB 'S', 00H, 'V', 00H, 'C', 00H, '\', 00H, '1', 00H, '4', 00H, '.' - DB 00H, '2', 00H, '7', 00H, '.', 00H, '2', 00H, '9', 00H, '1', 00H - DB '1', 00H, '0', 00H, '\', 00H, 'i', 00H, 'n', 00H, 'c', 00H, 'l' - DB 00H, 'u', 00H, 'd', 00H, 'e', 00H, '\', 00H, 'x', 00H, 'm', 00H - DB 'e', 00H, 'm', 00H, 'o', 00H, 'r', 00H, 'y', 00H, 00H, 00H ; `string' -CONST ENDS -; COMDAT ??_C@_0GI@JMEOMKJO@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ -CONST SEGMENT -??_C@_0GI@JMEOMKJO@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ DB 'C:\Pro' - DB 'gram Files (x86)\Microsoft Visual Studio\2019\Community\VC\To' - DB 'ols\MSVC\14.27.29110\include\xmemory', 00H ; `string' -CONST ENDS -; COMDAT ??_C@_02DKCKIIND@?$CFs@ -CONST SEGMENT -??_C@_02DKCKIIND@?$CFs@ DB '%s', 00H ; `string' -CONST ENDS -; COMDAT ??_C@_0BB@FCMFBGOM@invalid?5argument@ -CONST SEGMENT -??_C@_0BB@FCMFBGOM@invalid?5argument@ DB 'invalid argument', 00H ; `string' -CONST ENDS -; COMDAT ?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z@4JA -_DATA SEGMENT -?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z@4JA DD 084H ; `std::_Adjust_manually_vector_aligned'::`1'::__LINE__Var -_DATA ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAEAV?$allocator@U_Container_proxy@std@@@2@QEAU_Container_proxy@2@_K@Z DD 025053401H - DD 0118231dH - DD 07011001dH - DD 05010H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z DB 060H - DD imagerel $ip2state$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z DD 025052f19H - DD 01132318H - DD 0700c001dH - DD 0500bH - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z DB 060H - DD imagerel $ip2state$??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z DD 025052f19H - DD 01132318H - DD 0700c001dH - DD 0500bH - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z DB 060H - DD imagerel $ip2state$??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z DD 025053419H - DD 0118231dH - DD 07011001dH - DD 05010H - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z -xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEBA_NXZ DD 025052a01H @@ -818,66 +579,6 @@ $unwind$??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12 xdata ENDS ; COMDAT xdata xdata SEGMENT -$ip2state$??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z DB 060H - DD imagerel $ip2state$??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z DD 025052f19H - DD 01132318H - DD 0700c001dH - DD 0500bH - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z DB 060H - DD imagerel $ip2state$??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z DD 025052f19H - DD 01132318H - DD 0700c0021H - DD 0500bH - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z DB 060H - DD imagerel $ip2state$??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z DD 025052f19H - DD 01132318H - DD 0700c001dH - DD 0500bH - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT $unwind$??$?6DU?$char_traits@D@std@@D@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Fillobj@D@0@@Z DD 025052f01H DD 01132318H DD 0700c001fH @@ -999,20 +700,16 @@ $unwind$main$dtor$0 DD 031001H xdata ENDS ; COMDAT xdata xdata SEGMENT -$ip2state$main DB 0eH +$ip2state$main DB 0aH DB 00H DB 00H - DB 0b2H + DB 0c0H DB 02H - DB 'P' - DB 04H DB 094H - DB 02H - DB 0deH DB 00H - DB '(' - DB 02H - DB 0e9H, 03H + DB '8' + DB 04H + DB 094H DB 00H xdata ENDS ; COMDAT xdata @@ -1020,7 +717,7 @@ xdata SEGMENT $stateUnwindMap$main DB 04H DB 0eH DD imagerel main$dtor$0 - DB 02eH + DB 036H DD imagerel main$dtor$1 xdata ENDS ; COMDAT xdata @@ -1033,44 +730,27 @@ xdata ENDS xdata SEGMENT $unwind$main DD 025052f19H DD 010a230fH - DD 070030057H + DD 070030089H DD 05002H DD imagerel __GSHandlerCheck_EH4 DD imagerel $cppxdata$main - DD 02aaH + DD 043aH xdata ENDS ; COMDAT CONST CONST SEGMENT -main$rtcName$0 DB 042H - DB 06cH - DB 06fH - DB 063H - DB 06bH - DB 00H - ORG $+2 -main$rtcName$1 DB 041H +main$rtcName$0 DB 041H DB 073H - DB 073H - DB 065H DB 06dH - DB 062H - DB 06cH - DB 065H - DB 064H - DB 053H - DB 069H - DB 07aH + DB 04cH DB 065H + DB 06eH DB 00H - ORG $+10 -main$rtcVarDesc DD 094H + ORG $+9 +main$rtcVarDesc DD 0124H DD 04H - DQ FLAT:main$rtcName$1 - DD 028H - DD 030H DQ FLAT:main$rtcName$0 - ORG $+96 -main$rtcFrameData DD 02H + ORG $+48 +main$rtcFrameData DD 01H DD 00H DQ FLAT:main$rtcVarDesc CONST ENDS @@ -1083,123 +763,6 @@ $unwind$?MakeExecutableBuffer@@YAPEAXPEAXK@Z DD 025052e01H xdata ENDS ; COMDAT xdata xdata SEGMENT -$unwind$??1_NATIVE_CODE_BLOCK@@QEAA@XZ DD 025052a01H - DD 010e2313H - DD 07007001dH - DD 05006H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ DB 060H - DD imagerel $ip2state$?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ DD 025052a19H - DD 010e2313H - DD 07007001dH - DD 05006H - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ DB 060H - DD imagerel $ip2state$?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ DD 025052a19H - DD 010e2313H - DD 07007001dH - DD 05006H - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ DB 060H - DD imagerel $ip2state$?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ DD 025052a19H - DD 010e2313H - DD 07007002fH - DD 05006H - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?_Destroy@?$vector@KV?$allocator@K@std@@@std@@AEAAXPEAK0@Z DD 025053401H - DD 0118231dH - DD 07011001dH - DD 05010H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ DB 060H - DD imagerel $ip2state$??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ DD 025053b19H - DD 010e2313H - DD 070070029H - DD 05006H - DD imagerel __GSHandlerCheck_EH4 - DD imagerel $cppxdata$??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ - DD 013bH -xdata ENDS -; COMDAT CONST -CONST SEGMENT -??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ$rtcName$0 DB 024H ; std::vector >::~vector > - DB 053H - DB 031H - DB 00H - ORG $+12 -??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ$rtcVarDesc DD 044H ; std::vector >::~vector > - DD 01H - DQ FLAT:??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ$rtcName$0 - ORG $+48 -??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ$rtcFrameData DD 01H ; std::vector >::~vector > - DD 00H - DQ FLAT:??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ$rtcVarDesc -CONST ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?deallocate@?$allocator@K@std@@QEAAXQEAK_K@Z DD 025053401H - DD 0118231dH - DD 07011001dH - DD 05010H -xdata ENDS -; COMDAT xdata -xdata SEGMENT $unwind$??$_Getvals@_W@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z DD 025063501H DD 0119231eH DD 070120026H @@ -1327,51 +890,6 @@ $unwind$?eq_int_type@?$_Narrow_char_traits@DH@std@@SA_NAEBH0@Z DD 025052f19H xdata ENDS ; COMDAT xdata xdata SEGMENT -$ip2state$?_Orphan_all@_Container_base12@std@@QEAAXXZ DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$?_Orphan_all@_Container_base12@std@@QEAAXXZ DB 060H - DD imagerel $ip2state$?_Orphan_all@_Container_base12@std@@QEAAXXZ -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?_Orphan_all@_Container_base12@std@@QEAAXXZ DD 025053b19H - DD 010e2313H - DD 070070025H - DD 05006H - DD imagerel __GSHandlerCheck_EH4 - DD imagerel $cppxdata$?_Orphan_all@_Container_base12@std@@QEAAXXZ - DD 011bH -xdata ENDS -; COMDAT CONST -CONST SEGMENT -?_Orphan_all@_Container_base12@std@@QEAAXXZ$rtcName$0 DB 05fH ; std::_Container_base12::_Orphan_all - DB 04cH - DB 06fH - DB 063H - DB 06bH - DB 00H - ORG $+10 -?_Orphan_all@_Container_base12@std@@QEAAXXZ$rtcVarDesc DD 024H ; std::_Container_base12::_Orphan_all - DD 04H - DQ FLAT:?_Orphan_all@_Container_base12@std@@QEAAXXZ$rtcName$0 - ORG $+48 -?_Orphan_all@_Container_base12@std@@QEAAXXZ$rtcFrameData DD 01H ; std::_Container_base12::_Orphan_all - DD 00H - DQ FLAT:?_Orphan_all@_Container_base12@std@@QEAAXXZ$rtcVarDesc -CONST ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z DD 035052f01H - DD 01133318H - DD 0700c002fH - DD 0500bH -xdata ENDS -; COMDAT xdata -xdata SEGMENT $unwind$wmemcpy DD 025053401H DD 0118231dH DD 07011001dH @@ -1429,301 +947,83 @@ xdata ENDS ; COMDAT xdata xdata SEGMENT $cppxdata$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DB 060H - DD imagerel $ip2state$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DD 025053419H - DD 0118231dH - DD 07011001dH - DD 05010H - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DB 060H - DD imagerel $ip2state$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DD 025052f19H - DD 01132318H - DD 0700c001dH - DD 0500bH - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$?__empty_global_delete@@YAXPEAX_K@Z DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$?__empty_global_delete@@YAXPEAX_K@Z DB 060H - DD imagerel $ip2state$?__empty_global_delete@@YAXPEAX_K@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?__empty_global_delete@@YAXPEAX_K@Z DD 025052f19H - DD 01132318H - DD 0700c001dH - DD 0500bH - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$?__empty_global_delete@@YAXPEAX_K@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$ip2state$?__empty_global_delete@@YAXPEAX@Z DB 02H - DB 00H - DB 00H -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$cppxdata$?__empty_global_delete@@YAXPEAX@Z DB 060H - DD imagerel $ip2state$?__empty_global_delete@@YAXPEAX@Z -xdata ENDS -; COMDAT xdata -xdata SEGMENT -$unwind$?__empty_global_delete@@YAXPEAX@Z DD 025052a19H - DD 010e2313H - DD 07007001dH - DD 05006H - DD imagerel __CxxFrameHandler4 - DD imagerel $cppxdata$?__empty_global_delete@@YAXPEAX@Z -xdata ENDS -; Function compile flags: /Odt -; COMDAT __JustMyCode_Default -_TEXT SEGMENT -__JustMyCode_Default PROC ; COMDAT - 00000 c2 00 00 ret 0 -__JustMyCode_Default ENDP -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAEAV?$allocator@U_Container_proxy@std@@@2@QEAU_Container_proxy@2@_K@Z -_TEXT SEGMENT -__formal$ = 224 -_Ptr$ = 232 -_Count$ = 240 -?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAEAV?$allocator@U_Container_proxy@std@@@2@QEAU_Container_proxy@2@_K@Z PROC ; std::_Default_allocator_traits >::deallocate, COMDAT - -; 687 : static void deallocate(_Alloc&, const pointer _Ptr, const size_type _Count) { - -$LN3: - 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 - 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000f 55 push rbp - 00010 57 push rdi - 00011 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 00018 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 0001d 48 8b fc mov rdi, rsp - 00020 b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 00025 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 0002a f3 ab rep stosd - 0002c 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 00034 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 0003b e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 688 : // no overflow check on the following multiply; we assume _Allocate did that check -; 689 : _Deallocate<_New_alignof>(_Ptr, sizeof(value_type) * _Count); - - 00040 48 6b 85 f0 00 - 00 00 10 imul rax, QWORD PTR _Count$[rbp], 16 - 00048 48 8b d0 mov rdx, rax - 0004b 48 8b 8d e8 00 - 00 00 mov rcx, QWORD PTR _Ptr$[rbp] - 00052 e8 00 00 00 00 call ??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z ; std::_Deallocate<16,0> - -; 690 : } - - 00057 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 0005e 5f pop rdi - 0005f 5d pop rbp - 00060 c3 ret 0 -?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAEAV?$allocator@U_Container_proxy@std@@@2@QEAU_Container_proxy@2@_K@Z ENDP ; std::_Default_allocator_traits >::deallocate -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z -_TEXT SEGMENT -_Al$ = 224 -_Ptr$ = 232 -??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z PROC ; std::_Deallocate_plain >, COMDAT - -; 998 : void _Deallocate_plain(_Alloc& _Al, typename _Alloc::value_type* const _Ptr) noexcept { - -$LN3: - 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000a 55 push rbp - 0000b 57 push rdi - 0000c 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 00013 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00018 48 8b fc mov rdi, rsp - 0001b b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 00020 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00025 f3 ab rep stosd - 00027 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 0002f 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 999 : // deallocate a plain pointer using an allocator -; 1000 : using _Alloc_traits = allocator_traits<_Alloc>; -; 1001 : if constexpr (is_same_v<_Alloc_ptr_t<_Alloc>, typename _Alloc::value_type*>) { -; 1002 : _Alloc_traits::deallocate(_Al, _Ptr, 1); - - 0003b 41 b8 01 00 00 - 00 mov r8d, 1 - 00041 48 8b 95 e8 00 - 00 00 mov rdx, QWORD PTR _Ptr$[rbp] - 00048 48 8b 8d e0 00 - 00 00 mov rcx, QWORD PTR _Al$[rbp] - 0004f e8 00 00 00 00 call ?deallocate@?$_Default_allocator_traits@V?$allocator@U_Container_proxy@std@@@std@@@std@@SAXAEAV?$allocator@U_Container_proxy@std@@@2@QEAU_Container_proxy@2@_K@Z ; std::_Default_allocator_traits >::deallocate - 00054 90 npad 1 - -; 1003 : } else { -; 1004 : using _Ptr_traits = pointer_traits<_Alloc_ptr_t<_Alloc>>; -; 1005 : _Alloc_traits::deallocate(_Al, _Ptr_traits::pointer_to(*_Ptr), 1); -; 1006 : } -; 1007 : } - - 00055 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 0005c 5f pop rdi - 0005d 5d pop rbp - 0005e c3 ret 0 -??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z ENDP ; std::_Deallocate_plain > -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z -_TEXT SEGMENT -_Ptr$ = 224 -_Bytes$ = 232 -??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z PROC ; std::_Deallocate<16,0>, COMDAT - -; 213 : void _Deallocate(void* _Ptr, size_t _Bytes) noexcept { - -$LN4: - 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000a 55 push rbp - 0000b 57 push rdi - 0000c 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 00013 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00018 48 8b fc mov rdi, rsp - 0001b b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 00020 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00025 f3 ab rep stosd - 00027 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 0002f 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 214 : // deallocate storage allocated by _Allocate when !_HAS_ALIGNED_NEW || _Align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__ -; 215 : #if defined(_M_IX86) || defined(_M_X64) -; 216 : if (_Bytes >= _Big_allocation_threshold) { // boost the alignment of big allocations to help autovectorization - - 0003b 48 81 bd e8 00 - 00 00 00 10 00 - 00 cmp QWORD PTR _Bytes$[rbp], 4096 ; 00001000H - 00046 72 13 jb SHORT $LN2@Deallocate - -; 217 : _Adjust_manually_vector_aligned(_Ptr, _Bytes); - - 00048 48 8d 95 e8 00 - 00 00 lea rdx, QWORD PTR _Bytes$[rbp] - 0004f 48 8d 8d e0 00 - 00 00 lea rcx, QWORD PTR _Ptr$[rbp] - 00056 e8 00 00 00 00 call ?_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z ; std::_Adjust_manually_vector_aligned -$LN2@Deallocate: - -; 218 : } -; 219 : #endif // defined(_M_IX86) || defined(_M_X64) -; 220 : -; 221 : ::operator delete(_Ptr, _Bytes); - - 0005b 48 8b 95 e8 00 - 00 00 mov rdx, QWORD PTR _Bytes$[rbp] - 00062 48 8b 8d e0 00 - 00 00 mov rcx, QWORD PTR _Ptr$[rbp] - 00069 e8 00 00 00 00 call ??3@YAXPEAX_K@Z ; operator delete - 0006e 90 npad 1 - -; 222 : } - - 0006f 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 00076 5f pop rdi - 00077 5d pop rbp - 00078 c3 ret 0 -??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z ENDP ; std::_Deallocate<16,0> -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z + DD imagerel $ip2state$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$unwind$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z DD 025053419H + DD 0118231dH + DD 07011001dH + DD 05010H + DD imagerel __CxxFrameHandler4 + DD imagerel $cppxdata$?__empty_global_delete@@YAXPEAX_KW4align_val_t@std@@@Z +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$ip2state$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DB 02H + DB 00H + DB 00H +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$cppxdata$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DB 060H + DD imagerel $ip2state$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$unwind$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z DD 025052f19H + DD 01132318H + DD 0700c001dH + DD 0500bH + DD imagerel __CxxFrameHandler4 + DD imagerel $cppxdata$?__empty_global_delete@@YAXPEAXW4align_val_t@std@@@Z +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$ip2state$?__empty_global_delete@@YAXPEAX_K@Z DB 02H + DB 00H + DB 00H +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$cppxdata$?__empty_global_delete@@YAXPEAX_K@Z DB 060H + DD imagerel $ip2state$?__empty_global_delete@@YAXPEAX_K@Z +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$unwind$?__empty_global_delete@@YAXPEAX_K@Z DD 025052f19H + DD 01132318H + DD 0700c001dH + DD 0500bH + DD imagerel __CxxFrameHandler4 + DD imagerel $cppxdata$?__empty_global_delete@@YAXPEAX_K@Z +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$ip2state$?__empty_global_delete@@YAXPEAX@Z DB 02H + DB 00H + DB 00H +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$cppxdata$?__empty_global_delete@@YAXPEAX@Z DB 060H + DD imagerel $ip2state$?__empty_global_delete@@YAXPEAX@Z +xdata ENDS +; COMDAT xdata +xdata SEGMENT +$unwind$?__empty_global_delete@@YAXPEAX@Z DD 025052a19H + DD 010e2313H + DD 07007001dH + DD 05006H + DD imagerel __CxxFrameHandler4 + DD imagerel $cppxdata$?__empty_global_delete@@YAXPEAX@Z +xdata ENDS +; Function compile flags: /Odt +; COMDAT __JustMyCode_Default _TEXT SEGMENT -_First$ = 224 -_Last$ = 232 -_Al$ = 240 -??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z PROC ; std::_Destroy_range >, COMDAT - -; 955 : void _Destroy_range(_Alloc_ptr_t<_Alloc> _First, const _Alloc_ptr_t<_Alloc> _Last, _Alloc& _Al) noexcept { - -$LN3: - 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 - 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000f 55 push rbp - 00010 57 push rdi - 00011 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 00018 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 0001d 48 8b fc mov rdi, rsp - 00020 b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 00025 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 0002a f3 ab rep stosd - 0002c 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 00034 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 0003b e8 00 00 00 00 call __CheckForDebuggerJustMyCode - 00040 90 npad 1 - -; 956 : // note that this is an optimization for debug mode codegen; in release mode the BE removes all of this -; 957 : using _Ty = typename _Alloc::value_type; -; 958 : if _CONSTEXPR_IF (!conjunction_v, _Uses_default_destroy<_Alloc, _Ty*>>) { -; 959 : for (; _First != _Last; ++_First) { -; 960 : allocator_traits<_Alloc>::destroy(_Al, _Unfancy(_First)); -; 961 : } -; 962 : } -; 963 : } - - 00041 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 00048 5f pop rdi - 00049 5d pop rbp - 0004a c3 ret 0 -??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z ENDP ; std::_Destroy_range > +__JustMyCode_Default PROC ; COMDAT + 00000 c2 00 00 ret 0 +__JustMyCode_Default ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\ostream @@ -2182,150 +1482,6 @@ $LN2@Sentry_bas: ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z ENDP ; std::basic_ostream >::_Sentry_base::_Sentry_base _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z -_TEXT SEGMENT -_Al$ = 224 -_Ptr$ = 232 -??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z PROC ; std::_Delete_plain_internal >, COMDAT - -; 1026 : void _Delete_plain_internal(_Alloc& _Al, typename _Alloc::value_type* const _Ptr) noexcept { - -$LN3: - 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000a 55 push rbp - 0000b 57 push rdi - 0000c 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 00013 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00018 48 8b fc mov rdi, rsp - 0001b b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 00020 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00025 f3 ab rep stosd - 00027 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 0002f 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 1027 : // destroy *_Ptr in place, then deallocate _Ptr using _Al; used for internal container types the user didn't name -; 1028 : using _Ty = typename _Alloc::value_type; -; 1029 : _Ptr->~_Ty(); -; 1030 : _Deallocate_plain(_Al, _Ptr); - - 0003b 48 8b 95 e8 00 - 00 00 mov rdx, QWORD PTR _Ptr$[rbp] - 00042 48 8b 8d e0 00 - 00 00 mov rcx, QWORD PTR _Al$[rbp] - 00049 e8 00 00 00 00 call ??$_Deallocate_plain@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z ; std::_Deallocate_plain > - 0004e 90 npad 1 - -; 1031 : } - - 0004f 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 00056 5f pop rdi - 00057 5d pop rbp - 00058 c3 ret 0 -??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z ENDP ; std::_Delete_plain_internal > -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\utility -; COMDAT ??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z -_TEXT SEGMENT -_Old_val$ = 8 -_Val$ = 256 -_New_val$ = 264 -??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z PROC ; std::exchange, COMDAT - -; 597 : conjunction_v, is_nothrow_assignable<_Ty&, _Other>>) /* strengthened */ { - -$LN3: - 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000a 55 push rbp - 0000b 57 push rdi - 0000c 48 81 ec 08 01 - 00 00 sub rsp, 264 ; 00000108H - 00013 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00018 48 8b fc mov rdi, rsp - 0001b b9 42 00 00 00 mov ecx, 66 ; 00000042H - 00020 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00025 f3 ab rep stosd - 00027 48 8b 8c 24 28 - 01 00 00 mov rcx, QWORD PTR [rsp+296] - 0002f 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__CF1C1A3F_utility - 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 598 : // assign _New_val to _Val, return previous _Val -; 599 : _Ty _Old_val = static_cast<_Ty&&>(_Val); - - 0003b 48 8b 85 00 01 - 00 00 mov rax, QWORD PTR _Val$[rbp] - 00042 48 8b 00 mov rax, QWORD PTR [rax] - 00045 48 89 45 08 mov QWORD PTR _Old_val$[rbp], rax - -; 600 : _Val = static_cast<_Other&&>(_New_val); - - 00049 48 8b 85 00 01 - 00 00 mov rax, QWORD PTR _Val$[rbp] - 00050 48 8b 8d 08 01 - 00 00 mov rcx, QWORD PTR _New_val$[rbp] - 00057 48 8b 09 mov rcx, QWORD PTR [rcx] - 0005a 48 89 08 mov QWORD PTR [rax], rcx - -; 601 : return _Old_val; - - 0005d 48 8b 45 08 mov rax, QWORD PTR _Old_val$[rbp] - -; 602 : } - - 00061 48 8d a5 e8 00 - 00 00 lea rsp, QWORD PTR [rbp+232] - 00068 5f pop rdi - 00069 5d pop rbp - 0006a c3 ret 0 -??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z ENDP ; std::exchange -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z -_TEXT SEGMENT -this$ = 224 -__formal$ = 232 -??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z PROC ; std::allocator::allocator, COMDAT - -; 799 : constexpr allocator(const allocator<_Other>&) noexcept {} - -$LN3: - 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000a 55 push rbp - 0000b 57 push rdi - 0000c 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 00013 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00018 48 8b fc mov rdi, rsp - 0001b b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 00020 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00025 f3 ab rep stosd - 00027 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 0002f 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - 0003b 48 8b 85 e0 00 - 00 00 mov rax, QWORD PTR this$[rbp] - 00042 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 00049 5f pop rdi - 0004a 5d pop rbp - 0004b c3 ret 0 -??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z ENDP ; std::allocator::allocator -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI ; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\iomanip ; COMDAT ??$?6DU?$char_traits@D@std@@D@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Fillobj@D@0@@Z _TEXT SEGMENT @@ -3242,53 +2398,64 @@ text$x ENDS ; File C:\$Fanta\code-virtualizer\CodeVirtualizer\Main.cpp ; COMDAT main _TEXT SEGMENT -Block$ = 8 -NewLink$ = 88 -AssembledSize$ = 116 -AssembledBlock$ = 152 -Tb$ = 184 -i$5 = 212 -$T6 = 440 -$T7 = 472 -$T8 = 500 -$T9 = 532 -$T10 = 568 -tv152 = 600 -tv88 = 600 -tv154 = 608 -tv157 = 616 -tv159 = 624 -tv170 = 632 -tv168 = 640 -__$ArrayPad$ = 648 +Return1776$ = 8 +RetInst$ = 40 +Pre1$ = 72 +Post1$ = 104 +Pre2$ = 136 +Post2$ = 168 +i$4 = 196 +i$5 = 228 +AsmLen$ = 260 +Asm$ = 296 +Tb$ = 328 +i$6 = 356 +ExecBuffer$ = 392 +$T7 = 808 +$T8 = 840 +$T9 = 872 +$T10 = 904 +$T11 = 932 +$T12 = 968 +tv183 = 996 +tv172 = 996 +tv206 = 1000 +tv128 = 1000 +tv82 = 1000 +tv208 = 1008 +tv211 = 1016 +tv213 = 1024 +tv224 = 1032 +tv222 = 1040 +__$ArrayPad$ = 1048 main PROC ; COMDAT -; 43 : { +; 44 : { -$LN14: +$LN19: 00000 40 55 push rbp 00002 57 push rdi - 00003 48 81 ec b8 02 - 00 00 sub rsp, 696 ; 000002b8H + 00003 48 81 ec 48 04 + 00 00 sub rsp, 1096 ; 00000448H 0000a 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 0000f 48 8b fc mov rdi, rsp - 00012 b9 ae 00 00 00 mov ecx, 174 ; 000000aeH + 00012 b9 12 01 00 00 mov ecx, 274 ; 00000112H 00017 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH 0001c f3 ab rep stosd 0001e 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 00025 48 33 c5 xor rax, rbp - 00028 48 89 85 88 02 + 00028 48 89 85 18 04 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax 0002f 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__4031338C_Main@cpp 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 44 : XedTablesInit(); +; 45 : XedTablesInit(); 0003b e8 00 00 00 00 call xed_tables_init -; 45 : srand(time(NULL)); +; 46 : srand(time(NULL)); 00040 33 c9 xor ecx, ecx 00042 e8 00 00 00 00 call time @@ -3296,276 +2463,513 @@ $LN14: 00049 ff 15 00 00 00 00 call QWORD PTR __imp_srand -; 46 : ; 47 : -; 48 : NATIVE_CODE_BLOCK Block; +; 48 : PNATIVE_CODE_LINK Return1776 = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST, meme1, sizeof(meme1)); + + 0004f b9 f0 00 00 00 mov ecx, 240 ; 000000f0H + 00054 e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new + 00059 48 89 85 48 03 + 00 00 mov QWORD PTR $T8[rbp], rax + 00060 48 83 bd 48 03 + 00 00 00 cmp QWORD PTR $T8[rbp], 0 + 00068 74 27 je SHORT $LN13@main + 0006a 41 b9 05 00 00 + 00 mov r9d, 5 + 00070 4c 8d 05 00 00 + 00 00 lea r8, OFFSET FLAT:?meme1@@3PAEA ; meme1 + 00077 ba 04 00 00 00 mov edx, 4 + 0007c 48 8b 8d 48 03 + 00 00 mov rcx, QWORD PTR $T8[rbp] + 00083 e8 00 00 00 00 call ??0_NATIVE_CODE_LINK@@QEAA@KPEAXK@Z ; _NATIVE_CODE_LINK::_NATIVE_CODE_LINK + 00088 48 89 85 e8 03 + 00 00 mov QWORD PTR tv82[rbp], rax + 0008f eb 0b jmp SHORT $LN14@main +$LN13@main: + 00091 48 c7 85 e8 03 + 00 00 00 00 00 + 00 mov QWORD PTR tv82[rbp], 0 +$LN14@main: + 0009c 48 8b 85 e8 03 + 00 00 mov rax, QWORD PTR tv82[rbp] + 000a3 48 89 85 28 03 + 00 00 mov QWORD PTR $T7[rbp], rax + 000aa 48 8b 85 28 03 + 00 00 mov rax, QWORD PTR $T7[rbp] + 000b1 48 89 45 08 mov QWORD PTR Return1776$[rbp], rax + +; 49 : PNATIVE_CODE_LINK RetInst = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST, meme2, sizeof(meme2)); + + 000b5 b9 f0 00 00 00 mov ecx, 240 ; 000000f0H + 000ba e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new + 000bf 48 89 85 88 03 + 00 00 mov QWORD PTR $T10[rbp], rax + 000c6 48 83 bd 88 03 + 00 00 00 cmp QWORD PTR $T10[rbp], 0 + 000ce 74 27 je SHORT $LN15@main + 000d0 41 b9 01 00 00 + 00 mov r9d, 1 + 000d6 4c 8d 05 00 00 + 00 00 lea r8, OFFSET FLAT:?meme2@@3PAEA ; meme2 + 000dd ba 04 00 00 00 mov edx, 4 + 000e2 48 8b 8d 88 03 + 00 00 mov rcx, QWORD PTR $T10[rbp] + 000e9 e8 00 00 00 00 call ??0_NATIVE_CODE_LINK@@QEAA@KPEAXK@Z ; _NATIVE_CODE_LINK::_NATIVE_CODE_LINK + 000ee 48 89 85 e8 03 + 00 00 mov QWORD PTR tv128[rbp], rax + 000f5 eb 0b jmp SHORT $LN16@main +$LN15@main: + 000f7 48 c7 85 e8 03 + 00 00 00 00 00 + 00 mov QWORD PTR tv128[rbp], 0 +$LN16@main: + 00102 48 8b 85 e8 03 + 00 00 mov rax, QWORD PTR tv128[rbp] + 00109 48 89 85 68 03 + 00 00 mov QWORD PTR $T9[rbp], rax + 00110 48 8b 85 68 03 + 00 00 mov rax, QWORD PTR $T9[rbp] + 00117 48 89 45 28 mov QWORD PTR RetInst$[rbp], rax + +; 50 : PNATIVE_CODE_BLOCK Pre1 = JitEmitPreRipMov(Return1776); + + 0011b 33 d2 xor edx, edx + 0011d 48 8b 4d 08 mov rcx, QWORD PTR Return1776$[rbp] + 00121 e8 00 00 00 00 call ?JitEmitPreRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z ; JitEmitPreRipMov + 00126 48 89 45 48 mov QWORD PTR Pre1$[rbp], rax + +; 51 : PNATIVE_CODE_BLOCK Post1 = JitEmitPostRipMov(Return1776); + + 0012a 33 d2 xor edx, edx + 0012c 48 8b 4d 08 mov rcx, QWORD PTR Return1776$[rbp] + 00130 e8 00 00 00 00 call ?JitEmitPostRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z ; JitEmitPostRipMov + 00135 48 89 45 68 mov QWORD PTR Post1$[rbp], rax + +; 52 : PNATIVE_CODE_BLOCK Pre2 = JitEmitPreRipMov(RetInst); + + 00139 33 d2 xor edx, edx + 0013b 48 8b 4d 28 mov rcx, QWORD PTR RetInst$[rbp] + 0013f e8 00 00 00 00 call ?JitEmitPreRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z ; JitEmitPreRipMov + 00144 48 89 85 88 00 + 00 00 mov QWORD PTR Pre2$[rbp], rax + +; 53 : PNATIVE_CODE_BLOCK Post2 = JitEmitPostRipMov(RetInst); + + 0014b 33 d2 xor edx, edx + 0014d 48 8b 4d 28 mov rcx, QWORD PTR RetInst$[rbp] + 00151 e8 00 00 00 00 call ?JitEmitPostRipMov@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@H@Z ; JitEmitPostRipMov + 00156 48 89 85 a8 00 + 00 00 mov QWORD PTR Post2$[rbp], rax - 0004f 48 8d 4d 08 lea rcx, QWORD PTR Block$[rbp] - 00053 e8 00 00 00 00 call ??0_NATIVE_CODE_BLOCK@@QEAA@XZ ; _NATIVE_CODE_BLOCK::_NATIVE_CODE_BLOCK - 00058 90 npad 1 +; 54 : +; 55 : NcAppendToBlock(Pre1, Return1776); -; 49 : NcDisassemble(&Block, TestBuffer, TestBufferSize); + 0015d 48 8b 55 08 mov rdx, QWORD PTR Return1776$[rbp] + 00161 48 8b 4d 48 mov rcx, QWORD PTR Pre1$[rbp] + 00165 e8 00 00 00 00 call ?NcAppendToBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@@Z ; NcAppendToBlock - 00059 44 8b 05 00 00 - 00 00 mov r8d, DWORD PTR ?TestBufferSize@@3KA ; TestBufferSize - 00060 48 8d 15 00 00 - 00 00 lea rdx, OFFSET FLAT:?TestBuffer@@3PAEA ; TestBuffer - 00067 48 8d 4d 08 lea rcx, QWORD PTR Block$[rbp] - 0006b e8 00 00 00 00 call ?NcDisassemble@@YAHPEAU_NATIVE_CODE_BLOCK@@PEAXK@Z ; NcDisassemble +; 56 : NcInsertBlockAfter(Pre1->End, Post1, 0); -; 50 : PNATIVE_CODE_LINK NewLink = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST, meme1, sizeof(meme1)); + 0016a 45 33 c0 xor r8d, r8d + 0016d 48 8b 55 68 mov rdx, QWORD PTR Post1$[rbp] + 00171 48 8b 45 48 mov rax, QWORD PTR Pre1$[rbp] + 00175 48 8b 48 08 mov rcx, QWORD PTR [rax+8] + 00179 e8 00 00 00 00 call ?NcInsertBlockAfter@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z ; NcInsertBlockAfter - 00070 b9 f0 00 00 00 mov ecx, 240 ; 000000f0H - 00075 e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new - 0007a 48 89 85 d8 01 - 00 00 mov QWORD PTR $T7[rbp], rax - 00081 48 83 bd d8 01 - 00 00 00 cmp QWORD PTR $T7[rbp], 0 - 00089 74 27 je SHORT $LN8@main - 0008b 41 b9 02 00 00 - 00 mov r9d, 2 - 00091 4c 8d 05 00 00 - 00 00 lea r8, OFFSET FLAT:?meme1@@3PAEA ; meme1 - 00098 ba 04 00 00 00 mov edx, 4 - 0009d 48 8b 8d d8 01 - 00 00 mov rcx, QWORD PTR $T7[rbp] - 000a4 e8 00 00 00 00 call ??0_NATIVE_CODE_LINK@@QEAA@KPEAXK@Z ; _NATIVE_CODE_LINK::_NATIVE_CODE_LINK - 000a9 48 89 85 58 02 - 00 00 mov QWORD PTR tv88[rbp], rax - 000b0 eb 0b jmp SHORT $LN9@main -$LN8@main: - 000b2 48 c7 85 58 02 - 00 00 00 00 00 - 00 mov QWORD PTR tv88[rbp], 0 -$LN9@main: - 000bd 48 8b 85 58 02 - 00 00 mov rax, QWORD PTR tv88[rbp] - 000c4 48 89 85 b8 01 - 00 00 mov QWORD PTR $T6[rbp], rax - 000cb 48 8b 85 b8 01 - 00 00 mov rax, QWORD PTR $T6[rbp] - 000d2 48 89 45 58 mov QWORD PTR NewLink$[rbp], rax +; 57 : Pre1->End = Post1->End; -; 51 : -; 52 : NcInsertLinkBefore(Block.End->Prev->Prev->Prev->Prev, NewLink); + 0017e 48 8b 45 48 mov rax, QWORD PTR Pre1$[rbp] + 00182 48 8b 4d 68 mov rcx, QWORD PTR Post1$[rbp] + 00186 48 8b 49 08 mov rcx, QWORD PTR [rcx+8] + 0018a 48 89 48 08 mov QWORD PTR [rax+8], rcx - 000d6 48 8b 45 10 mov rax, QWORD PTR Block$[rbp+8] - 000da 48 8b 40 08 mov rax, QWORD PTR [rax+8] - 000de 48 8b 40 08 mov rax, QWORD PTR [rax+8] - 000e2 48 8b 40 08 mov rax, QWORD PTR [rax+8] - 000e6 48 8b 55 58 mov rdx, QWORD PTR NewLink$[rbp] - 000ea 48 8b 48 08 mov rcx, QWORD PTR [rax+8] - 000ee e8 00 00 00 00 call ?NcInsertLinkBefore@@YAXPEAU_NATIVE_CODE_LINK@@0@Z ; NcInsertLinkBefore +; 58 : NcInsertBlockAfter(Pre1->End, Pre2, 0); -; 53 : -; 54 : -; 55 : ULONG AssembledSize; -; 56 : PVOID AssembledBlock = NcAssemble(&Block, &AssembledSize); - - 000f3 48 8d 55 74 lea rdx, QWORD PTR AssembledSize$[rbp] - 000f7 48 8d 4d 08 lea rcx, QWORD PTR Block$[rbp] - 000fb e8 00 00 00 00 call ?NcAssemble@@YAPEAXPEAU_NATIVE_CODE_BLOCK@@PEAK@Z ; NcAssemble - 00100 48 89 85 98 00 - 00 00 mov QWORD PTR AssembledBlock$[rbp], rax - -; 57 : if (!AssembledBlock || !AssembledSize) - - 00107 48 83 bd 98 00 - 00 00 00 cmp QWORD PTR AssembledBlock$[rbp], 0 - 0010f 74 06 je SHORT $LN6@main - 00111 83 7d 74 00 cmp DWORD PTR AssembledSize$[rbp], 0 - 00115 75 37 jne SHORT $LN5@main -$LN6@main: + 0018e 45 33 c0 xor r8d, r8d + 00191 48 8b 95 88 00 + 00 00 mov rdx, QWORD PTR Pre2$[rbp] + 00198 48 8b 45 48 mov rax, QWORD PTR Pre1$[rbp] + 0019c 48 8b 48 08 mov rcx, QWORD PTR [rax+8] + 001a0 e8 00 00 00 00 call ?NcInsertBlockAfter@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z ; NcInsertBlockAfter -; 58 : { -; 59 : printf("Something failed nicka.\n"); +; 59 : Pre1->End = Pre2->End; - 00117 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_0BJ@LHKOPLNN@Something?5failed?5nicka?4?6@ - 0011e e8 00 00 00 00 call printf + 001a5 48 8b 45 48 mov rax, QWORD PTR Pre1$[rbp] + 001a9 48 8b 8d 88 00 + 00 00 mov rcx, QWORD PTR Pre2$[rbp] + 001b0 48 8b 49 08 mov rcx, QWORD PTR [rcx+8] + 001b4 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 60 : system("pause"); +; 60 : NcAppendToBlock(Pre1, RetInst); - 00123 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_05PDJBBECF@pause@ - 0012a ff 15 00 00 00 - 00 call QWORD PTR __imp_system + 001b8 48 8b 55 28 mov rdx, QWORD PTR RetInst$[rbp] + 001bc 48 8b 4d 48 mov rcx, QWORD PTR Pre1$[rbp] + 001c0 e8 00 00 00 00 call ?NcAppendToBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@@Z ; NcAppendToBlock -; 61 : return -1; +; 61 : NcInsertBlockAfter(Pre1->End, Post2, 0); - 00130 c7 85 f4 01 00 - 00 ff ff ff ff mov DWORD PTR $T8[rbp], -1 - 0013a 48 8d 4d 08 lea rcx, QWORD PTR Block$[rbp] - 0013e e8 00 00 00 00 call ??1_NATIVE_CODE_BLOCK@@QEAA@XZ - 00143 8b 85 f4 01 00 - 00 mov eax, DWORD PTR $T8[rbp] - 00149 e9 09 01 00 00 jmp $LN12@main -$LN5@main: + 001c5 45 33 c0 xor r8d, r8d + 001c8 48 8b 95 a8 00 + 00 00 mov rdx, QWORD PTR Post2$[rbp] + 001cf 48 8b 45 48 mov rax, QWORD PTR Pre1$[rbp] + 001d3 48 8b 48 08 mov rcx, QWORD PTR [rax+8] + 001d7 e8 00 00 00 00 call ?NcInsertBlockAfter@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z ; NcInsertBlockAfter -; 62 : } -; 63 : PUCHAR Tb = (PUCHAR)AssembledBlock; +; 62 : Pre1->End = Post2->End; - 0014e 48 8b 85 98 00 - 00 00 mov rax, QWORD PTR AssembledBlock$[rbp] - 00155 48 89 85 b8 00 - 00 00 mov QWORD PTR Tb$[rbp], rax + 001dc 48 8b 45 48 mov rax, QWORD PTR Pre1$[rbp] + 001e0 48 8b 8d a8 00 + 00 00 mov rcx, QWORD PTR Post2$[rbp] + 001e7 48 8b 49 08 mov rcx, QWORD PTR [rcx+8] + 001eb 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 64 : for (uint32_t i = 0; i < AssembledSize; i++) +; 63 : +; 64 : /*Pre->Start = Return1776; +; 65 : Pre->End = Return1776;*/ +; 66 : +; 67 : for (ULONG i = 0; i < Return1776->RawDataSize; i++) - 0015c c7 85 d4 00 00 - 00 00 00 00 00 mov DWORD PTR i$5[rbp], 0 - 00166 eb 0e jmp SHORT $LN4@main + 001ef c7 85 c4 00 00 + 00 00 00 00 00 mov DWORD PTR i$4[rbp], 0 + 001f9 eb 0e jmp SHORT $LN4@main $LN2@main: - 00168 8b 85 d4 00 00 + 001fb 8b 85 c4 00 00 + 00 mov eax, DWORD PTR i$4[rbp] + 00201 ff c0 inc eax + 00203 89 85 c4 00 00 + 00 mov DWORD PTR i$4[rbp], eax +$LN4@main: + 00209 48 8b 45 08 mov rax, QWORD PTR Return1776$[rbp] + 0020d 8b 40 28 mov eax, DWORD PTR [rax+40] + 00210 39 85 c4 00 00 + 00 cmp DWORD PTR i$4[rbp], eax + 00216 73 26 jae SHORT $LN3@main + +; 68 : Return1776->RawData[i] = (UCHAR)rand(); + + 00218 ff 15 00 00 00 + 00 call QWORD PTR __imp_rand + 0021e 88 85 e4 03 00 + 00 mov BYTE PTR tv172[rbp], al + 00224 8b 85 c4 00 00 + 00 mov eax, DWORD PTR i$4[rbp] + 0022a 48 8b 4d 08 mov rcx, QWORD PTR Return1776$[rbp] + 0022e 48 8b 49 20 mov rcx, QWORD PTR [rcx+32] + 00232 0f b6 95 e4 03 + 00 00 movzx edx, BYTE PTR tv172[rbp] + 00239 88 14 01 mov BYTE PTR [rcx+rax], dl + 0023c eb bd jmp SHORT $LN2@main +$LN3@main: + +; 69 : for (ULONG i = 0; i < RetInst->RawDataSize; i++) + + 0023e c7 85 e4 00 00 + 00 00 00 00 00 mov DWORD PTR i$5[rbp], 0 + 00248 eb 0e jmp SHORT $LN7@main +$LN5@main: + 0024a 8b 85 e4 00 00 00 mov eax, DWORD PTR i$5[rbp] - 0016e ff c0 inc eax - 00170 89 85 d4 00 00 + 00250 ff c0 inc eax + 00252 89 85 e4 00 00 00 mov DWORD PTR i$5[rbp], eax -$LN4@main: - 00176 8b 45 74 mov eax, DWORD PTR AssembledSize$[rbp] - 00179 39 85 d4 00 00 +$LN7@main: + 00258 48 8b 45 28 mov rax, QWORD PTR RetInst$[rbp] + 0025c 8b 40 28 mov eax, DWORD PTR [rax+40] + 0025f 39 85 e4 00 00 00 cmp DWORD PTR i$5[rbp], eax - 0017f 0f 83 b5 00 00 - 00 jae $LN3@main + 00265 73 26 jae SHORT $LN6@main + +; 70 : RetInst->RawData[i] = (UCHAR)rand(); + + 00267 ff 15 00 00 00 + 00 call QWORD PTR __imp_rand + 0026d 88 85 e4 03 00 + 00 mov BYTE PTR tv183[rbp], al + 00273 8b 85 e4 00 00 + 00 mov eax, DWORD PTR i$5[rbp] + 00279 48 8b 4d 28 mov rcx, QWORD PTR RetInst$[rbp] + 0027d 48 8b 49 20 mov rcx, QWORD PTR [rcx+32] + 00281 0f b6 95 e4 03 + 00 00 movzx edx, BYTE PTR tv183[rbp] + 00288 88 14 01 mov BYTE PTR [rcx+rax], dl + 0028b eb bd jmp SHORT $LN5@main +$LN6@main: + +; 71 : +; 72 : +; 73 : /*NcDebugPrint(Pre); +; 74 : NcPrintBlockCode(Pre);*/ +; 75 : +; 76 : ULONG AsmLen; +; 77 : PVOID Asm = NcAssemble(Pre1, &AsmLen); + + 0028d 48 8d 95 04 01 + 00 00 lea rdx, QWORD PTR AsmLen$[rbp] + 00294 48 8b 4d 48 mov rcx, QWORD PTR Pre1$[rbp] + 00298 e8 00 00 00 00 call ?NcAssemble@@YAPEAXPEAU_NATIVE_CODE_BLOCK@@PEAK@Z ; NcAssemble + 0029d 48 89 85 28 01 + 00 00 mov QWORD PTR Asm$[rbp], rax + +; 78 : PUCHAR Tb = (PUCHAR)Asm; + + 002a4 48 8b 85 28 01 + 00 00 mov rax, QWORD PTR Asm$[rbp] + 002ab 48 89 85 48 01 + 00 00 mov QWORD PTR Tb$[rbp], rax -; 65 : { -; 66 : std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)Tb[i] << ' '; +; 79 : for (uint32_t i = 0; i < AsmLen; i++) - 00185 48 8d 15 00 00 + 002b2 c7 85 64 01 00 + 00 00 00 00 00 mov DWORD PTR i$6[rbp], 0 + 002bc eb 0e jmp SHORT $LN10@main +$LN8@main: + 002be 8b 85 64 01 00 + 00 mov eax, DWORD PTR i$6[rbp] + 002c4 ff c0 inc eax + 002c6 89 85 64 01 00 + 00 mov DWORD PTR i$6[rbp], eax +$LN10@main: + 002cc 8b 85 04 01 00 + 00 mov eax, DWORD PTR AsmLen$[rbp] + 002d2 39 85 64 01 00 + 00 cmp DWORD PTR i$6[rbp], eax + 002d8 0f 83 b5 00 00 + 00 jae $LN9@main + +; 80 : { +; 81 : std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)Tb[i] << ' '; + + 002de 48 8d 15 00 00 00 00 lea rdx, OFFSET FLAT:?hex@std@@YAAEAVios_base@1@AEAV21@@Z ; std::hex - 0018c 48 8b 0d 00 00 + 002e5 48 8b 0d 00 00 00 00 mov rcx, QWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A - 00193 ff 15 00 00 00 + 002ec ff 15 00 00 00 00 call QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z - 00199 48 89 85 58 02 - 00 00 mov QWORD PTR tv152[rbp], rax - 001a0 ba 02 00 00 00 mov edx, 2 - 001a5 48 8d 8d 38 02 - 00 00 lea rcx, QWORD PTR $T10[rbp] - 001ac e8 00 00 00 00 call ?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z ; std::setw - 001b1 48 89 85 60 02 - 00 00 mov QWORD PTR tv154[rbp], rax - 001b8 48 8b 95 60 02 - 00 00 mov rdx, QWORD PTR tv154[rbp] - 001bf 48 8b 8d 58 02 - 00 00 mov rcx, QWORD PTR tv152[rbp] - 001c6 e8 00 00 00 00 call ??$?6DU?$char_traits@D@std@@_J@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Smanip@_J@0@@Z ; std::operator<<,__int64> - 001cb 48 89 85 68 02 - 00 00 mov QWORD PTR tv157[rbp], rax - 001d2 b2 30 mov dl, 48 ; 00000030H - 001d4 48 8d 8d 14 02 - 00 00 lea rcx, QWORD PTR $T9[rbp] - 001db e8 00 00 00 00 call ??$setfill@D@std@@YA?AU?$_Fillobj@D@0@D@Z ; std::setfill - 001e0 48 89 85 70 02 - 00 00 mov QWORD PTR tv159[rbp], rax - 001e7 48 8b 95 70 02 - 00 00 mov rdx, QWORD PTR tv159[rbp] - 001ee 48 8b 8d 68 02 - 00 00 mov rcx, QWORD PTR tv157[rbp] - 001f5 e8 00 00 00 00 call ??$?6DU?$char_traits@D@std@@D@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Fillobj@D@0@@Z ; std::operator<<,char> - 001fa 48 89 85 78 02 - 00 00 mov QWORD PTR tv170[rbp], rax - 00201 8b 85 d4 00 00 - 00 mov eax, DWORD PTR i$5[rbp] - 00207 48 8b 8d b8 00 + 002f2 48 89 85 e8 03 + 00 00 mov QWORD PTR tv206[rbp], rax + 002f9 ba 02 00 00 00 mov edx, 2 + 002fe 48 8d 8d c8 03 + 00 00 lea rcx, QWORD PTR $T12[rbp] + 00305 e8 00 00 00 00 call ?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z ; std::setw + 0030a 48 89 85 f0 03 + 00 00 mov QWORD PTR tv208[rbp], rax + 00311 48 8b 95 f0 03 + 00 00 mov rdx, QWORD PTR tv208[rbp] + 00318 48 8b 8d e8 03 + 00 00 mov rcx, QWORD PTR tv206[rbp] + 0031f e8 00 00 00 00 call ??$?6DU?$char_traits@D@std@@_J@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Smanip@_J@0@@Z ; std::operator<<,__int64> + 00324 48 89 85 f8 03 + 00 00 mov QWORD PTR tv211[rbp], rax + 0032b b2 30 mov dl, 48 ; 00000030H + 0032d 48 8d 8d a4 03 + 00 00 lea rcx, QWORD PTR $T11[rbp] + 00334 e8 00 00 00 00 call ??$setfill@D@std@@YA?AU?$_Fillobj@D@0@D@Z ; std::setfill + 00339 48 89 85 00 04 + 00 00 mov QWORD PTR tv213[rbp], rax + 00340 48 8b 95 00 04 + 00 00 mov rdx, QWORD PTR tv213[rbp] + 00347 48 8b 8d f8 03 + 00 00 mov rcx, QWORD PTR tv211[rbp] + 0034e e8 00 00 00 00 call ??$?6DU?$char_traits@D@std@@D@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Fillobj@D@0@@Z ; std::operator<<,char> + 00353 48 89 85 08 04 + 00 00 mov QWORD PTR tv224[rbp], rax + 0035a 8b 85 64 01 00 + 00 mov eax, DWORD PTR i$6[rbp] + 00360 48 8b 8d 48 01 00 00 mov rcx, QWORD PTR Tb$[rbp] - 0020e 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] - 00212 89 85 80 02 00 - 00 mov DWORD PTR tv168[rbp], eax - 00218 8b 95 80 02 00 - 00 mov edx, DWORD PTR tv168[rbp] - 0021e 48 8b 8d 78 02 - 00 00 mov rcx, QWORD PTR tv170[rbp] - 00225 ff 15 00 00 00 + 00367 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] + 0036b 89 85 10 04 00 + 00 mov DWORD PTR tv222[rbp], eax + 00371 8b 95 10 04 00 + 00 mov edx, DWORD PTR tv222[rbp] + 00377 48 8b 8d 08 04 + 00 00 mov rcx, QWORD PTR tv224[rbp] + 0037e ff 15 00 00 00 00 call QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z - 0022b b2 20 mov dl, 32 ; 00000020H - 0022d 48 8b c8 mov rcx, rax - 00230 e8 00 00 00 00 call ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z ; std::operator<< > + 00384 b2 20 mov dl, 32 ; 00000020H + 00386 48 8b c8 mov rcx, rax + 00389 e8 00 00 00 00 call ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z ; std::operator<< > -; 67 : } +; 82 : } - 00235 e9 2e ff ff ff jmp $LN2@main -$LN3@main: + 0038e e9 2b ff ff ff jmp $LN8@main +$LN9@main: -; 68 : -; 69 : -; 70 : //PNATIVE_CODE_BLOCK OpaqueBranch = ObfGenOpaqueBranch(Block.Start, Block.End); -; 71 : //NcDebugPrint(OpaqueBranch); -; 72 : system("pause"); +; 83 : +; 84 : system("pause"); - 0023a 48 8d 0d 00 00 + 00393 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_05PDJBBECF@pause@ - 00241 ff 15 00 00 00 + 0039a ff 15 00 00 00 00 call QWORD PTR __imp_system - 00247 90 npad 1 -; 73 : -; 74 : -; 75 : -; 76 : -; 77 : /*NATIVE_CODE_LINK T; -; 78 : T.RawDataSize = 10; -; 79 : T.RawData = new UCHAR[10]; -; 80 : memset(T.RawData, 0xAA, 10); -; 81 : JIT_BITWISE_DATA Data; -; 82 : RtlSecureZeroMemory(&Data, sizeof(JIT_BITWISE_DATA)); -; 83 : PNATIVE_CODE_BLOCK NewBlock = JitEmitPreRipMov(&T); -; 84 : if (NewBlock) -; 85 : { -; 86 : printf("\n"); -; 87 : NcDebugPrint(NewBlock); -; 88 : printf("\n"); -; 89 : NcPrintBlockCode(NewBlock); -; 90 : } -; 91 : system("pause");*/ -; 92 : -; 93 : } - - 00248 48 8d 4d 08 lea rcx, QWORD PTR Block$[rbp] - 0024c e8 00 00 00 00 call ??1_NATIVE_CODE_BLOCK@@QEAA@XZ - 00251 eb 02 jmp SHORT $LN13@main - 00253 eb 02 jmp SHORT $LN12@main -$LN13@main: - 00255 33 c0 xor eax, eax -$LN12@main: - 00257 48 8b f8 mov rdi, rax - 0025a 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] - 0025e 48 8d 15 00 00 +; 85 : +; 86 : typedef ULONG64(*FnGet1776)(); +; 87 : FnGet1776 ExecBuffer = (FnGet1776)MakeExecutableBuffer(Asm, AsmLen); + + 003a0 8b 95 04 01 00 + 00 mov edx, DWORD PTR AsmLen$[rbp] + 003a6 48 8b 8d 28 01 + 00 00 mov rcx, QWORD PTR Asm$[rbp] + 003ad e8 00 00 00 00 call ?MakeExecutableBuffer@@YAPEAXPEAXK@Z ; MakeExecutableBuffer + 003b2 48 89 85 88 01 + 00 00 mov QWORD PTR ExecBuffer$[rbp], rax + +; 88 : if (ExecBuffer) + + 003b9 48 83 bd 88 01 + 00 00 00 cmp QWORD PTR ExecBuffer$[rbp], 0 + 003c1 74 54 je SHORT $LN11@main + +; 89 : { +; 90 : printf("The numba was: %X\n", ExecBuffer()); + + 003c3 ff 95 88 01 00 + 00 call QWORD PTR ExecBuffer$[rbp] + 003c9 48 8b d0 mov rdx, rax + 003cc 48 8d 0d 00 00 + 00 00 lea rcx, OFFSET FLAT:??_C@_0BD@FOIEMPBM@The?5numba?5was?3?5?$CFX?6@ + 003d3 e8 00 00 00 00 call printf + +; 91 : printf("The numba was: %X\n", ExecBuffer()); + + 003d8 ff 95 88 01 00 + 00 call QWORD PTR ExecBuffer$[rbp] + 003de 48 8b d0 mov rdx, rax + 003e1 48 8d 0d 00 00 + 00 00 lea rcx, OFFSET FLAT:??_C@_0BD@FOIEMPBM@The?5numba?5was?3?5?$CFX?6@ + 003e8 e8 00 00 00 00 call printf + +; 92 : +; 93 : printf("The numba was: %X\n", ExecBuffer()); + + 003ed ff 95 88 01 00 + 00 call QWORD PTR ExecBuffer$[rbp] + 003f3 48 8b d0 mov rdx, rax + 003f6 48 8d 0d 00 00 + 00 00 lea rcx, OFFSET FLAT:??_C@_0BD@FOIEMPBM@The?5numba?5was?3?5?$CFX?6@ + 003fd e8 00 00 00 00 call printf + +; 94 : +; 95 : printf("The numba was: %X\n", ExecBuffer()); + + 00402 ff 95 88 01 00 + 00 call QWORD PTR ExecBuffer$[rbp] + 00408 48 8b d0 mov rdx, rax + 0040b 48 8d 0d 00 00 + 00 00 lea rcx, OFFSET FLAT:??_C@_0BD@FOIEMPBM@The?5numba?5was?3?5?$CFX?6@ + 00412 e8 00 00 00 00 call printf +$LN11@main: + +; 96 : +; 97 : } +; 98 : +; 99 : +; 100 : //NcDebugPrint(Post); +; 101 : +; 102 : +; 103 : +; 104 : /*NATIVE_CODE_BLOCK Block; +; 105 : NcDisassemble(&Block, TestBuffer, TestBufferSize); +; 106 : PNATIVE_CODE_LINK NewLink = new NATIVE_CODE_LINK(CODE_FLAG_IS_INST, meme1, sizeof(meme1)); +; 107 : +; 108 : NcInsertLinkBefore(Block.End->Prev->Prev->Prev->Prev, NewLink); +; 109 : ULONG AssembledSize; +; 110 : PVOID AssembledBlock = NcAssemble(&Block, &AssembledSize); +; 111 : if (!AssembledBlock || !AssembledSize) +; 112 : { +; 113 : printf("Something failed nicka.\n"); +; 114 : system("pause"); +; 115 : return -1; +; 116 : } +; 117 : PUCHAR Tb = (PUCHAR)AssembledBlock; +; 118 : for (uint32_t i = 0; i < AssembledSize; i++) +; 119 : { +; 120 : std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)Tb[i] << ' '; +; 121 : } +; 122 : */ +; 123 : +; 124 : +; 125 : //PNATIVE_CODE_BLOCK OpaqueBranch = ObfGenOpaqueBranch(Block.Start, Block.End); +; 126 : //NcDebugPrint(OpaqueBranch); +; 127 : system("pause"); + + 00417 48 8d 0d 00 00 + 00 00 lea rcx, OFFSET FLAT:??_C@_05PDJBBECF@pause@ + 0041e ff 15 00 00 00 + 00 call QWORD PTR __imp_system + +; 128 : +; 129 : +; 130 : +; 131 : +; 132 : /*NATIVE_CODE_LINK T; +; 133 : T.RawDataSize = 10; +; 134 : T.RawData = new UCHAR[10]; +; 135 : memset(T.RawData, 0xAA, 10); +; 136 : JIT_BITWISE_DATA Data; +; 137 : RtlSecureZeroMemory(&Data, sizeof(JIT_BITWISE_DATA)); +; 138 : PNATIVE_CODE_BLOCK NewBlock = JitEmitPreRipMov(&T); +; 139 : if (NewBlock) +; 140 : { +; 141 : printf("\n"); +; 142 : NcDebugPrint(NewBlock); +; 143 : printf("\n"); +; 144 : NcPrintBlockCode(NewBlock); +; 145 : } +; 146 : system("pause");*/ +; 147 : +; 148 : } + + 00424 33 c0 xor eax, eax + 00426 8b f8 mov edi, eax + 00428 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] + 0042c 48 8d 15 00 00 00 00 lea rdx, OFFSET FLAT:main$rtcFrameData - 00265 e8 00 00 00 00 call _RTC_CheckStackVars - 0026a 48 8b c7 mov rax, rdi - 0026d 48 8b 8d 88 02 + 00433 e8 00 00 00 00 call _RTC_CheckStackVars + 00438 8b c7 mov eax, edi + 0043a 48 8b 8d 18 04 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] - 00274 48 33 cd xor rcx, rbp - 00277 e8 00 00 00 00 call __security_check_cookie - 0027c 48 8d a5 98 02 - 00 00 lea rsp, QWORD PTR [rbp+664] - 00283 5f pop rdi - 00284 5d pop rbp - 00285 c3 ret 0 + 00441 48 33 cd xor rcx, rbp + 00444 e8 00 00 00 00 call __security_check_cookie + 00449 48 8d a5 28 04 + 00 00 lea rsp, QWORD PTR [rbp+1064] + 00450 5f pop rdi + 00451 5d pop rbp + 00452 c3 ret 0 main ENDP _TEXT ENDS ; COMDAT text$x text$x SEGMENT -Block$ = 8 -NewLink$ = 88 -AssembledSize$ = 116 -AssembledBlock$ = 152 -Tb$ = 184 -i$5 = 212 -$T6 = 440 -$T7 = 472 -$T8 = 500 -$T9 = 532 -$T10 = 568 -tv152 = 600 -tv88 = 600 -tv154 = 608 -tv157 = 616 -tv159 = 624 -tv170 = 632 -tv168 = 640 -__$ArrayPad$ = 648 +Return1776$ = 8 +RetInst$ = 40 +Pre1$ = 72 +Post1$ = 104 +Pre2$ = 136 +Post2$ = 168 +i$4 = 196 +i$5 = 228 +AsmLen$ = 260 +Asm$ = 296 +Tb$ = 328 +i$6 = 356 +ExecBuffer$ = 392 +$T7 = 808 +$T8 = 840 +$T9 = 872 +$T10 = 904 +$T11 = 932 +$T12 = 968 +tv183 = 996 +tv172 = 996 +tv206 = 1000 +tv128 = 1000 +tv82 = 1000 +tv208 = 1008 +tv211 = 1016 +tv213 = 1024 +tv224 = 1032 +tv222 = 1040 +__$ArrayPad$ = 1048 main$dtor$0 PROC 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -3573,35 +2977,48 @@ main$dtor$0 PROC 0000b 57 push rdi 0000c 48 83 ec 28 sub rsp, 40 ; 00000028H 00010 48 8d 6a 20 lea rbp, QWORD PTR [rdx+32] - 00014 48 8d 4d 08 lea rcx, QWORD PTR Block$[rbp] - 00018 e8 00 00 00 00 call ??1_NATIVE_CODE_BLOCK@@QEAA@XZ - 0001d 48 83 c4 28 add rsp, 40 ; 00000028H - 00021 5f pop rdi - 00022 5d pop rbp - 00023 c3 ret 0 + 00014 ba f0 00 00 00 mov edx, 240 ; 000000f0H + 00019 48 8b 8d 48 03 + 00 00 mov rcx, QWORD PTR $T8[rbp] + 00020 e8 00 00 00 00 call ??3@YAXPEAX_K@Z ; operator delete + 00025 48 83 c4 28 add rsp, 40 ; 00000028H + 00029 5f pop rdi + 0002a 5d pop rbp + 0002b c3 ret 0 main$dtor$0 ENDP text$x ENDS ; COMDAT text$x text$x SEGMENT -Block$ = 8 -NewLink$ = 88 -AssembledSize$ = 116 -AssembledBlock$ = 152 -Tb$ = 184 -i$5 = 212 -$T6 = 440 -$T7 = 472 -$T8 = 500 -$T9 = 532 -$T10 = 568 -tv152 = 600 -tv88 = 600 -tv154 = 608 -tv157 = 616 -tv159 = 624 -tv170 = 632 -tv168 = 640 -__$ArrayPad$ = 648 +Return1776$ = 8 +RetInst$ = 40 +Pre1$ = 72 +Post1$ = 104 +Pre2$ = 136 +Post2$ = 168 +i$4 = 196 +i$5 = 228 +AsmLen$ = 260 +Asm$ = 296 +Tb$ = 328 +i$6 = 356 +ExecBuffer$ = 392 +$T7 = 808 +$T8 = 840 +$T9 = 872 +$T10 = 904 +$T11 = 932 +$T12 = 968 +tv183 = 996 +tv172 = 996 +tv206 = 1000 +tv128 = 1000 +tv82 = 1000 +tv208 = 1008 +tv211 = 1016 +tv213 = 1024 +tv224 = 1032 +tv222 = 1040 +__$ArrayPad$ = 1048 main$dtor$1 PROC 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -3610,8 +3027,8 @@ main$dtor$1 PROC 0000c 48 83 ec 28 sub rsp, 40 ; 00000028H 00010 48 8d 6a 20 lea rbp, QWORD PTR [rdx+32] 00014 ba f0 00 00 00 mov edx, 240 ; 000000f0H - 00019 48 8b 8d d8 01 - 00 00 mov rcx, QWORD PTR $T7[rbp] + 00019 48 8b 8d 88 03 + 00 00 mov rcx, QWORD PTR $T10[rbp] 00020 e8 00 00 00 00 call ??3@YAXPEAX_K@Z ; operator delete 00025 48 83 c4 28 add rsp, 40 ; 00000028H 00029 5f pop rdi @@ -3622,25 +3039,36 @@ text$x ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; COMDAT text$x text$x SEGMENT -Block$ = 8 -NewLink$ = 88 -AssembledSize$ = 116 -AssembledBlock$ = 152 -Tb$ = 184 -i$5 = 212 -$T6 = 440 -$T7 = 472 -$T8 = 500 -$T9 = 532 -$T10 = 568 -tv152 = 600 -tv88 = 600 -tv154 = 608 -tv157 = 616 -tv159 = 624 -tv170 = 632 -tv168 = 640 -__$ArrayPad$ = 648 +Return1776$ = 8 +RetInst$ = 40 +Pre1$ = 72 +Post1$ = 104 +Pre2$ = 136 +Post2$ = 168 +i$4 = 196 +i$5 = 228 +AsmLen$ = 260 +Asm$ = 296 +Tb$ = 328 +i$6 = 356 +ExecBuffer$ = 392 +$T7 = 808 +$T8 = 840 +$T9 = 872 +$T10 = 904 +$T11 = 932 +$T12 = 968 +tv183 = 996 +tv172 = 996 +tv206 = 1000 +tv128 = 1000 +tv82 = 1000 +tv208 = 1008 +tv211 = 1016 +tv213 = 1024 +tv224 = 1032 +tv222 = 1040 +__$ArrayPad$ = 1048 main$dtor$0 PROC 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -3648,36 +3076,49 @@ main$dtor$0 PROC 0000b 57 push rdi 0000c 48 83 ec 28 sub rsp, 40 ; 00000028H 00010 48 8d 6a 20 lea rbp, QWORD PTR [rdx+32] - 00014 48 8d 4d 08 lea rcx, QWORD PTR Block$[rbp] - 00018 e8 00 00 00 00 call ??1_NATIVE_CODE_BLOCK@@QEAA@XZ - 0001d 48 83 c4 28 add rsp, 40 ; 00000028H - 00021 5f pop rdi - 00022 5d pop rbp - 00023 c3 ret 0 + 00014 ba f0 00 00 00 mov edx, 240 ; 000000f0H + 00019 48 8b 8d 48 03 + 00 00 mov rcx, QWORD PTR $T8[rbp] + 00020 e8 00 00 00 00 call ??3@YAXPEAX_K@Z ; operator delete + 00025 48 83 c4 28 add rsp, 40 ; 00000028H + 00029 5f pop rdi + 0002a 5d pop rbp + 0002b c3 ret 0 main$dtor$0 ENDP text$x ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; COMDAT text$x text$x SEGMENT -Block$ = 8 -NewLink$ = 88 -AssembledSize$ = 116 -AssembledBlock$ = 152 -Tb$ = 184 -i$5 = 212 -$T6 = 440 -$T7 = 472 -$T8 = 500 -$T9 = 532 -$T10 = 568 -tv152 = 600 -tv88 = 600 -tv154 = 608 -tv157 = 616 -tv159 = 624 -tv170 = 632 -tv168 = 640 -__$ArrayPad$ = 648 +Return1776$ = 8 +RetInst$ = 40 +Pre1$ = 72 +Post1$ = 104 +Pre2$ = 136 +Post2$ = 168 +i$4 = 196 +i$5 = 228 +AsmLen$ = 260 +Asm$ = 296 +Tb$ = 328 +i$6 = 356 +ExecBuffer$ = 392 +$T7 = 808 +$T8 = 840 +$T9 = 872 +$T10 = 904 +$T11 = 932 +$T12 = 968 +tv183 = 996 +tv172 = 996 +tv206 = 1000 +tv128 = 1000 +tv82 = 1000 +tv208 = 1008 +tv211 = 1016 +tv213 = 1024 +tv224 = 1032 +tv222 = 1040 +__$ArrayPad$ = 1048 main$dtor$1 PROC 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -3686,8 +3127,8 @@ main$dtor$1 PROC 0000c 48 83 ec 28 sub rsp, 40 ; 00000028H 00010 48 8d 6a 20 lea rbp, QWORD PTR [rdx+32] 00014 ba f0 00 00 00 mov edx, 240 ; 000000f0H - 00019 48 8b 8d d8 01 - 00 00 mov rcx, QWORD PTR $T7[rbp] + 00019 48 8b 8d 88 03 + 00 00 mov rcx, QWORD PTR $T10[rbp] 00020 e8 00 00 00 00 call ??3@YAXPEAX_K@Z ; operator delete 00025 48 83 c4 28 add rsp, 40 ; 00000028H 00029 5f pop rdi @@ -3770,445 +3211,6 @@ $LN1@MakeExecut: ?MakeExecutableBuffer@@YAPEAXPEAXK@Z ENDP ; MakeExecutableBuffer _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI -; COMDAT ??1_NATIVE_CODE_BLOCK@@QEAA@XZ -_TEXT SEGMENT -this$ = 224 -??1_NATIVE_CODE_BLOCK@@QEAA@XZ PROC ; _NATIVE_CODE_BLOCK::~_NATIVE_CODE_BLOCK, COMDAT -$LN3: - 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 00005 55 push rbp - 00006 57 push rdi - 00007 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00013 48 8b fc mov rdi, rsp - 00016 b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 0001b b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00020 f3 ab rep stosd - 00022 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 0002a 48 8b 85 e0 00 - 00 00 mov rax, QWORD PTR this$[rbp] - 00031 48 83 c0 10 add rax, 16 - 00035 48 8b c8 mov rcx, rax - 00038 e8 00 00 00 00 call ??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ ; std::vector >::~vector > - 0003d 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 00044 5f pop rdi - 00045 5d pop rbp - 00046 c3 ret 0 -??1_NATIVE_CODE_BLOCK@@QEAA@XZ ENDP ; _NATIVE_CODE_BLOCK::~_NATIVE_CODE_BLOCK -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ -_TEXT SEGMENT -this$ = 224 -?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ PROC ; std::_Compressed_pair,std::_Vector_val >,1>::_Get_first, COMDAT - -; 1343 : constexpr _Ty1& _Get_first() noexcept { - -$LN3: - 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 00005 55 push rbp - 00006 57 push rdi - 00007 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00013 48 8b fc mov rdi, rsp - 00016 b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 0001b b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00020 f3 ab rep stosd - 00022 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 0002a 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 1344 : return *this; - - 00036 48 8b 85 e0 00 - 00 00 mov rax, QWORD PTR this$[rbp] - -; 1345 : } - - 0003d 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 00044 5f pop rdi - 00045 5d pop rbp - 00046 c3 ret 0 -?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ ENDP ; std::_Compressed_pair,std::_Vector_val >,1>::_Get_first -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\vector -; COMDAT ?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ -_TEXT SEGMENT -this$ = 224 -?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ PROC ; std::vector >::_Getal, COMDAT - -; 1731 : _Alty& _Getal() noexcept { - -$LN3: - 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 00005 55 push rbp - 00006 57 push rdi - 00007 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00013 48 8b fc mov rdi, rsp - 00016 b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 0001b b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00020 f3 ab rep stosd - 00022 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 0002a 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__BF2A7ACC_vector - 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 1732 : return _Mypair._Get_first(); - - 00036 48 8b 85 e0 00 - 00 00 mov rax, QWORD PTR this$[rbp] - 0003d 48 8b c8 mov rcx, rax - 00040 e8 00 00 00 00 call ?_Get_first@?$_Compressed_pair@V?$allocator@K@std@@V?$_Vector_val@U?$_Simple_types@K@std@@@2@$00@std@@QEAAAEAV?$allocator@K@2@XZ ; std::_Compressed_pair,std::_Vector_val >,1>::_Get_first - 00045 90 npad 1 - -; 1733 : } - - 00046 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 0004d 5f pop rdi - 0004e 5d pop rbp - 0004f c3 ret 0 -?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ ENDP ; std::vector >::_Getal -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\vector -; COMDAT ?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ -_TEXT SEGMENT -_My_data$ = 8 -_Myfirst$ = 40 -_Mylast$ = 72 -_Myend$ = 104 -tv90 = 312 -tv88 = 320 -tv86 = 328 -this$ = 368 -?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ PROC ; std::vector >::_Tidy, COMDAT - -; 1685 : void _Tidy() noexcept { // free all storage - -$LN4: - 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 00005 55 push rbp - 00006 57 push rdi - 00007 48 81 ec 78 01 - 00 00 sub rsp, 376 ; 00000178H - 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00013 48 8b fc mov rdi, rsp - 00016 b9 5e 00 00 00 mov ecx, 94 ; 0000005eH - 0001b b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00020 f3 ab rep stosd - 00022 48 8b 8c 24 98 - 01 00 00 mov rcx, QWORD PTR [rsp+408] - 0002a 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__BF2A7ACC_vector - 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 1686 : auto& _My_data = _Mypair._Myval2; - - 00036 48 8b 85 70 01 - 00 00 mov rax, QWORD PTR this$[rbp] - 0003d 48 89 45 08 mov QWORD PTR _My_data$[rbp], rax - -; 1687 : pointer& _Myfirst = _My_data._Myfirst; - - 00041 48 8b 45 08 mov rax, QWORD PTR _My_data$[rbp] - 00045 48 83 c0 08 add rax, 8 - 00049 48 89 45 28 mov QWORD PTR _Myfirst$[rbp], rax - -; 1688 : pointer& _Mylast = _My_data._Mylast; - - 0004d 48 8b 45 08 mov rax, QWORD PTR _My_data$[rbp] - 00051 48 83 c0 10 add rax, 16 - 00055 48 89 45 48 mov QWORD PTR _Mylast$[rbp], rax - -; 1689 : pointer& _Myend = _My_data._Myend; - - 00059 48 8b 45 08 mov rax, QWORD PTR _My_data$[rbp] - 0005d 48 83 c0 18 add rax, 24 - 00061 48 89 45 68 mov QWORD PTR _Myend$[rbp], rax - -; 1690 : -; 1691 : _My_data._Orphan_all(); - - 00065 48 8b 4d 08 mov rcx, QWORD PTR _My_data$[rbp] - 00069 e8 00 00 00 00 call ?_Orphan_all@_Container_base12@std@@QEAAXXZ ; std::_Container_base12::_Orphan_all - -; 1692 : -; 1693 : if (_Myfirst) { // destroy and deallocate old array - - 0006e 48 8b 45 28 mov rax, QWORD PTR _Myfirst$[rbp] - 00072 48 83 38 00 cmp QWORD PTR [rax], 0 - 00076 0f 84 92 00 00 - 00 je $LN2@Tidy - -; 1694 : _Destroy(_Myfirst, _Mylast); - - 0007c 48 8b 45 48 mov rax, QWORD PTR _Mylast$[rbp] - 00080 4c 8b 00 mov r8, QWORD PTR [rax] - 00083 48 8b 45 28 mov rax, QWORD PTR _Myfirst$[rbp] - 00087 48 8b 10 mov rdx, QWORD PTR [rax] - 0008a 48 8b 8d 70 01 - 00 00 mov rcx, QWORD PTR this$[rbp] - 00091 e8 00 00 00 00 call ?_Destroy@?$vector@KV?$allocator@K@std@@@std@@AEAAXPEAK0@Z ; std::vector >::_Destroy - -; 1695 : _Getal().deallocate(_Myfirst, static_cast(_Myend - _Myfirst)); - - 00096 48 8b 8d 70 01 - 00 00 mov rcx, QWORD PTR this$[rbp] - 0009d e8 00 00 00 00 call ?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ ; std::vector >::_Getal - 000a2 48 89 85 38 01 - 00 00 mov QWORD PTR tv90[rbp], rax - 000a9 48 8b 45 68 mov rax, QWORD PTR _Myend$[rbp] - 000ad 48 8b 4d 28 mov rcx, QWORD PTR _Myfirst$[rbp] - 000b1 48 8b 09 mov rcx, QWORD PTR [rcx] - 000b4 48 8b 00 mov rax, QWORD PTR [rax] - 000b7 48 2b c1 sub rax, rcx - 000ba 48 c1 f8 02 sar rax, 2 - 000be 48 89 85 40 01 - 00 00 mov QWORD PTR tv88[rbp], rax - 000c5 48 8b 45 28 mov rax, QWORD PTR _Myfirst$[rbp] - 000c9 48 8b 00 mov rax, QWORD PTR [rax] - 000cc 48 89 85 48 01 - 00 00 mov QWORD PTR tv86[rbp], rax - 000d3 4c 8b 85 40 01 - 00 00 mov r8, QWORD PTR tv88[rbp] - 000da 48 8b 95 48 01 - 00 00 mov rdx, QWORD PTR tv86[rbp] - 000e1 48 8b 8d 38 01 - 00 00 mov rcx, QWORD PTR tv90[rbp] - 000e8 e8 00 00 00 00 call ?deallocate@?$allocator@K@std@@QEAAXQEAK_K@Z ; std::allocator::deallocate - -; 1696 : -; 1697 : _Myfirst = pointer(); - - 000ed 48 8b 45 28 mov rax, QWORD PTR _Myfirst$[rbp] - 000f1 48 c7 00 00 00 - 00 00 mov QWORD PTR [rax], 0 - -; 1698 : _Mylast = pointer(); - - 000f8 48 8b 45 48 mov rax, QWORD PTR _Mylast$[rbp] - 000fc 48 c7 00 00 00 - 00 00 mov QWORD PTR [rax], 0 - -; 1699 : _Myend = pointer(); - - 00103 48 8b 45 68 mov rax, QWORD PTR _Myend$[rbp] - 00107 48 c7 00 00 00 - 00 00 mov QWORD PTR [rax], 0 -$LN2@Tidy: - -; 1700 : } -; 1701 : } - - 0010e 48 8d a5 58 01 - 00 00 lea rsp, QWORD PTR [rbp+344] - 00115 5f pop rdi - 00116 5d pop rbp - 00117 c3 ret 0 -?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ ENDP ; std::vector >::_Tidy -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\vector -; COMDAT ?_Destroy@?$vector@KV?$allocator@K@std@@@std@@AEAAXPEAK0@Z -_TEXT SEGMENT -this$ = 224 -_First$ = 232 -_Last$ = 240 -?_Destroy@?$vector@KV?$allocator@K@std@@@std@@AEAAXPEAK0@Z PROC ; std::vector >::_Destroy, COMDAT - -; 1611 : void _Destroy(pointer _First, pointer _Last) { // destroy [_First, _Last) using allocator - -$LN3: - 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 - 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000f 55 push rbp - 00010 57 push rdi - 00011 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 00018 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 0001d 48 8b fc mov rdi, rsp - 00020 b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 00025 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 0002a f3 ab rep stosd - 0002c 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 00034 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__BF2A7ACC_vector - 0003b e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 1612 : _Destroy_range(_First, _Last, _Getal()); - - 00040 48 8b 8d e0 00 - 00 00 mov rcx, QWORD PTR this$[rbp] - 00047 e8 00 00 00 00 call ?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ ; std::vector >::_Getal - 0004c 4c 8b c0 mov r8, rax - 0004f 48 8b 95 f0 00 - 00 00 mov rdx, QWORD PTR _Last$[rbp] - 00056 48 8b 8d e8 00 - 00 00 mov rcx, QWORD PTR _First$[rbp] - 0005d e8 00 00 00 00 call ??$_Destroy_range@V?$allocator@K@std@@@std@@YAXPEAKQEAKAEAV?$allocator@K@0@@Z ; std::_Destroy_range > - -; 1613 : } - - 00062 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 00069 5f pop rdi - 0006a 5d pop rbp - 0006b c3 ret 0 -?_Destroy@?$vector@KV?$allocator@K@std@@@std@@AEAAXPEAK0@Z ENDP ; std::vector >::_Destroy -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\vector -; COMDAT ??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ -_TEXT SEGMENT -_Alproxy$ = 8 -$S1$ = 36 -$T4 = 260 -__$ArrayPad$ = 280 -this$ = 320 -??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ PROC ; std::vector >::~vector >, COMDAT - -; 672 : ~vector() noexcept { - -$LN3: - 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 00005 55 push rbp - 00006 57 push rdi - 00007 48 81 ec 48 01 - 00 00 sub rsp, 328 ; 00000148H - 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00013 48 8b fc mov rdi, rsp - 00016 b9 52 00 00 00 mov ecx, 82 ; 00000052H - 0001b b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00020 f3 ab rep stosd - 00022 48 8b 8c 24 68 - 01 00 00 mov rcx, QWORD PTR [rsp+360] - 0002a 48 8b 05 00 00 - 00 00 mov rax, QWORD PTR __security_cookie - 00031 48 33 c5 xor rax, rbp - 00034 48 89 85 18 01 - 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax - 0003b 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__BF2A7ACC_vector - 00042 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 673 : _Tidy(); - - 00047 48 8b 8d 40 01 - 00 00 mov rcx, QWORD PTR this$[rbp] - 0004e e8 00 00 00 00 call ?_Tidy@?$vector@KV?$allocator@K@std@@@std@@AEAAXXZ ; std::vector >::_Tidy - -; 674 : #if _ITERATOR_DEBUG_LEVEL != 0 -; 675 : auto&& _Alproxy = _GET_PROXY_ALLOCATOR(_Alty, _Getal()); - - 00053 48 8b 8d 40 01 - 00 00 mov rcx, QWORD PTR this$[rbp] - 0005a e8 00 00 00 00 call ?_Getal@?$vector@KV?$allocator@K@std@@@std@@AEAAAEAV?$allocator@K@2@XZ ; std::vector >::_Getal - 0005f 48 8b d0 mov rdx, rax - 00062 48 8d 4d 24 lea rcx, QWORD PTR $S1$[rbp] - 00066 e8 00 00 00 00 call ??$?0K@?$allocator@U_Container_proxy@std@@@std@@QEAA@AEBV?$allocator@K@1@@Z ; std::allocator::allocator - 0006b 48 8d 45 24 lea rax, QWORD PTR $S1$[rbp] - 0006f 48 89 45 08 mov QWORD PTR _Alproxy$[rbp], rax - -; 676 : _Delete_plain_internal(_Alproxy, _STD exchange(_Mypair._Myval2._Myproxy, nullptr)); - - 00073 48 c7 85 04 01 - 00 00 00 00 00 - 00 mov QWORD PTR $T4[rbp], 0 - 0007e 48 8b 85 40 01 - 00 00 mov rax, QWORD PTR this$[rbp] - 00085 48 8d 95 04 01 - 00 00 lea rdx, QWORD PTR $T4[rbp] - 0008c 48 8b c8 mov rcx, rax - 0008f e8 00 00 00 00 call ??$exchange@PEAU_Container_proxy@std@@$$T@std@@YAPEAU_Container_proxy@0@AEAPEAU10@$$QEA$$T@Z ; std::exchange - 00094 48 8b d0 mov rdx, rax - 00097 48 8b 4d 08 mov rcx, QWORD PTR _Alproxy$[rbp] - 0009b e8 00 00 00 00 call ??$_Delete_plain_internal@V?$allocator@U_Container_proxy@std@@@std@@@std@@YAXAEAV?$allocator@U_Container_proxy@std@@@0@QEAU_Container_proxy@0@@Z ; std::_Delete_plain_internal > - -; 677 : #endif // _ITERATOR_DEBUG_LEVEL != 0 -; 678 : } - - 000a0 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] - 000a4 48 8d 15 00 00 - 00 00 lea rdx, OFFSET FLAT:??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ$rtcFrameData - 000ab e8 00 00 00 00 call _RTC_CheckStackVars - 000b0 90 npad 1 - 000b1 48 8b 8d 18 01 - 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] - 000b8 48 33 cd xor rcx, rbp - 000bb e8 00 00 00 00 call __security_check_cookie - 000c0 48 8d a5 28 01 - 00 00 lea rsp, QWORD PTR [rbp+296] - 000c7 5f pop rdi - 000c8 5d pop rbp - 000c9 c3 ret 0 -??1?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ ENDP ; std::vector >::~vector > -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ?deallocate@?$allocator@K@std@@QEAAXQEAK_K@Z -_TEXT SEGMENT -this$ = 224 -_Ptr$ = 232 -_Count$ = 240 -?deallocate@?$allocator@K@std@@QEAAXQEAK_K@Z PROC ; std::allocator::deallocate, COMDAT - -; 801 : void deallocate(_Ty* const _Ptr, const size_t _Count) { - -$LN3: - 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 - 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000f 55 push rbp - 00010 57 push rdi - 00011 48 81 ec e8 00 - 00 00 sub rsp, 232 ; 000000e8H - 00018 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 0001d 48 8b fc mov rdi, rsp - 00020 b9 3a 00 00 00 mov ecx, 58 ; 0000003aH - 00025 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 0002a f3 ab rep stosd - 0002c 48 8b 8c 24 08 - 01 00 00 mov rcx, QWORD PTR [rsp+264] - 00034 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 0003b e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 802 : // no overflow check on the following multiply; we assume _Allocate did that check -; 803 : _Deallocate<_New_alignof<_Ty>>(_Ptr, sizeof(_Ty) * _Count); - - 00040 48 8b 85 f0 00 - 00 00 mov rax, QWORD PTR _Count$[rbp] - 00047 48 c1 e0 02 shl rax, 2 - 0004b 48 8b d0 mov rdx, rax - 0004e 48 8b 8d e8 00 - 00 00 mov rcx, QWORD PTR _Ptr$[rbp] - 00055 e8 00 00 00 00 call ??$_Deallocate@$0BA@$0A@@std@@YAXPEAX_K@Z ; std::_Deallocate<16,0> - -; 804 : } - - 0005a 48 8d a5 c8 00 - 00 00 lea rsp, QWORD PTR [rbp+200] - 00061 5f pop rdi - 00062 5d pop rbp - 00063 c3 ret 0 -?deallocate@?$allocator@K@std@@QEAAXQEAK_K@Z ENDP ; std::allocator::deallocate -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI ; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xloctime ; COMDAT ??$_Getvals@_W@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z _TEXT SEGMENT @@ -5204,332 +4206,6 @@ $LN4@eq_int_typ: ?eq_int_type@?$_Narrow_char_traits@DH@std@@SA_NAEBH0@Z ENDP ; std::_Narrow_char_traits::eq_int_type _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ?_Orphan_all@_Container_base12@std@@QEAAXXZ -_TEXT SEGMENT -_Lock$4 = 4 -_Pnext$5 = 40 -__$ArrayPad$ = 248 -this$ = 288 -?_Orphan_all@_Container_base12@std@@QEAAXXZ PROC ; std::_Container_base12::_Orphan_all, COMDAT - -; 1205 : inline void _Container_base12::_Orphan_all() noexcept { - -$LN7: - 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 00005 55 push rbp - 00006 57 push rdi - 00007 48 81 ec 28 01 - 00 00 sub rsp, 296 ; 00000128H - 0000e 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] - 00013 48 8b fc mov rdi, rsp - 00016 b9 4a 00 00 00 mov ecx, 74 ; 0000004aH - 0001b b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00020 f3 ab rep stosd - 00022 48 8b 8c 24 48 - 01 00 00 mov rcx, QWORD PTR [rsp+328] - 0002a 48 8b 05 00 00 - 00 00 mov rax, QWORD PTR __security_cookie - 00031 48 33 c5 xor rax, rbp - 00034 48 89 85 f8 00 - 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax - 0003b 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 00042 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 1206 : #if _ITERATOR_DEBUG_LEVEL == 2 -; 1207 : if (_Myproxy) { // proxy allocated, drain it - - 00047 48 8b 85 20 01 - 00 00 mov rax, QWORD PTR this$[rbp] - 0004e 48 83 38 00 cmp QWORD PTR [rax], 0 - 00052 74 6b je SHORT $LN5@Orphan_all - -; 1208 : _Lockit _Lock(_LOCK_DEBUG); - - 00054 ba 03 00 00 00 mov edx, 3 - 00059 48 8d 4d 04 lea rcx, QWORD PTR _Lock$4[rbp] - 0005d ff 15 00 00 00 - 00 call QWORD PTR __imp_??0_Lockit@std@@QEAA@H@Z - -; 1209 : -; 1210 : for (auto _Pnext = &_Myproxy->_Myfirstiter; *_Pnext; *_Pnext = (*_Pnext)->_Mynextiter) { - - 00063 48 8b 85 20 01 - 00 00 mov rax, QWORD PTR this$[rbp] - 0006a 48 8b 00 mov rax, QWORD PTR [rax] - 0006d 48 83 c0 08 add rax, 8 - 00071 48 89 45 28 mov QWORD PTR _Pnext$5[rbp], rax - 00075 eb 12 jmp SHORT $LN4@Orphan_all -$LN2@Orphan_all: - 00077 48 8b 45 28 mov rax, QWORD PTR _Pnext$5[rbp] - 0007b 48 8b 00 mov rax, QWORD PTR [rax] - 0007e 48 8b 4d 28 mov rcx, QWORD PTR _Pnext$5[rbp] - 00082 48 8b 40 08 mov rax, QWORD PTR [rax+8] - 00086 48 89 01 mov QWORD PTR [rcx], rax -$LN4@Orphan_all: - 00089 48 8b 45 28 mov rax, QWORD PTR _Pnext$5[rbp] - 0008d 48 83 38 00 cmp QWORD PTR [rax], 0 - 00091 74 10 je SHORT $LN3@Orphan_all - -; 1211 : (*_Pnext)->_Myproxy = nullptr; - - 00093 48 8b 45 28 mov rax, QWORD PTR _Pnext$5[rbp] - 00097 48 8b 00 mov rax, QWORD PTR [rax] - 0009a 48 c7 00 00 00 - 00 00 mov QWORD PTR [rax], 0 - -; 1212 : } - - 000a1 eb d4 jmp SHORT $LN2@Orphan_all -$LN3@Orphan_all: - -; 1213 : -; 1214 : _Myproxy->_Myfirstiter = nullptr; - - 000a3 48 8b 85 20 01 - 00 00 mov rax, QWORD PTR this$[rbp] - 000aa 48 8b 00 mov rax, QWORD PTR [rax] - 000ad 48 c7 40 08 00 - 00 00 00 mov QWORD PTR [rax+8], 0 - -; 1215 : } - - 000b5 48 8d 4d 04 lea rcx, QWORD PTR _Lock$4[rbp] - 000b9 ff 15 00 00 00 - 00 call QWORD PTR __imp_??1_Lockit@std@@QEAA@XZ -$LN5@Orphan_all: - -; 1216 : #endif // _ITERATOR_DEBUG_LEVEL == 2 -; 1217 : } - - 000bf 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] - 000c3 48 8d 15 00 00 - 00 00 lea rdx, OFFSET FLAT:?_Orphan_all@_Container_base12@std@@QEAAXXZ$rtcFrameData - 000ca e8 00 00 00 00 call _RTC_CheckStackVars - 000cf 90 npad 1 - 000d0 48 8b 8d f8 00 - 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] - 000d7 48 33 cd xor rcx, rbp - 000da e8 00 00 00 00 call __security_check_cookie - 000df 48 8d a5 08 01 - 00 00 lea rsp, QWORD PTR [rbp+264] - 000e6 5f pop rdi - 000e7 5d pop rbp - 000e8 c3 ret 0 -?_Orphan_all@_Container_base12@std@@QEAAXXZ ENDP ; std::_Container_base12::_Orphan_all -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI -; File C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xmemory -; COMDAT ?_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z -_TEXT SEGMENT -_Ptr_user$ = 8 -_Ptr_container$ = 40 -_Min_back_shift$ = 72 -_Back_shift$ = 104 -_Ptr$ = 352 -_Bytes$ = 360 -?_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z PROC ; std::_Adjust_manually_vector_aligned, COMDAT - -; 132 : inline void _Adjust_manually_vector_aligned(void*& _Ptr, size_t& _Bytes) { - -$LN21: - 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx - 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx - 0000a 55 push rbp - 0000b 57 push rdi - 0000c 48 81 ec 78 01 - 00 00 sub rsp, 376 ; 00000178H - 00013 48 8d 6c 24 30 lea rbp, QWORD PTR [rsp+48] - 00018 48 8b fc mov rdi, rsp - 0001b b9 5e 00 00 00 mov ecx, 94 ; 0000005eH - 00020 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH - 00025 f3 ab rep stosd - 00027 48 8b 8c 24 98 - 01 00 00 mov rcx, QWORD PTR [rsp+408] - 0002f 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:__A58979FC_xmemory - 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode - -; 133 : // adjust parameters from _Allocate_manually_vector_aligned to pass to operator delete -; 134 : _Bytes += _Non_user_size; - - 0003b 48 8b 85 68 01 - 00 00 mov rax, QWORD PTR _Bytes$[rbp] - 00042 48 8b 00 mov rax, QWORD PTR [rax] - 00045 48 83 c0 2f add rax, 47 ; 0000002fH - 00049 48 8b 8d 68 01 - 00 00 mov rcx, QWORD PTR _Bytes$[rbp] - 00050 48 89 01 mov QWORD PTR [rcx], rax - -; 135 : -; 136 : const uintptr_t* const _Ptr_user = reinterpret_cast(_Ptr); - - 00053 48 8b 85 60 01 - 00 00 mov rax, QWORD PTR _Ptr$[rbp] - 0005a 48 8b 00 mov rax, QWORD PTR [rax] - 0005d 48 89 45 08 mov QWORD PTR _Ptr_user$[rbp], rax - -; 137 : const uintptr_t _Ptr_container = _Ptr_user[-1]; - - 00061 b8 08 00 00 00 mov eax, 8 - 00066 48 6b c0 ff imul rax, rax, -1 - 0006a 48 8b 4d 08 mov rcx, QWORD PTR _Ptr_user$[rbp] - 0006e 48 8b 04 01 mov rax, QWORD PTR [rcx+rax] - 00072 48 89 45 28 mov QWORD PTR _Ptr_container$[rbp], rax -$LN4@Adjust_man: - -; 138 : -; 139 : // If the following asserts, it likely means that we are performing -; 140 : // an aligned delete on memory coming from an unaligned allocation. -; 141 : _STL_ASSERT(_Ptr_user[-2] == _Big_allocation_sentinel, "invalid argument"); - - 00076 b8 08 00 00 00 mov eax, 8 - 0007b 48 6b c0 fe imul rax, rax, -2 - 0007f 48 8b 4d 08 mov rcx, QWORD PTR _Ptr_user$[rbp] - 00083 48 ba fa fa fa - fa fa fa fa fa mov rdx, -361700864190383366 ; fafafafafafafafaH - 0008d 48 39 14 01 cmp QWORD PTR [rcx+rax], rdx - 00091 75 02 jne SHORT $LN14@Adjust_man - 00093 eb 77 jmp SHORT $LN15@Adjust_man -$LN14@Adjust_man: -$LN7@Adjust_man: - 00095 8b 05 00 00 00 - 00 mov eax, DWORD PTR ?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z@4JA - 0009b 83 c0 09 add eax, 9 - 0009e 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_0BB@FCMFBGOM@invalid?5argument@ - 000a5 48 89 4c 24 28 mov QWORD PTR [rsp+40], rcx - 000aa 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_02DKCKIIND@?$CFs@ - 000b1 48 89 4c 24 20 mov QWORD PTR [rsp+32], rcx - 000b6 45 33 c9 xor r9d, r9d - 000b9 44 8b c0 mov r8d, eax - 000bc 48 8d 15 00 00 - 00 00 lea rdx, OFFSET FLAT:??_C@_0GI@JMEOMKJO@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ - 000c3 b9 02 00 00 00 mov ecx, 2 - 000c8 ff 15 00 00 00 - 00 call QWORD PTR __imp__CrtDbgReport - 000ce 83 f8 01 cmp eax, 1 - 000d1 75 03 jne SHORT $LN19@Adjust_man - 000d3 cc int 3 - 000d4 33 c0 xor eax, eax -$LN19@Adjust_man: - 000d6 8b 05 00 00 00 - 00 mov eax, DWORD PTR ?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z@4JA - 000dc 83 c0 09 add eax, 9 - 000df 48 c7 44 24 20 - 00 00 00 00 mov QWORD PTR [rsp+32], 0 - 000e8 44 8b c8 mov r9d, eax - 000eb 4c 8d 05 00 00 - 00 00 lea r8, OFFSET FLAT:??_C@_1NA@FEEOBALC@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ - 000f2 48 8d 15 00 00 - 00 00 lea rdx, OFFSET FLAT:??_C@_1EK@NIFDJFDG@?$AAs?$AAt?$AAd?$AA?3?$AA?3?$AA_?$AAA?$AAd?$AAj?$AAu?$AAs?$AAt?$AA_?$AAm?$AAa@ - 000f9 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_1CG@JNLFBNGN@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAa?$AAr?$AAg?$AAu?$AAm?$AAe@ - 00100 ff 15 00 00 00 - 00 call QWORD PTR __imp__invalid_parameter - 00106 33 c0 xor eax, eax - 00108 85 c0 test eax, eax - 0010a 75 89 jne SHORT $LN7@Adjust_man -$LN15@Adjust_man: - 0010c 33 c0 xor eax, eax - 0010e 85 c0 test eax, eax - 00110 0f 85 60 ff ff - ff jne $LN4@Adjust_man - -; 142 : -; 143 : // Extra paranoia on aligned allocation/deallocation; ensure _Ptr_container is -; 144 : // in range [_Min_back_shift, _Non_user_size] -; 145 : #ifdef _DEBUG -; 146 : constexpr uintptr_t _Min_back_shift = 2 * sizeof(void*); - - 00116 48 c7 45 48 10 - 00 00 00 mov QWORD PTR _Min_back_shift$[rbp], 16 - -; 147 : #else // ^^^ _DEBUG ^^^ // vvv !_DEBUG vvv -; 148 : constexpr uintptr_t _Min_back_shift = sizeof(void*); -; 149 : #endif // _DEBUG -; 150 : const uintptr_t _Back_shift = reinterpret_cast(_Ptr) - _Ptr_container; - - 0011e 48 8b 85 60 01 - 00 00 mov rax, QWORD PTR _Ptr$[rbp] - 00125 48 8b 4d 28 mov rcx, QWORD PTR _Ptr_container$[rbp] - 00129 48 8b 00 mov rax, QWORD PTR [rax] - 0012c 48 2b c1 sub rax, rcx - 0012f 48 89 45 68 mov QWORD PTR _Back_shift$[rbp], rax -$LN10@Adjust_man: - -; 151 : _STL_VERIFY(_Back_shift >= _Min_back_shift && _Back_shift <= _Non_user_size, "invalid argument"); - - 00133 48 83 7d 68 10 cmp QWORD PTR _Back_shift$[rbp], 16 - 00138 72 09 jb SHORT $LN16@Adjust_man - 0013a 48 83 7d 68 2f cmp QWORD PTR _Back_shift$[rbp], 47 ; 0000002fH - 0013f 77 02 ja SHORT $LN16@Adjust_man - 00141 eb 77 jmp SHORT $LN17@Adjust_man -$LN16@Adjust_man: -$LN13@Adjust_man: - 00143 8b 05 00 00 00 - 00 mov eax, DWORD PTR ?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z@4JA - 00149 83 c0 13 add eax, 19 - 0014c 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_0BB@FCMFBGOM@invalid?5argument@ - 00153 48 89 4c 24 28 mov QWORD PTR [rsp+40], rcx - 00158 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_02DKCKIIND@?$CFs@ - 0015f 48 89 4c 24 20 mov QWORD PTR [rsp+32], rcx - 00164 45 33 c9 xor r9d, r9d - 00167 44 8b c0 mov r8d, eax - 0016a 48 8d 15 00 00 - 00 00 lea rdx, OFFSET FLAT:??_C@_0GI@JMEOMKJO@C?3?2Program?5Files?5?$CIx86?$CJ?2Microsof@ - 00171 b9 02 00 00 00 mov ecx, 2 - 00176 ff 15 00 00 00 - 00 call QWORD PTR __imp__CrtDbgReport - 0017c 83 f8 01 cmp eax, 1 - 0017f 75 03 jne SHORT $LN20@Adjust_man - 00181 cc int 3 - 00182 33 c0 xor eax, eax -$LN20@Adjust_man: - 00184 8b 05 00 00 00 - 00 mov eax, DWORD PTR ?__LINE__Var@?0??_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z@4JA - 0018a 83 c0 13 add eax, 19 - 0018d 48 c7 44 24 20 - 00 00 00 00 mov QWORD PTR [rsp+32], 0 - 00196 44 8b c8 mov r9d, eax - 00199 4c 8d 05 00 00 - 00 00 lea r8, OFFSET FLAT:??_C@_1NA@FEEOBALC@?$AAC?$AA?3?$AA?2?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAF?$AAi?$AAl?$AAe@ - 001a0 48 8d 15 00 00 - 00 00 lea rdx, OFFSET FLAT:??_C@_1EK@NIFDJFDG@?$AAs?$AAt?$AAd?$AA?3?$AA?3?$AA_?$AAA?$AAd?$AAj?$AAu?$AAs?$AAt?$AA_?$AAm?$AAa@ - 001a7 48 8d 0d 00 00 - 00 00 lea rcx, OFFSET FLAT:??_C@_1CG@JNLFBNGN@?$AA?$CC?$AAi?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAa?$AAr?$AAg?$AAu?$AAm?$AAe@ - 001ae ff 15 00 00 00 - 00 call QWORD PTR __imp__invalid_parameter - 001b4 33 c0 xor eax, eax - 001b6 85 c0 test eax, eax - 001b8 75 89 jne SHORT $LN13@Adjust_man -$LN17@Adjust_man: - 001ba 33 c0 xor eax, eax - 001bc 85 c0 test eax, eax - 001be 0f 85 6f ff ff - ff jne $LN10@Adjust_man - -; 152 : _Ptr = reinterpret_cast(_Ptr_container); - - 001c4 48 8b 85 60 01 - 00 00 mov rax, QWORD PTR _Ptr$[rbp] - 001cb 48 8b 4d 28 mov rcx, QWORD PTR _Ptr_container$[rbp] - 001cf 48 89 08 mov QWORD PTR [rax], rcx - -; 153 : } - - 001d2 48 8d a5 48 01 - 00 00 lea rsp, QWORD PTR [rbp+328] - 001d9 5f pop rdi - 001da 5d pop rbp - 001db c3 ret 0 -?_Adjust_manually_vector_aligned@std@@YAXAEAPEAXAEA_K@Z ENDP ; std::_Adjust_manually_vector_aligned -_TEXT ENDS -; Function compile flags: /Odtp /RTCsu /ZI ; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt\wchar.h ; COMDAT wmemcpy _TEXT SEGMENT diff --git a/CodeVirtualizer/x64/Debug/NativeCode.cod b/CodeVirtualizer/x64/Debug/NativeCode.cod index 54f3d19..fcfb9bf 100644 --- a/CodeVirtualizer/x64/Debug/NativeCode.cod +++ b/CodeVirtualizer/x64/Debug/NativeCode.cod @@ -764,7 +764,7 @@ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$??0_NATIVE_CODE_LINK@@QEAA@KPEAXK@Z DD imagerel $LN5 - DD imagerel $LN5+211 + DD imagerel $LN5+252 DD imagerel $unwind$??0_NATIVE_CODE_LINK@@QEAA@KPEAXK@Z pdata ENDS ; COMDAT pdata @@ -1010,7 +1010,7 @@ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?NcCalcBlockSize@@YAKPEAU_NATIVE_CODE_BLOCK@@@Z DD imagerel $LN7 - DD imagerel $LN7+143 + DD imagerel $LN7+156 DD imagerel $unwind$?NcCalcBlockSize@@YAKPEAU_NATIVE_CODE_BLOCK@@@Z pdata ENDS ; COMDAT pdata @@ -1058,13 +1058,13 @@ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?NcInsertBlockAfter@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z DD imagerel $LN10 - DD imagerel $LN10+409 + DD imagerel $LN10+429 DD imagerel $unwind$?NcInsertBlockAfter@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?NcInsertBlockBefore@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z DD imagerel $LN10 - DD imagerel $LN10+392 + DD imagerel $LN10+412 DD imagerel $unwind$?NcInsertBlockBefore@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z pdata ENDS ; COMDAT pdata @@ -1148,7 +1148,7 @@ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?NcAssemble@@YAPEAXPEAU_NATIVE_CODE_BLOCK@@PEAK@Z DD imagerel $LN9 - DD imagerel $LN9+270 + DD imagerel $LN9+280 DD imagerel $unwind$?NcAssemble@@YAPEAXPEAU_NATIVE_CODE_BLOCK@@PEAK@Z pdata ENDS ; COMDAT pdata @@ -1160,13 +1160,13 @@ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?NcDebugPrint@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z DD imagerel $LN11 - DD imagerel $LN11+326 + DD imagerel $LN11+350 DD imagerel $unwind$?NcDebugPrint@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?NcPrintBlockCode@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z DD imagerel $LN10 - DD imagerel $LN10+337 + DD imagerel $LN10+361 DD imagerel $unwind$?NcPrintBlockCode@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z pdata ENDS ; COMDAT pdata @@ -3962,7 +3962,7 @@ $ip2state$??0_NATIVE_CODE_LINK@@QEAA@KPEAXK@Z DB 06H DB 00H DB 0a2H DB 02H - DB 0e2H + DB 'i', 02H DB 00H xdata ENDS ; COMDAT xdata @@ -9737,16 +9737,16 @@ T$1 = 8 i$2 = 36 $T3 = 260 $T4 = 296 -tv90 = 328 -tv92 = 336 -tv95 = 344 -tv129 = 352 -tv141 = 360 -tv139 = 368 +tv93 = 328 +tv95 = 336 +tv130 = 344 +tv132 = 352 +tv144 = 360 +tv142 = 368 Block$ = 416 ?NcPrintBlockCode@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z PROC ; NcPrintBlockCode, COMDAT -; 563 : { +; 565 : { $LN10: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -9765,7 +9765,7 @@ $LN10: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 564 : for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) +; 566 : for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) 00036 48 8b 85 a0 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -9778,108 +9778,115 @@ $LN2@NcPrintBlo: 0004d 48 89 45 08 mov QWORD PTR T$1[rbp], rax $LN4@NcPrintBlo: 00051 48 83 7d 08 00 cmp QWORD PTR T$1[rbp], 0 - 00056 0f 84 eb 00 00 + 00056 0f 84 03 01 00 + 00 je $LN3@NcPrintBlo + 0005c 48 8b 85 a0 01 + 00 00 mov rax, QWORD PTR Block$[rbp] + 00063 48 8b 40 08 mov rax, QWORD PTR [rax+8] + 00067 48 8b 00 mov rax, QWORD PTR [rax] + 0006a 48 39 45 08 cmp QWORD PTR T$1[rbp], rax + 0006e 0f 84 eb 00 00 00 je $LN3@NcPrintBlo -; 565 : { -; 566 : if (!(T->Flags & CODE_FLAG_IS_LABEL)) +; 567 : { +; 568 : if (!(T->Flags & CODE_FLAG_IS_LABEL)) - 0005c 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] - 00060 8b 40 18 mov eax, DWORD PTR [rax+24] - 00063 83 e0 01 and eax, 1 - 00066 85 c0 test eax, eax - 00068 0f 85 d4 00 00 + 00074 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] + 00078 8b 40 18 mov eax, DWORD PTR [rax+24] + 0007b 83 e0 01 and eax, 1 + 0007e 85 c0 test eax, eax + 00080 0f 85 d4 00 00 00 jne $LN8@NcPrintBlo -; 567 : { -; 568 : for (uint32_t i = 0; i < T->RawDataSize; i++) +; 569 : { +; 570 : for (uint32_t i = 0; i < T->RawDataSize; i++) - 0006e c7 45 24 00 00 + 00086 c7 45 24 00 00 00 00 mov DWORD PTR i$2[rbp], 0 - 00075 eb 08 jmp SHORT $LN7@NcPrintBlo + 0008d eb 08 jmp SHORT $LN7@NcPrintBlo $LN5@NcPrintBlo: - 00077 8b 45 24 mov eax, DWORD PTR i$2[rbp] - 0007a ff c0 inc eax - 0007c 89 45 24 mov DWORD PTR i$2[rbp], eax + 0008f 8b 45 24 mov eax, DWORD PTR i$2[rbp] + 00092 ff c0 inc eax + 00094 89 45 24 mov DWORD PTR i$2[rbp], eax $LN7@NcPrintBlo: - 0007f 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] - 00083 8b 40 28 mov eax, DWORD PTR [rax+40] - 00086 39 45 24 cmp DWORD PTR i$2[rbp], eax - 00089 0f 83 b3 00 00 + 00097 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] + 0009b 8b 40 28 mov eax, DWORD PTR [rax+40] + 0009e 39 45 24 cmp DWORD PTR i$2[rbp], eax + 000a1 0f 83 b3 00 00 00 jae $LN6@NcPrintBlo -; 569 : { -; 570 : std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)T->RawData[i] << ' '; +; 571 : { +; 572 : std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)T->RawData[i] << ' '; - 0008f 48 8d 15 00 00 + 000a7 48 8d 15 00 00 00 00 lea rdx, OFFSET FLAT:?hex@std@@YAAEAVios_base@1@AEAV21@@Z ; std::hex - 00096 48 8b 0d 00 00 + 000ae 48 8b 0d 00 00 00 00 mov rcx, QWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A - 0009d ff 15 00 00 00 + 000b5 ff 15 00 00 00 00 call QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z - 000a3 48 89 85 48 01 - 00 00 mov QWORD PTR tv90[rbp], rax - 000aa ba 02 00 00 00 mov edx, 2 - 000af 48 8d 8d 28 01 + 000bb 48 89 85 48 01 + 00 00 mov QWORD PTR tv93[rbp], rax + 000c2 ba 02 00 00 00 mov edx, 2 + 000c7 48 8d 8d 28 01 00 00 lea rcx, QWORD PTR $T4[rbp] - 000b6 e8 00 00 00 00 call ?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z ; std::setw - 000bb 48 89 85 50 01 - 00 00 mov QWORD PTR tv92[rbp], rax - 000c2 48 8b 95 50 01 - 00 00 mov rdx, QWORD PTR tv92[rbp] - 000c9 48 8b 8d 48 01 - 00 00 mov rcx, QWORD PTR tv90[rbp] - 000d0 e8 00 00 00 00 call ??$?6DU?$char_traits@D@std@@_J@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Smanip@_J@0@@Z ; std::operator<<,__int64> - 000d5 48 89 85 58 01 + 000ce e8 00 00 00 00 call ?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z ; std::setw + 000d3 48 89 85 50 01 00 00 mov QWORD PTR tv95[rbp], rax - 000dc b2 30 mov dl, 48 ; 00000030H - 000de 48 8d 8d 04 01 + 000da 48 8b 95 50 01 + 00 00 mov rdx, QWORD PTR tv95[rbp] + 000e1 48 8b 8d 48 01 + 00 00 mov rcx, QWORD PTR tv93[rbp] + 000e8 e8 00 00 00 00 call ??$?6DU?$char_traits@D@std@@_J@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Smanip@_J@0@@Z ; std::operator<<,__int64> + 000ed 48 89 85 58 01 + 00 00 mov QWORD PTR tv130[rbp], rax + 000f4 b2 30 mov dl, 48 ; 00000030H + 000f6 48 8d 8d 04 01 00 00 lea rcx, QWORD PTR $T3[rbp] - 000e5 e8 00 00 00 00 call ??$setfill@D@std@@YA?AU?$_Fillobj@D@0@D@Z ; std::setfill - 000ea 48 89 85 60 01 - 00 00 mov QWORD PTR tv129[rbp], rax - 000f1 48 8b 95 60 01 - 00 00 mov rdx, QWORD PTR tv129[rbp] - 000f8 48 8b 8d 58 01 - 00 00 mov rcx, QWORD PTR tv95[rbp] - 000ff e8 00 00 00 00 call ??$?6DU?$char_traits@D@std@@D@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Fillobj@D@0@@Z ; std::operator<<,char> - 00104 48 89 85 68 01 - 00 00 mov QWORD PTR tv141[rbp], rax - 0010b 8b 45 24 mov eax, DWORD PTR i$2[rbp] - 0010e 48 8b 4d 08 mov rcx, QWORD PTR T$1[rbp] - 00112 48 8b 49 20 mov rcx, QWORD PTR [rcx+32] - 00116 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] - 0011a 89 85 70 01 00 - 00 mov DWORD PTR tv139[rbp], eax - 00120 8b 95 70 01 00 - 00 mov edx, DWORD PTR tv139[rbp] - 00126 48 8b 8d 68 01 - 00 00 mov rcx, QWORD PTR tv141[rbp] - 0012d ff 15 00 00 00 + 000fd e8 00 00 00 00 call ??$setfill@D@std@@YA?AU?$_Fillobj@D@0@D@Z ; std::setfill + 00102 48 89 85 60 01 + 00 00 mov QWORD PTR tv132[rbp], rax + 00109 48 8b 95 60 01 + 00 00 mov rdx, QWORD PTR tv132[rbp] + 00110 48 8b 8d 58 01 + 00 00 mov rcx, QWORD PTR tv130[rbp] + 00117 e8 00 00 00 00 call ??$?6DU?$char_traits@D@std@@D@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBU?$_Fillobj@D@0@@Z ; std::operator<<,char> + 0011c 48 89 85 68 01 + 00 00 mov QWORD PTR tv144[rbp], rax + 00123 8b 45 24 mov eax, DWORD PTR i$2[rbp] + 00126 48 8b 4d 08 mov rcx, QWORD PTR T$1[rbp] + 0012a 48 8b 49 20 mov rcx, QWORD PTR [rcx+32] + 0012e 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] + 00132 89 85 70 01 00 + 00 mov DWORD PTR tv142[rbp], eax + 00138 8b 95 70 01 00 + 00 mov edx, DWORD PTR tv142[rbp] + 0013e 48 8b 8d 68 01 + 00 00 mov rcx, QWORD PTR tv144[rbp] + 00145 ff 15 00 00 00 00 call QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z - 00133 b2 20 mov dl, 32 ; 00000020H - 00135 48 8b c8 mov rcx, rax - 00138 e8 00 00 00 00 call ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z ; std::operator<< > + 0014b b2 20 mov dl, 32 ; 00000020H + 0014d 48 8b c8 mov rcx, rax + 00150 e8 00 00 00 00 call ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z ; std::operator<< > -; 571 : } +; 573 : } - 0013d e9 35 ff ff ff jmp $LN5@NcPrintBlo + 00155 e9 35 ff ff ff jmp $LN5@NcPrintBlo $LN6@NcPrintBlo: $LN8@NcPrintBlo: -; 572 : } -; 573 : } +; 574 : } +; 575 : } - 00142 e9 ff fe ff ff jmp $LN2@NcPrintBlo + 0015a e9 e7 fe ff ff jmp $LN2@NcPrintBlo $LN3@NcPrintBlo: -; 574 : } +; 576 : } - 00147 48 8d a5 88 01 + 0015f 48 8d a5 88 01 00 00 lea rsp, QWORD PTR [rbp+392] - 0014e 5f pop rdi - 0014f 5d pop rbp - 00150 c3 ret 0 + 00166 5f pop rdi + 00167 5d pop rbp + 00168 c3 ret 0 ?NcPrintBlockCode@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ENDP ; NcPrintBlockCode _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI @@ -9889,12 +9896,12 @@ _TEXT SEGMENT ConsoleHandle$ = 8 T$1 = 40 IClass$2 = 68 -tv128 = 276 -tv94 = 280 +tv131 = 276 +tv129 = 280 Block$ = 320 ?NcDebugPrint@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z PROC ; NcDebugPrint, COMDAT -; 533 : { +; 535 : { $LN11: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -9913,25 +9920,25 @@ $LN11: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 534 : HANDLE ConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); +; 536 : HANDLE ConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); 00036 b9 f5 ff ff ff mov ecx, -11 ; fffffff5H 0003b ff 15 00 00 00 00 call QWORD PTR __imp_GetStdHandle 00041 48 89 45 08 mov QWORD PTR ConsoleHandle$[rbp], rax -; 535 : if (!ConsoleHandle) +; 537 : if (!ConsoleHandle) 00045 48 83 7d 08 00 cmp QWORD PTR ConsoleHandle$[rbp], 0 0004a 75 05 jne SHORT $LN5@NcDebugPri -; 536 : return; +; 538 : return; - 0004c e9 eb 00 00 00 jmp $LN1@NcDebugPri + 0004c e9 03 01 00 00 jmp $LN1@NcDebugPri $LN5@NcDebugPri: -; 537 : -; 538 : for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) +; 539 : +; 540 : for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) 00051 48 8b 85 40 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -9944,123 +9951,130 @@ $LN2@NcDebugPri: 00068 48 89 45 28 mov QWORD PTR T$1[rbp], rax $LN4@NcDebugPri: 0006c 48 83 7d 28 00 cmp QWORD PTR T$1[rbp], 0 - 00071 0f 84 c5 00 00 + 00071 0f 84 dd 00 00 + 00 je $LN3@NcDebugPri + 00077 48 8b 85 40 01 + 00 00 mov rax, QWORD PTR Block$[rbp] + 0007e 48 8b 40 08 mov rax, QWORD PTR [rax+8] + 00082 48 8b 00 mov rax, QWORD PTR [rax] + 00085 48 39 45 28 cmp QWORD PTR T$1[rbp], rax + 00089 0f 84 c5 00 00 00 je $LN3@NcDebugPri -; 539 : { -; 540 : if (T->Flags & CODE_FLAG_IS_LABEL) +; 541 : { +; 542 : if (T->Flags & CODE_FLAG_IS_LABEL) - 00077 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] - 0007b 8b 40 18 mov eax, DWORD PTR [rax+24] - 0007e 83 e0 01 and eax, 1 - 00081 85 c0 test eax, eax - 00083 74 26 je SHORT $LN6@NcDebugPri + 0008f 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] + 00093 8b 40 18 mov eax, DWORD PTR [rax+24] + 00096 83 e0 01 and eax, 1 + 00099 85 c0 test eax, eax + 0009b 74 26 je SHORT $LN6@NcDebugPri -; 541 : { -; 542 : SetConsoleTextAttribute(ConsoleHandle, FOREGROUND_GREEN | FOREGROUND_RED); +; 543 : { +; 544 : SetConsoleTextAttribute(ConsoleHandle, FOREGROUND_GREEN | FOREGROUND_RED); - 00085 66 ba 06 00 mov dx, 6 - 00089 48 8b 4d 08 mov rcx, QWORD PTR ConsoleHandle$[rbp] - 0008d ff 15 00 00 00 + 0009d 66 ba 06 00 mov dx, 6 + 000a1 48 8b 4d 08 mov rcx, QWORD PTR ConsoleHandle$[rbp] + 000a5 ff 15 00 00 00 00 call QWORD PTR __imp_SetConsoleTextAttribute -; 543 : printf("Label: %u\n", T->Label); +; 545 : printf("Label: %u\n", T->Label); - 00093 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] - 00097 8b 50 1c mov edx, DWORD PTR [rax+28] - 0009a 48 8d 0d 00 00 + 000ab 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] + 000af 8b 50 1c mov edx, DWORD PTR [rax+28] + 000b2 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_0L@ILJOJNOL@Label?3?5?$CFu?6@ - 000a1 e8 00 00 00 00 call printf + 000b9 e8 00 00 00 00 call printf -; 544 : } +; 546 : } - 000a6 e9 8c 00 00 00 jmp $LN7@NcDebugPri + 000be e9 8c 00 00 00 jmp $LN7@NcDebugPri $LN6@NcDebugPri: -; 545 : else -; 546 : { -; 547 : XED_ICLASS_ENUM IClass = XedDecodedInstGetIClass(&T->XedInstruction); +; 547 : else +; 548 : { +; 549 : XED_ICLASS_ENUM IClass = XedDecodedInstGetIClass(&T->XedInstruction); - 000ab 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] - 000af 48 83 c0 30 add rax, 48 ; 00000030H - 000b3 48 8b c8 mov rcx, rax - 000b6 e8 00 00 00 00 call xed_decoded_inst_get_iclass - 000bb 89 45 44 mov DWORD PTR IClass$2[rbp], eax + 000c3 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] + 000c7 48 83 c0 30 add rax, 48 ; 00000030H + 000cb 48 8b c8 mov rcx, rax + 000ce e8 00 00 00 00 call xed_decoded_inst_get_iclass + 000d3 89 45 44 mov DWORD PTR IClass$2[rbp], eax -; 548 : if (T->Flags & CODE_FLAG_IS_REL_JMP) +; 550 : if (T->Flags & CODE_FLAG_IS_REL_JMP) - 000be 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] - 000c2 8b 40 18 mov eax, DWORD PTR [rax+24] - 000c5 83 e0 02 and eax, 2 - 000c8 85 c0 test eax, eax - 000ca 74 46 je SHORT $LN8@NcDebugPri + 000d6 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] + 000da 8b 40 18 mov eax, DWORD PTR [rax+24] + 000dd 83 e0 02 and eax, 2 + 000e0 85 c0 test eax, eax + 000e2 74 46 je SHORT $LN8@NcDebugPri -; 549 : { -; 550 : SetConsoleTextAttribute(ConsoleHandle, FOREGROUND_GREEN | FOREGROUND_RED); +; 551 : { +; 552 : SetConsoleTextAttribute(ConsoleHandle, FOREGROUND_GREEN | FOREGROUND_RED); - 000cc 66 ba 06 00 mov dx, 6 - 000d0 48 8b 4d 08 mov rcx, QWORD PTR ConsoleHandle$[rbp] - 000d4 ff 15 00 00 00 + 000e4 66 ba 06 00 mov dx, 6 + 000e8 48 8b 4d 08 mov rcx, QWORD PTR ConsoleHandle$[rbp] + 000ec ff 15 00 00 00 00 call QWORD PTR __imp_SetConsoleTextAttribute -; 551 : printf("%s: %u\n", XedIClassEnumToString(IClass), T->Label); - - 000da 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] - 000de 8b 40 1c mov eax, DWORD PTR [rax+28] - 000e1 89 85 14 01 00 - 00 mov DWORD PTR tv128[rbp], eax - 000e7 8b 4d 44 mov ecx, DWORD PTR IClass$2[rbp] - 000ea e8 00 00 00 00 call xed_iclass_enum_t2str - 000ef 48 89 85 18 01 - 00 00 mov QWORD PTR tv94[rbp], rax - 000f6 44 8b 85 14 01 - 00 00 mov r8d, DWORD PTR tv128[rbp] - 000fd 48 8b 95 18 01 - 00 00 mov rdx, QWORD PTR tv94[rbp] - 00104 48 8d 0d 00 00 +; 553 : printf("%s: %u\n", XedIClassEnumToString(IClass), T->Label); + + 000f2 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] + 000f6 8b 40 1c mov eax, DWORD PTR [rax+28] + 000f9 89 85 14 01 00 + 00 mov DWORD PTR tv131[rbp], eax + 000ff 8b 4d 44 mov ecx, DWORD PTR IClass$2[rbp] + 00102 e8 00 00 00 00 call xed_iclass_enum_t2str + 00107 48 89 85 18 01 + 00 00 mov QWORD PTR tv129[rbp], rax + 0010e 44 8b 85 14 01 + 00 00 mov r8d, DWORD PTR tv131[rbp] + 00115 48 8b 95 18 01 + 00 00 mov rdx, QWORD PTR tv129[rbp] + 0011c 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_07KNNCJAOA@?$CFs?3?5?$CFu?6@ - 0010b e8 00 00 00 00 call printf + 00123 e8 00 00 00 00 call printf -; 552 : } +; 554 : } - 00110 eb 25 jmp SHORT $LN9@NcDebugPri + 00128 eb 25 jmp SHORT $LN9@NcDebugPri $LN8@NcDebugPri: -; 553 : else -; 554 : { -; 555 : SetConsoleTextAttribute(ConsoleHandle, FOREGROUND_GREEN | FOREGROUND_BLUE); +; 555 : else +; 556 : { +; 557 : SetConsoleTextAttribute(ConsoleHandle, FOREGROUND_GREEN | FOREGROUND_BLUE); - 00112 66 ba 03 00 mov dx, 3 - 00116 48 8b 4d 08 mov rcx, QWORD PTR ConsoleHandle$[rbp] - 0011a ff 15 00 00 00 + 0012a 66 ba 03 00 mov dx, 3 + 0012e 48 8b 4d 08 mov rcx, QWORD PTR ConsoleHandle$[rbp] + 00132 ff 15 00 00 00 00 call QWORD PTR __imp_SetConsoleTextAttribute -; 556 : printf("%s\n", XedIClassEnumToString(IClass)); +; 558 : printf("%s\n", XedIClassEnumToString(IClass)); - 00120 8b 4d 44 mov ecx, DWORD PTR IClass$2[rbp] - 00123 e8 00 00 00 00 call xed_iclass_enum_t2str - 00128 48 8b d0 mov rdx, rax - 0012b 48 8d 0d 00 00 + 00138 8b 4d 44 mov ecx, DWORD PTR IClass$2[rbp] + 0013b e8 00 00 00 00 call xed_iclass_enum_t2str + 00140 48 8b d0 mov rdx, rax + 00143 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_03OFAPEBGM@?$CFs?6@ - 00132 e8 00 00 00 00 call printf + 0014a e8 00 00 00 00 call printf $LN9@NcDebugPri: $LN7@NcDebugPri: -; 557 : } -; 558 : } -; 559 : } +; 559 : } +; 560 : } +; 561 : } - 00137 e9 25 ff ff ff jmp $LN2@NcDebugPri + 0014f e9 0d ff ff ff jmp $LN2@NcDebugPri $LN3@NcDebugPri: $LN1@NcDebugPri: -; 560 : } +; 562 : } - 0013c 48 8d a5 28 01 + 00154 48 8d a5 28 01 00 00 lea rsp, QWORD PTR [rbp+296] - 00143 5f pop rdi - 00144 5d pop rbp - 00145 c3 ret 0 + 0015b 5f pop rdi + 0015c 5d pop rbp + 0015d c3 ret 0 ?NcDebugPrint@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ENDP ; NcDebugPrint _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI @@ -10074,7 +10088,7 @@ tv77 = 280 Block$ = 320 ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z PROC ; NcDeleteBlock, COMDAT -; 520 : { +; 522 : { $LN10: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -10093,7 +10107,7 @@ $LN10: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 521 : if (!Block->Start || !Block->End) +; 523 : if (!Block->Start || !Block->End) 00036 48 8b 85 40 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -10105,13 +10119,13 @@ $LN10: 0004f 75 02 jne SHORT $LN5@NcDeleteBl $LN6@NcDeleteBl: -; 522 : return; +; 524 : return; 00051 eb 71 jmp SHORT $LN1@NcDeleteBl $LN5@NcDeleteBl: -; 523 : -; 524 : for (PNATIVE_CODE_LINK T = Block->Start; T != Block->End->Next;) +; 525 : +; 526 : for (PNATIVE_CODE_LINK T = Block->Start; T != Block->End->Next;) 00053 48 8b 85 40 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -10125,14 +10139,14 @@ $LN2@NcDeleteBl: 0006f 48 39 45 08 cmp QWORD PTR T$1[rbp], rax 00073 74 4f je SHORT $LN3@NcDeleteBl -; 525 : { -; 526 : PNATIVE_CODE_LINK Next = T->Next; +; 527 : { +; 528 : PNATIVE_CODE_LINK Next = T->Next; 00075 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] 00079 48 8b 00 mov rax, QWORD PTR [rax] 0007c 48 89 45 28 mov QWORD PTR Next$2[rbp], rax -; 527 : delete T; +; 529 : delete T; 00080 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] 00084 48 89 85 08 01 @@ -10153,18 +10167,18 @@ $LN8@NcDeleteBl: 00 mov QWORD PTR tv77[rbp], 0 $LN9@NcDeleteBl: -; 528 : T = Next; +; 530 : T = Next; 000ba 48 8b 45 28 mov rax, QWORD PTR Next$2[rbp] 000be 48 89 45 08 mov QWORD PTR T$1[rbp], rax -; 529 : } +; 531 : } 000c2 eb 9d jmp SHORT $LN2@NcDeleteBl $LN3@NcDeleteBl: $LN1@NcDeleteBl: -; 530 : } +; 532 : } 000c4 48 8d a5 28 01 00 00 lea rsp, QWORD PTR [rbp+296] @@ -10184,7 +10198,7 @@ Block$ = 320 OutSize$ = 328 ?NcAssemble@@YAPEAXPEAU_NATIVE_CODE_BLOCK@@PEAK@Z PROC ; NcAssemble, COMDAT -; 495 : { +; 497 : { $LN9: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -10204,7 +10218,7 @@ $LN9: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 496 : if (!NcFixRelJmps(Block)) +; 498 : if (!NcFixRelJmps(Block)) 0003b 48 8b 8d 40 01 00 00 mov rcx, QWORD PTR Block$[rbp] @@ -10212,14 +10226,14 @@ $LN9: 00047 85 c0 test eax, eax 00049 75 07 jne SHORT $LN5@NcAssemble -; 497 : return NULL; +; 499 : return NULL; 0004b 33 c0 xor eax, eax - 0004d e9 b2 00 00 00 jmp $LN1@NcAssemble + 0004d e9 bc 00 00 00 jmp $LN1@NcAssemble $LN5@NcAssemble: -; 498 : -; 499 : *OutSize = NcCalcBlockSize(Block); +; 500 : +; 501 : *OutSize = NcCalcBlockSize(Block); 00052 48 8b 8d 40 01 00 00 mov rcx, QWORD PTR Block$[rbp] @@ -10228,8 +10242,8 @@ $LN5@NcAssemble: 00 00 mov rcx, QWORD PTR OutSize$[rbp] 00065 89 01 mov DWORD PTR [rcx], eax -; 500 : -; 501 : PUCHAR Buffer = (PUCHAR)malloc(*OutSize); +; 502 : +; 503 : PUCHAR Buffer = (PUCHAR)malloc(*OutSize); 00067 48 8b 85 48 01 00 00 mov rax, QWORD PTR OutSize$[rbp] @@ -10239,95 +10253,97 @@ $LN5@NcAssemble: 00 call QWORD PTR __imp_malloc 00078 48 89 45 08 mov QWORD PTR Buffer$[rbp], rax -; 502 : if (!Buffer) +; 504 : if (!Buffer) 0007c 48 83 7d 08 00 cmp QWORD PTR Buffer$[rbp], 0 - 00081 75 04 jne SHORT $LN6@NcAssemble + 00081 75 07 jne SHORT $LN6@NcAssemble -; 503 : return NULL; +; 505 : return NULL; 00083 33 c0 xor eax, eax - 00085 eb 7d jmp SHORT $LN1@NcAssemble + 00085 e9 84 00 00 00 jmp $LN1@NcAssemble $LN6@NcAssemble: -; 504 : -; 505 : PUCHAR BufferOffset = Buffer; +; 506 : +; 507 : PUCHAR BufferOffset = Buffer; - 00087 48 8b 45 08 mov rax, QWORD PTR Buffer$[rbp] - 0008b 48 89 45 28 mov QWORD PTR BufferOffset$[rbp], rax + 0008a 48 8b 45 08 mov rax, QWORD PTR Buffer$[rbp] + 0008e 48 89 45 28 mov QWORD PTR BufferOffset$[rbp], rax -; 506 : -; 507 : for (PNATIVE_CODE_LINK T = Block->Start; T != Block->End->Next; T = T->Next) +; 508 : +; 509 : for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) - 0008f 48 8b 85 40 01 + 00092 48 8b 85 40 01 00 00 mov rax, QWORD PTR Block$[rbp] - 00096 48 8b 00 mov rax, QWORD PTR [rax] - 00099 48 89 45 48 mov QWORD PTR T$1[rbp], rax - 0009d eb 0b jmp SHORT $LN4@NcAssemble + 00099 48 8b 00 mov rax, QWORD PTR [rax] + 0009c 48 89 45 48 mov QWORD PTR T$1[rbp], rax + 000a0 eb 0b jmp SHORT $LN4@NcAssemble $LN2@NcAssemble: - 0009f 48 8b 45 48 mov rax, QWORD PTR T$1[rbp] - 000a3 48 8b 00 mov rax, QWORD PTR [rax] - 000a6 48 89 45 48 mov QWORD PTR T$1[rbp], rax + 000a2 48 8b 45 48 mov rax, QWORD PTR T$1[rbp] + 000a6 48 8b 00 mov rax, QWORD PTR [rax] + 000a9 48 89 45 48 mov QWORD PTR T$1[rbp], rax $LN4@NcAssemble: - 000aa 48 8b 85 40 01 + 000ad 48 83 7d 48 00 cmp QWORD PTR T$1[rbp], 0 + 000b2 74 56 je SHORT $LN3@NcAssemble + 000b4 48 8b 85 40 01 00 00 mov rax, QWORD PTR Block$[rbp] - 000b1 48 8b 40 08 mov rax, QWORD PTR [rax+8] - 000b5 48 8b 00 mov rax, QWORD PTR [rax] - 000b8 48 39 45 48 cmp QWORD PTR T$1[rbp], rax - 000bc 74 42 je SHORT $LN3@NcAssemble + 000bb 48 8b 40 08 mov rax, QWORD PTR [rax+8] + 000bf 48 8b 00 mov rax, QWORD PTR [rax] + 000c2 48 39 45 48 cmp QWORD PTR T$1[rbp], rax + 000c6 74 42 je SHORT $LN3@NcAssemble -; 508 : { -; 509 : if (T->Flags & CODE_FLAG_IS_LABEL) +; 510 : { +; 511 : if (T->Flags & CODE_FLAG_IS_LABEL) - 000be 48 8b 45 48 mov rax, QWORD PTR T$1[rbp] - 000c2 8b 40 18 mov eax, DWORD PTR [rax+24] - 000c5 83 e0 01 and eax, 1 - 000c8 85 c0 test eax, eax - 000ca 74 02 je SHORT $LN7@NcAssemble + 000c8 48 8b 45 48 mov rax, QWORD PTR T$1[rbp] + 000cc 8b 40 18 mov eax, DWORD PTR [rax+24] + 000cf 83 e0 01 and eax, 1 + 000d2 85 c0 test eax, eax + 000d4 74 02 je SHORT $LN7@NcAssemble -; 510 : continue; +; 512 : continue; - 000cc eb d1 jmp SHORT $LN2@NcAssemble + 000d6 eb ca jmp SHORT $LN2@NcAssemble $LN7@NcAssemble: -; 511 : -; 512 : RtlCopyMemory(BufferOffset, T->RawData, T->RawDataSize); +; 513 : +; 514 : RtlCopyMemory(BufferOffset, T->RawData, T->RawDataSize); - 000ce 48 8b 45 48 mov rax, QWORD PTR T$1[rbp] - 000d2 8b 40 28 mov eax, DWORD PTR [rax+40] - 000d5 44 8b c0 mov r8d, eax 000d8 48 8b 45 48 mov rax, QWORD PTR T$1[rbp] - 000dc 48 8b 50 20 mov rdx, QWORD PTR [rax+32] - 000e0 48 8b 4d 28 mov rcx, QWORD PTR BufferOffset$[rbp] - 000e4 e8 00 00 00 00 call memcpy + 000dc 8b 40 28 mov eax, DWORD PTR [rax+40] + 000df 44 8b c0 mov r8d, eax + 000e2 48 8b 45 48 mov rax, QWORD PTR T$1[rbp] + 000e6 48 8b 50 20 mov rdx, QWORD PTR [rax+32] + 000ea 48 8b 4d 28 mov rcx, QWORD PTR BufferOffset$[rbp] + 000ee e8 00 00 00 00 call memcpy -; 513 : BufferOffset += T->RawDataSize; +; 515 : BufferOffset += T->RawDataSize; - 000e9 48 8b 45 48 mov rax, QWORD PTR T$1[rbp] - 000ed 8b 40 28 mov eax, DWORD PTR [rax+40] - 000f0 48 8b 4d 28 mov rcx, QWORD PTR BufferOffset$[rbp] - 000f4 48 03 c8 add rcx, rax - 000f7 48 8b c1 mov rax, rcx - 000fa 48 89 45 28 mov QWORD PTR BufferOffset$[rbp], rax + 000f3 48 8b 45 48 mov rax, QWORD PTR T$1[rbp] + 000f7 8b 40 28 mov eax, DWORD PTR [rax+40] + 000fa 48 8b 4d 28 mov rcx, QWORD PTR BufferOffset$[rbp] + 000fe 48 03 c8 add rcx, rax + 00101 48 8b c1 mov rax, rcx + 00104 48 89 45 28 mov QWORD PTR BufferOffset$[rbp], rax -; 514 : } +; 516 : } - 000fe eb 9f jmp SHORT $LN2@NcAssemble + 00108 eb 98 jmp SHORT $LN2@NcAssemble $LN3@NcAssemble: -; 515 : -; 516 : return Buffer; +; 517 : +; 518 : return Buffer; - 00100 48 8b 45 08 mov rax, QWORD PTR Buffer$[rbp] + 0010a 48 8b 45 08 mov rax, QWORD PTR Buffer$[rbp] $LN1@NcAssemble: -; 517 : } +; 519 : } - 00104 48 8d a5 28 01 + 0010e 48 8d a5 28 01 00 00 lea rsp, QWORD PTR [rbp+296] - 0010b 5f pop rdi - 0010c 5d pop rbp - 0010d c3 ret 0 + 00115 5f pop rdi + 00116 5d pop rbp + 00117 c3 ret 0 ?NcAssemble@@YAPEAXPEAU_NATIVE_CODE_BLOCK@@PEAK@Z ENDP ; NcAssemble _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI @@ -10351,7 +10367,7 @@ Buffer$ = 520 BufferSize$ = 528 ?NcDisassemble@@YAHPEAU_NATIVE_CODE_BLOCK@@PEAXK@Z PROC ; NcDisassemble, COMDAT -; 463 : { +; 465 : { $LN13: 00000 44 89 44 24 18 mov DWORD PTR [rsp+24], r8d @@ -10372,20 +10388,20 @@ $LN13: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 0003b e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 464 : PUCHAR Buf = (PUCHAR)Buffer; +; 466 : PUCHAR Buf = (PUCHAR)Buffer; 00040 48 8b 85 08 02 00 00 mov rax, QWORD PTR Buffer$[rbp] 00047 48 89 45 08 mov QWORD PTR Buf$[rbp], rax -; 465 : ULONG Offset = 0; +; 467 : ULONG Offset = 0; 0004b c7 45 24 00 00 00 00 mov DWORD PTR Offset$[rbp], 0 $LN2@NcDisassem: -; 466 : -; 467 : while (Offset < BufferSize) +; 468 : +; 469 : while (Offset < BufferSize) 00052 8b 85 10 02 00 00 mov eax, DWORD PTR BufferSize$[rbp] @@ -10393,8 +10409,8 @@ $LN2@NcDisassem: 0005b 0f 83 b8 01 00 00 jae $LN3@NcDisassem -; 468 : { -; 469 : PNATIVE_CODE_LINK Link = new NATIVE_CODE_LINK; +; 470 : { +; 471 : PNATIVE_CODE_LINK Link = new NATIVE_CODE_LINK; 00061 b9 f0 00 00 00 mov ecx, 240 ; 000000f0H 00066 e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new @@ -10422,13 +10438,13 @@ $LN7@NcDisassem: 00 00 mov rax, QWORD PTR $T4[rbp] 000b1 48 89 45 48 mov QWORD PTR Link$1[rbp], rax -; 470 : Link->Flags = CODE_FLAG_IS_INST; +; 472 : Link->Flags = CODE_FLAG_IS_INST; 000b5 48 8b 45 48 mov rax, QWORD PTR Link$1[rbp] 000b9 c7 40 18 04 00 00 00 mov DWORD PTR [rax+24], 4 -; 471 : ULONG PossibleSize = min(15, BufferSize - Offset); +; 473 : ULONG PossibleSize = min(15, BufferSize - Offset); 000c0 8b 45 24 mov eax, DWORD PTR Offset$[rbp] 000c3 8b 8d 10 02 00 @@ -10453,7 +10469,7 @@ $LN9@NcDisassem: 00 mov eax, DWORD PTR tv80[rbp] 000f7 89 45 64 mov DWORD PTR PossibleSize$2[rbp], eax -; 472 : XED_ERROR_ENUM DecodeError = XedDecode(&Link->XedInstruction, (Buf + Offset), PossibleSize); +; 474 : XED_ERROR_ENUM DecodeError = XedDecode(&Link->XedInstruction, (Buf + Offset), PossibleSize); 000fa 8b 45 24 mov eax, DWORD PTR Offset$[rbp] 000fd 48 8b 4d 08 mov rcx, QWORD PTR Buf$[rbp] @@ -10467,14 +10483,14 @@ $LN9@NcDisassem: 0011b 89 85 84 00 00 00 mov DWORD PTR DecodeError$3[rbp], eax -; 473 : if (DecodeError != XED_ERROR_NONE) +; 475 : if (DecodeError != XED_ERROR_NONE) 00121 83 bd 84 00 00 00 00 cmp DWORD PTR DecodeError$3[rbp], 0 00128 74 67 je SHORT $LN4@NcDisassem -; 474 : { -; 475 : printf("XedDecode failed with error %s\n", XedErrorEnumToString(DecodeError)); +; 476 : { +; 477 : printf("XedDecode failed with error %s\n", XedErrorEnumToString(DecodeError)); 0012a 8b 8d 84 00 00 00 mov ecx, DWORD PTR DecodeError$3[rbp] @@ -10484,13 +10500,13 @@ $LN9@NcDisassem: 00 00 lea rcx, OFFSET FLAT:??_C@_0CA@KDIENFLL@XedDecode?5failed?5with?5error?5?$CFs?6@ 0013f e8 00 00 00 00 call printf -; 476 : NcDeleteBlock(Block); +; 478 : NcDeleteBlock(Block); 00144 48 8b 8d 00 02 00 00 mov rcx, QWORD PTR Block$[rbp] 0014b e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 477 : delete Link; +; 479 : delete Link; 00150 48 8b 45 48 mov rax, QWORD PTR Link$1[rbp] 00154 48 89 85 a8 01 @@ -10511,14 +10527,14 @@ $LN10@NcDisassem: 00 mov QWORD PTR tv130[rbp], 0 $LN11@NcDisassem: -; 478 : return FALSE; +; 480 : return FALSE; 0018a 33 c0 xor eax, eax 0018c e9 99 00 00 00 jmp $LN1@NcDisassem $LN4@NcDisassem: -; 479 : } -; 480 : Link->RawDataSize = XedDecodedInstGetLength(&Link->XedInstruction); +; 481 : } +; 482 : Link->RawDataSize = XedDecodedInstGetLength(&Link->XedInstruction); 00191 48 8b 45 48 mov rax, QWORD PTR Link$1[rbp] 00195 48 83 c0 30 add rax, 48 ; 00000030H @@ -10527,7 +10543,7 @@ $LN4@NcDisassem: 001a1 48 8b 4d 48 mov rcx, QWORD PTR Link$1[rbp] 001a5 89 41 28 mov DWORD PTR [rcx+40], eax -; 481 : Link->RawData = new UCHAR[Link->RawDataSize]; +; 483 : Link->RawData = new UCHAR[Link->RawDataSize]; 001a8 48 8b 45 48 mov rax, QWORD PTR Link$1[rbp] 001ac 8b 40 28 mov eax, DWORD PTR [rax+40] @@ -10540,7 +10556,7 @@ $LN4@NcDisassem: 00 00 mov rcx, QWORD PTR $T7[rbp] 001c8 48 89 48 20 mov QWORD PTR [rax+32], rcx -; 482 : RtlCopyMemory(Link->RawData, (Buf + Offset), Link->RawDataSize); +; 484 : RtlCopyMemory(Link->RawData, (Buf + Offset), Link->RawDataSize); 001cc 48 8b 45 48 mov rax, QWORD PTR Link$1[rbp] 001d0 8b 40 28 mov eax, DWORD PTR [rax+40] @@ -10554,16 +10570,16 @@ $LN4@NcDisassem: 001ea 48 8b 48 20 mov rcx, QWORD PTR [rax+32] 001ee e8 00 00 00 00 call memcpy -; 483 : -; 484 : NcAppendToBlock(Block, Link); +; 485 : +; 486 : NcAppendToBlock(Block, Link); 001f3 48 8b 55 48 mov rdx, QWORD PTR Link$1[rbp] 001f7 48 8b 8d 00 02 00 00 mov rcx, QWORD PTR Block$[rbp] 001fe e8 00 00 00 00 call ?NcAppendToBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@@Z ; NcAppendToBlock -; 485 : -; 486 : Offset += Link->RawDataSize; +; 487 : +; 488 : Offset += Link->RawDataSize; 00203 48 8b 45 48 mov rax, QWORD PTR Link$1[rbp] 00207 8b 40 28 mov eax, DWORD PTR [rax+40] @@ -10572,25 +10588,25 @@ $LN4@NcDisassem: 0020f 8b c1 mov eax, ecx 00211 89 45 24 mov DWORD PTR Offset$[rbp], eax -; 487 : } +; 489 : } 00214 e9 39 fe ff ff jmp $LN2@NcDisassem $LN3@NcDisassem: -; 488 : -; 489 : NcCreateLabels(Block); +; 490 : +; 491 : NcCreateLabels(Block); 00219 48 8b 8d 00 02 00 00 mov rcx, QWORD PTR Block$[rbp] 00220 e8 00 00 00 00 call ?NcCreateLabels@@YAHPEAU_NATIVE_CODE_BLOCK@@@Z ; NcCreateLabels -; 490 : -; 491 : return TRUE; +; 492 : +; 493 : return TRUE; 00225 b8 01 00 00 00 mov eax, 1 $LN1@NcDisassem: -; 492 : } +; 494 : } 0022a 48 8d a5 e8 01 00 00 lea rsp, QWORD PTR [rbp+488] @@ -10691,7 +10707,7 @@ __$ArrayPad$ = 1784 Block$ = 1824 ?NcFixRelJmps@@YAHPEAU_NATIVE_CODE_BLOCK@@@Z PROC ; NcFixRelJmps, COMDAT -; 383 : { +; 385 : { $LN21: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -10716,7 +10732,7 @@ $LN21: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00043 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 384 : for (PNATIVE_CODE_LINK T = Block->Start; T != Block->End->Next;) +; 386 : for (PNATIVE_CODE_LINK T = Block->Start; T != Block->End->Next;) 00048 48 8b 85 20 07 00 00 mov rax, QWORD PTR Block$[rbp] @@ -10731,8 +10747,8 @@ $LN2@NcFixRelJm: 00068 0f 84 04 03 00 00 je $LN3@NcFixRelJm -; 385 : { -; 386 : if (T->Flags & CODE_FLAG_IS_REL_JMP) +; 387 : { +; 388 : if (T->Flags & CODE_FLAG_IS_REL_JMP) 0006e 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 00072 8b 40 18 mov eax, DWORD PTR [rax+24] @@ -10741,13 +10757,13 @@ $LN2@NcFixRelJm: 0007a 0f 84 e2 02 00 00 je $LN7@NcFixRelJm -; 387 : { -; 388 : INT32 BranchDisp = 0; +; 389 : { +; 390 : INT32 BranchDisp = 0; 00080 c7 45 24 00 00 00 00 mov DWORD PTR BranchDisp$10[rbp], 0 -; 389 : if (!NcGetDeltaToLabel(T, &BranchDisp)) +; 391 : if (!NcGetDeltaToLabel(T, &BranchDisp)) 00087 48 8d 55 24 lea rdx, QWORD PTR BranchDisp$10[rbp] 0008b 48 8b 4d 08 mov rcx, QWORD PTR T$9[rbp] @@ -10755,14 +10771,14 @@ $LN2@NcFixRelJm: 00094 85 c0 test eax, eax 00096 75 07 jne SHORT $LN8@NcFixRelJm -; 390 : return FALSE; +; 392 : return FALSE; 00098 33 c0 xor eax, eax 0009a e9 d8 02 00 00 jmp $LN1@NcFixRelJm $LN8@NcFixRelJm: -; 391 : -; 392 : ULONG DispWidth = XedDecodedInstGetBranchDisplacementWidthBits(&T->XedInstruction); +; 393 : +; 394 : ULONG DispWidth = XedDecodedInstGetBranchDisplacementWidthBits(&T->XedInstruction); 0009f 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 000a3 48 83 c0 30 add rax, 48 ; 00000030H @@ -10770,7 +10786,7 @@ $LN8@NcFixRelJm: 000aa e8 00 00 00 00 call xed_decoded_inst_get_branch_displacement_width_bits 000af 89 45 44 mov DWORD PTR DispWidth$11[rbp], eax -; 393 : if (log2(abs(BranchDisp)) + 1 > DispWidth) +; 395 : if (log2(abs(BranchDisp)) + 1 > DispWidth) 000b2 8b 4d 24 mov ecx, DWORD PTR BranchDisp$10[rbp] 000b5 e8 00 00 00 00 call abs @@ -10784,30 +10800,30 @@ $LN8@NcFixRelJm: 000d5 0f 86 f3 01 00 00 jbe $LN9@NcFixRelJm -; 394 : { -; 395 : //duh oh -; 396 : if (DispWidth == 32) +; 396 : { +; 397 : //duh oh +; 398 : if (DispWidth == 32) 000db 83 7d 44 20 cmp DWORD PTR DispWidth$11[rbp], 32 ; 00000020H 000df 75 07 jne SHORT $LN11@NcFixRelJm -; 397 : return FALSE; +; 399 : return FALSE; 000e1 33 c0 xor eax, eax 000e3 e9 8f 02 00 00 jmp $LN1@NcFixRelJm $LN11@NcFixRelJm: -; 398 : -; 399 : //Grow displacement width to required size -; 400 : DispWidth *= 2; +; 400 : +; 401 : //Grow displacement width to required size +; 402 : DispWidth *= 2; 000e8 8b 45 44 mov eax, DWORD PTR DispWidth$11[rbp] 000eb d1 e0 shl eax, 1 000ed 89 45 44 mov DWORD PTR DispWidth$11[rbp], eax -; 401 : -; 402 : //Check again -; 403 : if (log2(abs(BranchDisp)) + 1 > DispWidth) +; 403 : +; 404 : //Check again +; 405 : if (log2(abs(BranchDisp)) + 1 > DispWidth) 000f0 8b 4d 24 mov ecx, DWORD PTR BranchDisp$10[rbp] 000f3 e8 00 00 00 00 call abs @@ -10820,46 +10836,46 @@ $LN11@NcFixRelJm: 0010f 66 0f 2f c1 comisd xmm0, xmm1 00113 76 15 jbe SHORT $LN12@NcFixRelJm -; 404 : { -; 405 : if (DispWidth == 32) +; 406 : { +; 407 : if (DispWidth == 32) 00115 83 7d 44 20 cmp DWORD PTR DispWidth$11[rbp], 32 ; 00000020H 00119 75 07 jne SHORT $LN13@NcFixRelJm -; 406 : return FALSE; +; 408 : return FALSE; 0011b 33 c0 xor eax, eax 0011d e9 55 02 00 00 jmp $LN1@NcFixRelJm $LN13@NcFixRelJm: -; 407 : -; 408 : //Grow once more if not already at 32 -; 409 : DispWidth *= 2; +; 409 : +; 410 : //Grow once more if not already at 32 +; 411 : DispWidth *= 2; 00122 8b 45 44 mov eax, DWORD PTR DispWidth$11[rbp] 00125 d1 e0 shl eax, 1 00127 89 45 44 mov DWORD PTR DispWidth$11[rbp], eax $LN12@NcFixRelJm: -; 410 : } -; 411 : -; 412 : //Encode new instruction -; 413 : XED_STATE MachineState; -; 414 : MachineState.mmode = XED_MACHINE_MODE_LONG_64; +; 412 : } +; 413 : +; 414 : //Encode new instruction +; 415 : XED_STATE MachineState; +; 416 : MachineState.mmode = XED_MACHINE_MODE_LONG_64; 0012a c7 45 68 01 00 00 00 mov DWORD PTR MachineState$12[rbp], 1 -; 415 : MachineState.stack_addr_width = XED_ADDRESS_WIDTH_64b; +; 417 : MachineState.stack_addr_width = XED_ADDRESS_WIDTH_64b; 00131 c7 45 6c 08 00 00 00 mov DWORD PTR MachineState$12[rbp+4], 8 -; 416 : XED_ENCODER_INSTRUCTION EncoderInstruction; -; 417 : XED_ENCODER_REQUEST EncoderRequest; -; 418 : UCHAR EncodeBuffer[15]; -; 419 : UINT ReturnedSize; -; 420 : XED_ICLASS_ENUM IClass = XedDecodedInstGetIClass(&T->XedInstruction); +; 418 : XED_ENCODER_INSTRUCTION EncoderInstruction; +; 419 : XED_ENCODER_REQUEST EncoderRequest; +; 420 : UCHAR EncodeBuffer[15]; +; 421 : UINT ReturnedSize; +; 422 : XED_ICLASS_ENUM IClass = XedDecodedInstGetIClass(&T->XedInstruction); 00138 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 0013c 48 83 c0 30 add rax, 48 ; 00000030H @@ -10868,9 +10884,9 @@ $LN12@NcFixRelJm: 00148 89 85 74 03 00 00 mov DWORD PTR IClass$17[rbp], eax -; 421 : -; 422 : //Do the encoding -; 423 : XedInst1(&EncoderInstruction, MachineState, IClass, DispWidth, XedRelBr(0, DispWidth)); +; 423 : +; 424 : //Do the encoding +; 425 : XedInst1(&EncoderInstruction, MachineState, IClass, DispWidth, XedRelBr(0, DispWidth)); 0014e 44 8b 45 44 mov r8d, DWORD PTR DispWidth$11[rbp] 00152 33 d2 xor edx, edx @@ -10902,14 +10918,14 @@ $LN12@NcFixRelJm: 00 00 lea rcx, QWORD PTR EncoderInstruction$13[rbp] 001b1 e8 00 00 00 00 call xed_inst1 -; 424 : XedEncoderRequestZeroSetMode(&EncoderRequest, &MachineState); +; 426 : XedEncoderRequestZeroSetMode(&EncoderRequest, &MachineState); 001b6 48 8d 55 68 lea rdx, QWORD PTR MachineState$12[rbp] 001ba 48 8d 8d 50 02 00 00 lea rcx, QWORD PTR EncoderRequest$14[rbp] 001c1 e8 00 00 00 00 call xed_encoder_request_zero_set_mode -; 425 : if (!XedConvertToEncoderRequest(&EncoderRequest, &EncoderInstruction)) +; 427 : if (!XedConvertToEncoderRequest(&EncoderRequest, &EncoderInstruction)) 001c6 48 8d 95 90 00 00 00 lea rdx, QWORD PTR EncoderInstruction$13[rbp] @@ -10919,13 +10935,13 @@ $LN12@NcFixRelJm: 001d9 85 c0 test eax, eax 001db 75 07 jne SHORT $LN14@NcFixRelJm -; 426 : return FALSE; +; 428 : return FALSE; 001dd 33 c0 xor eax, eax 001df e9 93 01 00 00 jmp $LN1@NcFixRelJm $LN14@NcFixRelJm: -; 427 : if (XED_ERROR_NONE != XedEncode(&EncoderRequest, EncodeBuffer, 15, &ReturnedSize)) +; 429 : if (XED_ERROR_NONE != XedEncode(&EncoderRequest, EncodeBuffer, 15, &ReturnedSize)) 001e4 4c 8d 8d 54 03 00 00 lea r9, QWORD PTR ReturnedSize$16[rbp] @@ -10939,15 +10955,15 @@ $LN14@NcFixRelJm: 00204 85 c0 test eax, eax 00206 74 07 je SHORT $LN15@NcFixRelJm -; 428 : return FALSE; +; 430 : return FALSE; 00208 33 c0 xor eax, eax 0020a e9 68 01 00 00 jmp $LN1@NcFixRelJm $LN15@NcFixRelJm: -; 429 : -; 430 : //fixup T->RawData -; 431 : delete[] T->RawData; +; 431 : +; 432 : //fixup T->RawData +; 433 : delete[] T->RawData; 0020f 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 00213 48 8b 40 20 mov rax, QWORD PTR [rax+32] @@ -10957,14 +10973,14 @@ $LN15@NcFixRelJm: 00 00 mov rcx, QWORD PTR $T20[rbp] 00225 e8 00 00 00 00 call ??_V@YAXPEAX@Z ; operator delete[] -; 432 : T->RawDataSize = ReturnedSize; +; 434 : T->RawDataSize = ReturnedSize; 0022a 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 0022e 8b 8d 54 03 00 00 mov ecx, DWORD PTR ReturnedSize$16[rbp] 00234 89 48 28 mov DWORD PTR [rax+40], ecx -; 433 : T->RawData = new UCHAR[ReturnedSize]; +; 435 : T->RawData = new UCHAR[ReturnedSize]; 00237 8b 85 54 03 00 00 mov eax, DWORD PTR ReturnedSize$16[rbp] @@ -10977,7 +10993,7 @@ $LN15@NcFixRelJm: 00 00 mov rcx, QWORD PTR $T21[rbp] 00256 48 89 48 20 mov QWORD PTR [rax+32], rcx -; 434 : RtlCopyMemory(T->RawData, EncodeBuffer, ReturnedSize); +; 436 : RtlCopyMemory(T->RawData, EncodeBuffer, ReturnedSize); 0025a 8b 85 54 03 00 00 mov eax, DWORD PTR ReturnedSize$16[rbp] @@ -10988,9 +11004,9 @@ $LN15@NcFixRelJm: 0026e 48 8b 48 20 mov rcx, QWORD PTR [rax+32] 00272 e8 00 00 00 00 call memcpy -; 435 : -; 436 : //Decode instruction so its proper and all that -; 437 : XedDecodedInstZeroSetMode(&T->XedInstruction, &MachineState); +; 437 : +; 438 : //Decode instruction so its proper and all that +; 439 : XedDecodedInstZeroSetMode(&T->XedInstruction, &MachineState); 00277 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 0027b 48 83 c0 30 add rax, 48 ; 00000030H @@ -10998,7 +11014,7 @@ $LN15@NcFixRelJm: 00283 48 8b c8 mov rcx, rax 00286 e8 00 00 00 00 call xed_decoded_inst_zero_set_mode -; 438 : if (XED_ERROR_NONE != XedDecode(&T->XedInstruction, T->RawData, T->RawDataSize)) +; 440 : if (XED_ERROR_NONE != XedDecode(&T->XedInstruction, T->RawData, T->RawDataSize)) 0028b 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 0028f 48 83 c0 30 add rax, 48 ; 00000030H @@ -11011,33 +11027,33 @@ $LN15@NcFixRelJm: 002ab 85 c0 test eax, eax 002ad 74 07 je SHORT $LN16@NcFixRelJm -; 439 : return FALSE; +; 441 : return FALSE; 002af 33 c0 xor eax, eax 002b1 e9 c1 00 00 00 jmp $LN1@NcFixRelJm $LN16@NcFixRelJm: -; 440 : -; 441 : //Go back to the start and loop through all labels again because now this instruction is larger :)))) -; 442 : T = Block->Start; +; 442 : +; 443 : //Go back to the start and loop through all labels again because now this instruction is larger :)))) +; 444 : T = Block->Start; 002b6 48 8b 85 20 07 00 00 mov rax, QWORD PTR Block$[rbp] 002bd 48 8b 00 mov rax, QWORD PTR [rax] 002c0 48 89 45 08 mov QWORD PTR T$9[rbp], rax -; 443 : continue; +; 445 : continue; 002c4 e9 8d fd ff ff jmp $LN2@NcFixRelJm -; 444 : } +; 446 : } 002c9 e9 94 00 00 00 jmp $LN10@NcFixRelJm $LN9@NcFixRelJm: -; 445 : else -; 446 : { -; 447 : DispWidth = XedDecodedInstGetBranchDisplacementWidth(&T->XedInstruction); +; 447 : else +; 448 : { +; 449 : DispWidth = XedDecodedInstGetBranchDisplacementWidth(&T->XedInstruction); 002ce 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 002d2 48 83 c0 30 add rax, 48 ; 00000030H @@ -11045,7 +11061,7 @@ $LN9@NcFixRelJm: 002d9 e8 00 00 00 00 call xed_decoded_inst_get_branch_displacement_width 002de 89 45 44 mov DWORD PTR DispWidth$11[rbp], eax -; 448 : switch (DispWidth) +; 450 : switch (DispWidth) 002e1 8b 45 44 mov eax, DWORD PTR DispWidth$11[rbp] 002e4 89 85 f4 06 00 @@ -11062,8 +11078,8 @@ $LN9@NcFixRelJm: 00305 eb 5b jmp SHORT $LN5@NcFixRelJm $LN17@NcFixRelJm: -; 449 : { -; 450 : case 1: *(PINT8)&T->RawData[T->RawDataSize - DispWidth] = (INT8)BranchDisp; break; +; 451 : { +; 452 : case 1: *(PINT8)&T->RawData[T->RawDataSize - DispWidth] = (INT8)BranchDisp; break; 00307 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 0030b 8b 4d 44 mov ecx, DWORD PTR DispWidth$11[rbp] @@ -11077,7 +11093,7 @@ $LN17@NcFixRelJm: 00324 eb 3c jmp SHORT $LN5@NcFixRelJm $LN18@NcFixRelJm: -; 451 : case 2: *(PINT16)&T->RawData[T->RawDataSize - DispWidth] = (INT16)BranchDisp; break; +; 453 : case 2: *(PINT16)&T->RawData[T->RawDataSize - DispWidth] = (INT16)BranchDisp; break; 00326 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 0032a 8b 4d 44 mov ecx, DWORD PTR DispWidth$11[rbp] @@ -11091,7 +11107,7 @@ $LN18@NcFixRelJm: 00344 eb 1c jmp SHORT $LN5@NcFixRelJm $LN19@NcFixRelJm: -; 452 : case 4: *(PINT32)&T->RawData[T->RawDataSize - DispWidth] = (INT32)BranchDisp; break; +; 454 : case 4: *(PINT32)&T->RawData[T->RawDataSize - DispWidth] = (INT32)BranchDisp; break; 00346 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 0034a 8b 4d 44 mov ecx, DWORD PTR DispWidth$11[rbp] @@ -11106,27 +11122,27 @@ $LN5@NcFixRelJm: $LN10@NcFixRelJm: $LN7@NcFixRelJm: -; 453 : } -; 454 : } -; 455 : } -; 456 : -; 457 : T = T->Next; +; 455 : } +; 456 : } +; 457 : } +; 458 : +; 459 : T = T->Next; 00362 48 8b 45 08 mov rax, QWORD PTR T$9[rbp] 00366 48 8b 00 mov rax, QWORD PTR [rax] 00369 48 89 45 08 mov QWORD PTR T$9[rbp], rax -; 458 : } +; 460 : } 0036d e9 e4 fc ff ff jmp $LN2@NcFixRelJm $LN3@NcFixRelJm: -; 459 : return TRUE; +; 461 : return TRUE; 00372 b8 01 00 00 00 mov eax, 1 $LN1@NcFixRelJm: -; 460 : } +; 462 : } 00377 48 8b f8 mov rdi, rax 0037a 48 8d 4d d0 lea rcx, QWORD PTR [rbp-48] @@ -11157,7 +11173,7 @@ Link$ = 320 DeltaOut$ = 328 ?NcGetDeltaToLabel@@YAHPEAU_NATIVE_CODE_LINK@@PEAH@Z PROC ; NcGetDeltaToLabel, COMDAT -; 347 : { +; 349 : { $LN13: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -11177,13 +11193,13 @@ $LN13: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 348 : INT32 Delta = 0; +; 350 : INT32 Delta = 0; 0003b c7 45 04 00 00 00 00 mov DWORD PTR Delta$[rbp], 0 -; 349 : //First checking backwards because I feel like thats the direction most jmps are in -; 350 : for (PNATIVE_CODE_LINK T = Link; T; T = T->Prev) +; 351 : //First checking backwards because I feel like thats the direction most jmps are in +; 352 : for (PNATIVE_CODE_LINK T = Link; T; T = T->Prev) 00042 48 8b 85 40 01 00 00 mov rax, QWORD PTR Link$[rbp] @@ -11197,8 +11213,8 @@ $LN4@NcGetDelta: 0005b 48 83 7d 28 00 cmp QWORD PTR T$1[rbp], 0 00060 74 4c je SHORT $LN3@NcGetDelta -; 351 : { -; 352 : if (T->Flags & CODE_FLAG_IS_LABEL) +; 353 : { +; 354 : if (T->Flags & CODE_FLAG_IS_LABEL) 00062 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] 00066 8b 40 18 mov eax, DWORD PTR [rax+24] @@ -11206,8 +11222,8 @@ $LN4@NcGetDelta: 0006c 85 c0 test eax, eax 0006e 74 2b je SHORT $LN8@NcGetDelta -; 353 : { -; 354 : if (T->Label == Link->Label) +; 355 : { +; 356 : if (T->Label == Link->Label) 00070 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] 00074 48 8b 8d 40 01 @@ -11216,28 +11232,28 @@ $LN4@NcGetDelta: 0007e 39 48 1c cmp DWORD PTR [rax+28], ecx 00081 75 16 jne SHORT $LN9@NcGetDelta -; 355 : { -; 356 : *DeltaOut = Delta; +; 357 : { +; 358 : *DeltaOut = Delta; 00083 48 8b 85 48 01 00 00 mov rax, QWORD PTR DeltaOut$[rbp] 0008a 8b 4d 04 mov ecx, DWORD PTR Delta$[rbp] 0008d 89 08 mov DWORD PTR [rax], ecx -; 357 : return TRUE; +; 359 : return TRUE; 0008f b8 01 00 00 00 mov eax, 1 00094 e9 89 00 00 00 jmp $LN1@NcGetDelta $LN9@NcGetDelta: -; 358 : } -; 359 : continue; +; 360 : } +; 361 : continue; 00099 eb b4 jmp SHORT $LN2@NcGetDelta $LN8@NcGetDelta: -; 360 : } -; 361 : Delta -= T->RawDataSize; +; 362 : } +; 363 : Delta -= T->RawDataSize; 0009b 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] 0009f 8b 40 28 mov eax, DWORD PTR [rax+40] @@ -11246,19 +11262,19 @@ $LN8@NcGetDelta: 000a7 8b c1 mov eax, ecx 000a9 89 45 04 mov DWORD PTR Delta$[rbp], eax -; 362 : } +; 364 : } 000ac eb a1 jmp SHORT $LN2@NcGetDelta $LN3@NcGetDelta: -; 363 : -; 364 : //Now check forwards -; 365 : Delta = 0; +; 365 : +; 366 : //Now check forwards +; 367 : Delta = 0; 000ae c7 45 04 00 00 00 00 mov DWORD PTR Delta$[rbp], 0 -; 366 : for (PNATIVE_CODE_LINK T = Link->Next; T; T = T->Next) +; 368 : for (PNATIVE_CODE_LINK T = Link->Next; T; T = T->Next) 000b5 48 8b 85 40 01 00 00 mov rax, QWORD PTR Link$[rbp] @@ -11273,8 +11289,8 @@ $LN7@NcGetDelta: 000d0 48 83 7d 48 00 cmp QWORD PTR T$2[rbp], 0 000d5 74 49 je SHORT $LN6@NcGetDelta -; 367 : { -; 368 : if (T->Flags & CODE_FLAG_IS_LABEL) +; 369 : { +; 370 : if (T->Flags & CODE_FLAG_IS_LABEL) 000d7 48 8b 45 48 mov rax, QWORD PTR T$2[rbp] 000db 8b 40 18 mov eax, DWORD PTR [rax+24] @@ -11282,8 +11298,8 @@ $LN7@NcGetDelta: 000e1 85 c0 test eax, eax 000e3 74 28 je SHORT $LN10@NcGetDelta -; 369 : { -; 370 : if (T->Label == Link->Label) +; 371 : { +; 372 : if (T->Label == Link->Label) 000e5 48 8b 45 48 mov rax, QWORD PTR T$2[rbp] 000e9 48 8b 8d 40 01 @@ -11292,28 +11308,28 @@ $LN7@NcGetDelta: 000f3 39 48 1c cmp DWORD PTR [rax+28], ecx 000f6 75 13 jne SHORT $LN11@NcGetDelta -; 371 : { -; 372 : *DeltaOut = Delta; +; 373 : { +; 374 : *DeltaOut = Delta; 000f8 48 8b 85 48 01 00 00 mov rax, QWORD PTR DeltaOut$[rbp] 000ff 8b 4d 04 mov ecx, DWORD PTR Delta$[rbp] 00102 89 08 mov DWORD PTR [rax], ecx -; 373 : return TRUE; +; 375 : return TRUE; 00104 b8 01 00 00 00 mov eax, 1 00109 eb 17 jmp SHORT $LN1@NcGetDelta $LN11@NcGetDelta: -; 374 : } -; 375 : continue; +; 376 : } +; 377 : continue; 0010b eb b8 jmp SHORT $LN5@NcGetDelta $LN10@NcGetDelta: -; 376 : } -; 377 : Delta += T->RawDataSize; +; 378 : } +; 379 : Delta += T->RawDataSize; 0010d 48 8b 45 48 mov rax, QWORD PTR T$2[rbp] 00111 8b 40 28 mov eax, DWORD PTR [rax+40] @@ -11322,17 +11338,17 @@ $LN10@NcGetDelta: 00119 8b c1 mov eax, ecx 0011b 89 45 04 mov DWORD PTR Delta$[rbp], eax -; 378 : } +; 380 : } 0011e eb a5 jmp SHORT $LN5@NcGetDelta $LN6@NcGetDelta: -; 379 : return FALSE; +; 381 : return FALSE; 00120 33 c0 xor eax, eax $LN1@NcGetDelta: -; 380 : } +; 382 : } 00122 48 8d a5 28 01 00 00 lea rsp, QWORD PTR [rbp+296] @@ -11348,7 +11364,7 @@ _TEXT SEGMENT Block$ = 224 ?NcDeepCopyBlock@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU1@@Z PROC ; NcDeepCopyBlock, COMDAT -; 342 : { +; 344 : { $LN3: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -11367,7 +11383,7 @@ $LN3: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 343 : return NcDeepCopyPartialBlock(Block->Start, Block->End); +; 345 : return NcDeepCopyPartialBlock(Block->Start, Block->End); 00036 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Block$[rbp] @@ -11377,7 +11393,7 @@ $LN3: 00048 48 8b 08 mov rcx, QWORD PTR [rax] 0004b e8 00 00 00 00 call ?NcDeepCopyPartialBlock@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@0@Z ; NcDeepCopyPartialBlock -; 344 : } +; 346 : } 00050 48 8d a5 c8 00 00 00 lea rsp, QWORD PTR [rbp+200] @@ -11408,7 +11424,7 @@ Start$ = 560 End$ = 568 ?NcDeepCopyPartialBlock@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@0@Z PROC ; NcDeepCopyPartialBlock, COMDAT -; 315 : { +; 317 : { $LN18: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -11433,7 +11449,7 @@ $LN18: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00047 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 316 : if (!Start || !End || !Start->Block || Start->Block != End->Block) +; 318 : if (!Start || !End || !Start->Block || Start->Block != End->Block) 0004c 48 83 bd 30 02 00 00 00 cmp QWORD PTR Start$[rbp], 0 @@ -11454,14 +11470,14 @@ $LN18: 00084 74 07 je SHORT $LN8@NcDeepCopy $LN9@NcDeepCopy: -; 317 : return NULL; +; 319 : return NULL; 00086 33 c0 xor eax, eax 00088 e9 88 01 00 00 jmp $LN1@NcDeepCopy $LN8@NcDeepCopy: -; 318 : -; 319 : PNATIVE_CODE_BLOCK Block = new NATIVE_CODE_BLOCK; +; 320 : +; 321 : PNATIVE_CODE_BLOCK Block = new NATIVE_CODE_BLOCK; 0008d b9 30 00 00 00 mov ecx, 48 ; 00000030H 00092 e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new @@ -11489,19 +11505,19 @@ $LN14@NcDeepCopy: 00 00 mov rax, QWORD PTR $T10[rbp] 000dd 48 89 45 08 mov QWORD PTR Block$[rbp], rax -; 320 : if (!Block) +; 322 : if (!Block) 000e1 48 83 7d 08 00 cmp QWORD PTR Block$[rbp], 0 000e6 75 07 jne SHORT $LN10@NcDeepCopy -; 321 : return NULL; +; 323 : return NULL; 000e8 33 c0 xor eax, eax 000ea e9 26 01 00 00 jmp $LN1@NcDeepCopy $LN10@NcDeepCopy: -; 322 : -; 323 : for (ULONG L : Start->Block->LabelIds) +; 324 : +; 325 : for (ULONG L : Start->Block->LabelIds) 000ef 48 8b 85 30 02 00 00 mov rax, QWORD PTR Start$[rbp] @@ -11528,7 +11544,7 @@ $LN4@NcDeepCopy: 0013a 89 85 84 00 00 00 mov DWORD PTR L$7[rbp], eax -; 324 : Block->LabelIds.push_back(L); +; 326 : Block->LabelIds.push_back(L); 00140 48 8b 45 08 mov rax, QWORD PTR Block$[rbp] 00144 48 83 c0 10 add rax, 16 @@ -11542,8 +11558,8 @@ $LN4@NcDeepCopy: 00162 eb ba jmp SHORT $LN2@NcDeepCopy $LN3@NcDeepCopy: -; 325 : -; 326 : for (PNATIVE_CODE_LINK CurLink = Start; CurLink != End->Next; CurLink = CurLink->Next) +; 327 : +; 328 : for (PNATIVE_CODE_LINK CurLink = Start; CurLink != End->Next; CurLink = CurLink->Next) 00164 48 8b 85 30 02 00 00 mov rax, QWORD PTR Start$[rbp] @@ -11564,8 +11580,8 @@ $LN7@NcDeepCopy: 00 00 cmp QWORD PTR CurLink$8[rbp], rax 00196 74 79 je SHORT $LN6@NcDeepCopy -; 327 : { -; 328 : PNATIVE_CODE_LINK Temp = NcDeepCopyLink(CurLink); +; 329 : { +; 330 : PNATIVE_CODE_LINK Temp = NcDeepCopyLink(CurLink); 00198 48 8b 8d a8 00 00 00 mov rcx, QWORD PTR CurLink$8[rbp] @@ -11573,19 +11589,19 @@ $LN7@NcDeepCopy: 001a4 48 89 85 c8 00 00 00 mov QWORD PTR Temp$9[rbp], rax -; 329 : if (!Temp) +; 331 : if (!Temp) 001ab 48 83 bd c8 00 00 00 00 cmp QWORD PTR Temp$9[rbp], 0 001b3 75 47 jne SHORT $LN11@NcDeepCopy -; 330 : { -; 331 : NcDeleteBlock(Block); +; 332 : { +; 333 : NcDeleteBlock(Block); 001b5 48 8b 4d 08 mov rcx, QWORD PTR Block$[rbp] 001b9 e8 00 00 00 00 call ?NcDeleteBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@@Z ; NcDeleteBlock -; 332 : delete Block; +; 334 : delete Block; 001be 48 8b 45 08 mov rax, QWORD PTR Block$[rbp] 001c2 48 89 85 e8 01 @@ -11606,32 +11622,32 @@ $LN15@NcDeepCopy: 00 mov QWORD PTR tv139[rbp], 0 $LN16@NcDeepCopy: -; 333 : return NULL; +; 335 : return NULL; 001f8 33 c0 xor eax, eax 001fa eb 19 jmp SHORT $LN1@NcDeepCopy $LN11@NcDeepCopy: -; 334 : } -; 335 : NcAppendToBlock(Block, Temp); +; 336 : } +; 337 : NcAppendToBlock(Block, Temp); 001fc 48 8b 95 c8 00 00 00 mov rdx, QWORD PTR Temp$9[rbp] 00203 48 8b 4d 08 mov rcx, QWORD PTR Block$[rbp] 00207 e8 00 00 00 00 call ?NcAppendToBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@@Z ; NcAppendToBlock -; 336 : } +; 338 : } 0020c e9 63 ff ff ff jmp $LN5@NcDeepCopy $LN6@NcDeepCopy: -; 337 : -; 338 : return Block; +; 339 : +; 340 : return Block; 00211 48 8b 45 08 mov rax, QWORD PTR Block$[rbp] $LN1@NcDeepCopy: -; 339 : } +; 341 : } 00215 48 8b f8 mov rdi, rax 00218 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] @@ -11738,7 +11754,7 @@ tv81 = 408 Link$ = 448 ?NcDeepCopyLink@@YAPEAU_NATIVE_CODE_LINK@@PEAU1@@Z PROC ; NcDeepCopyLink, COMDAT -; 295 : { +; 297 : { $LN14: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -11757,7 +11773,7 @@ $LN14: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 296 : if (Link->Flags & CODE_FLAG_IS_LABEL) +; 298 : if (Link->Flags & CODE_FLAG_IS_LABEL) 00036 48 8b 85 c0 01 00 00 mov rax, QWORD PTR Link$[rbp] @@ -11766,8 +11782,8 @@ $LN14: 00043 85 c0 test eax, eax 00045 74 67 je SHORT $LN2@NcDeepCopy -; 297 : { -; 298 : return new NATIVE_CODE_LINK(Link->Label, NULL); +; 299 : { +; 300 : return new NATIVE_CODE_LINK(Link->Label, NULL); 00047 b9 f0 00 00 00 mov ecx, 240 ; 000000f0H 0004c e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new @@ -11799,13 +11815,13 @@ $LN7@NcDeepCopy: 00 00 mov rax, QWORD PTR $T3[rbp] 000a4 e9 12 01 00 00 jmp $LN1@NcDeepCopy -; 299 : } +; 301 : } 000a9 e9 0d 01 00 00 jmp $LN1@NcDeepCopy $LN2@NcDeepCopy: -; 300 : else -; 301 : { PNATIVE_CODE_LINK NewLink = new NATIVE_CODE_LINK(Link->Flags, Link->RawData, Link->RawDataSize); +; 302 : else +; 303 : { PNATIVE_CODE_LINK NewLink = new NATIVE_CODE_LINK(Link->Flags, Link->RawData, Link->RawDataSize); 000ae b9 f0 00 00 00 mov ecx, 240 ; 000000f0H 000b3 e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new @@ -11842,7 +11858,7 @@ $LN9@NcDeepCopy: 00 00 mov rax, QWORD PTR $T5[rbp] 0011e 48 89 45 08 mov QWORD PTR NewLink$1[rbp], rax -; 302 : NewLink->Label = Link->Label; +; 304 : NewLink->Label = Link->Label; 00122 48 8b 45 08 mov rax, QWORD PTR NewLink$1[rbp] 00126 48 8b 8d c0 01 @@ -11850,7 +11866,7 @@ $LN9@NcDeepCopy: 0012d 8b 49 1c mov ecx, DWORD PTR [rcx+28] 00130 89 48 1c mov DWORD PTR [rax+28], ecx -; 303 : XED_ERROR_ENUM DecodeError = XedDecode(&NewLink->XedInstruction, Link->RawData, Link->RawDataSize); +; 305 : XED_ERROR_ENUM DecodeError = XedDecode(&NewLink->XedInstruction, Link->RawData, Link->RawDataSize); 00133 48 8b 45 08 mov rax, QWORD PTR NewLink$1[rbp] 00137 48 83 c0 30 add rax, 48 ; 00000030H @@ -11864,13 +11880,13 @@ $LN9@NcDeepCopy: 00154 e8 00 00 00 00 call xed_decode 00159 89 45 24 mov DWORD PTR DecodeError$2[rbp], eax -; 304 : if (DecodeError != XED_ERROR_NONE) +; 306 : if (DecodeError != XED_ERROR_NONE) 0015c 83 7d 24 00 cmp DWORD PTR DecodeError$2[rbp], 0 00160 74 55 je SHORT $LN4@NcDeepCopy -; 305 : { -; 306 : printf("XedDecode failed in NcDeepCopyLink: %s\n", XedErrorEnumToString(DecodeError)); +; 307 : { +; 308 : printf("XedDecode failed in NcDeepCopyLink: %s\n", XedErrorEnumToString(DecodeError)); 00162 8b 4d 24 mov ecx, DWORD PTR DecodeError$2[rbp] 00165 e8 00 00 00 00 call xed_error_enum_t2str @@ -11879,7 +11895,7 @@ $LN9@NcDeepCopy: 00 00 lea rcx, OFFSET FLAT:??_C@_0CI@IAPEEFOG@XedDecode?5failed?5in?5NcDeepCopyL@ 00174 e8 00 00 00 00 call printf -; 307 : delete NewLink; +; 309 : delete NewLink; 00179 48 8b 45 08 mov rax, QWORD PTR NewLink$1[rbp] 0017d 48 89 85 88 01 @@ -11900,20 +11916,20 @@ $LN10@NcDeepCopy: 00 mov QWORD PTR tv148[rbp], 0 $LN11@NcDeepCopy: -; 308 : return NULL; +; 310 : return NULL; 001b3 33 c0 xor eax, eax 001b5 eb 04 jmp SHORT $LN1@NcDeepCopy $LN4@NcDeepCopy: -; 309 : } -; 310 : return NewLink; +; 311 : } +; 312 : return NewLink; 001b7 48 8b 45 08 mov rax, QWORD PTR NewLink$1[rbp] $LN1@NcDeepCopy: -; 311 : } -; 312 : } +; 313 : } +; 314 : } 001bb 48 8d a5 a8 01 00 00 lea rsp, QWORD PTR [rbp+424] @@ -12053,7 +12069,7 @@ Jmp$ = 256 Delta$ = 264 ?NcValidateJmp@@YAPEAU_NATIVE_CODE_LINK@@PEAU1@H@Z PROC ; NcValidateJmp, COMDAT -; 255 : { +; 257 : { $LN23: 00000 89 54 24 10 mov DWORD PTR [rsp+16], edx @@ -12073,16 +12089,16 @@ $LN23: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00035 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 256 : PNATIVE_CODE_LINK T; -; 257 : if (Delta > 0) +; 258 : PNATIVE_CODE_LINK T; +; 259 : if (Delta > 0) 0003a 83 bd 08 01 00 00 00 cmp DWORD PTR Delta$[rbp], 0 00041 0f 8e a2 00 00 00 jle $LN10@NcValidate -; 258 : { -; 259 : T = Jmp->Next; +; 260 : { +; 261 : T = Jmp->Next; 00047 48 8b 85 00 01 00 00 mov rax, QWORD PTR Jmp$[rbp] @@ -12091,7 +12107,7 @@ $LN23: $LN21@NcValidate: $LN2@NcValidate: -; 260 : while (Delta > 0 && T) +; 262 : while (Delta > 0 && T) 00055 83 bd 08 01 00 00 00 cmp DWORD PTR Delta$[rbp], 0 @@ -12099,8 +12115,8 @@ $LN2@NcValidate: 0005e 48 83 7d 08 00 cmp QWORD PTR T$[rbp], 0 00063 74 3d je SHORT $LN3@NcValidate -; 261 : { -; 262 : if (T->Flags & CODE_FLAG_IS_LABEL) +; 263 : { +; 264 : if (T->Flags & CODE_FLAG_IS_LABEL) 00065 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 00069 8b 40 18 mov eax, DWORD PTR [rax+24] @@ -12108,12 +12124,12 @@ $LN2@NcValidate: 0006f 85 c0 test eax, eax 00071 74 02 je SHORT $LN12@NcValidate -; 263 : continue; +; 265 : continue; 00073 eb e0 jmp SHORT $LN2@NcValidate $LN12@NcValidate: -; 264 : Delta -= XedDecodedInstGetLength(&T->XedInstruction); +; 266 : Delta -= XedDecodedInstGetLength(&T->XedInstruction); 00075 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 00079 48 83 c0 30 add rax, 48 ; 00000030H @@ -12126,18 +12142,18 @@ $LN12@NcValidate: 0008f 89 85 08 01 00 00 mov DWORD PTR Delta$[rbp], eax -; 265 : T = T->Next; +; 267 : T = T->Next; 00095 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 00099 48 8b 00 mov rax, QWORD PTR [rax] 0009c 48 89 45 08 mov QWORD PTR T$[rbp], rax -; 266 : } +; 268 : } 000a0 eb b3 jmp SHORT $LN21@NcValidate $LN3@NcValidate: -; 267 : if (Delta != 0 || !T) +; 269 : if (Delta != 0 || !T) 000a2 83 bd 08 01 00 00 00 cmp DWORD PTR Delta$[rbp], 0 @@ -12146,14 +12162,14 @@ $LN3@NcValidate: 000b0 75 07 jne SHORT $LN13@NcValidate $LN14@NcValidate: -; 268 : return NULL; +; 270 : return NULL; 000b2 33 c0 xor eax, eax 000b4 e9 db 00 00 00 jmp $LN1@NcValidate $LN13@NcValidate: $LN4@NcValidate: -; 269 : while (T && (T->Flags & CODE_FLAG_IS_LABEL)) +; 271 : while (T && (T->Flags & CODE_FLAG_IS_LABEL)) 000b9 48 83 7d 08 00 cmp QWORD PTR T$[rbp], 0 000be 74 1b je SHORT $LN5@NcValidate @@ -12163,7 +12179,7 @@ $LN4@NcValidate: 000ca 85 c0 test eax, eax 000cc 74 0d je SHORT $LN5@NcValidate -; 270 : T = T->Next; +; 272 : T = T->Next; 000ce 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 000d2 48 8b 00 mov rax, QWORD PTR [rax] @@ -12171,25 +12187,25 @@ $LN4@NcValidate: 000d9 eb de jmp SHORT $LN4@NcValidate $LN5@NcValidate: -; 271 : return T; +; 273 : return T; 000db 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 000df e9 b0 00 00 00 jmp $LN1@NcValidate -; 272 : } +; 274 : } 000e4 e9 a4 00 00 00 jmp $LN11@NcValidate $LN10@NcValidate: -; 273 : else if (Delta < 0) +; 275 : else if (Delta < 0) 000e9 83 bd 08 01 00 00 00 cmp DWORD PTR Delta$[rbp], 0 000f0 0f 8d 97 00 00 00 jge $LN15@NcValidate -; 274 : { -; 275 : T = Jmp; +; 276 : { +; 277 : T = Jmp; 000f6 48 8b 85 00 01 00 00 mov rax, QWORD PTR Jmp$[rbp] @@ -12197,13 +12213,13 @@ $LN10@NcValidate: $LN22@NcValidate: $LN6@NcValidate: -; 276 : while (T) +; 278 : while (T) 00101 48 83 7d 08 00 cmp QWORD PTR T$[rbp], 0 00106 74 49 je SHORT $LN7@NcValidate -; 277 : { -; 278 : if (T->Flags & CODE_FLAG_IS_LABEL) +; 279 : { +; 280 : if (T->Flags & CODE_FLAG_IS_LABEL) 00108 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 0010c 8b 40 18 mov eax, DWORD PTR [rax+24] @@ -12211,12 +12227,12 @@ $LN6@NcValidate: 00112 85 c0 test eax, eax 00114 74 02 je SHORT $LN16@NcValidate -; 279 : continue; +; 281 : continue; 00116 eb e9 jmp SHORT $LN6@NcValidate $LN16@NcValidate: -; 280 : Delta += XedDecodedInstGetLength(&T->XedInstruction); +; 282 : Delta += XedDecodedInstGetLength(&T->XedInstruction); 00118 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 0011c 48 83 c0 30 add rax, 48 ; 00000030H @@ -12229,29 +12245,29 @@ $LN16@NcValidate: 00132 89 85 08 01 00 00 mov DWORD PTR Delta$[rbp], eax -; 281 : if (Delta >= 0) +; 283 : if (Delta >= 0) 00138 83 bd 08 01 00 00 00 cmp DWORD PTR Delta$[rbp], 0 0013f 7c 02 jl SHORT $LN17@NcValidate -; 282 : break; +; 284 : break; 00141 eb 0e jmp SHORT $LN7@NcValidate $LN17@NcValidate: -; 283 : T = T->Prev; +; 285 : T = T->Prev; 00143 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 00147 48 8b 40 08 mov rax, QWORD PTR [rax+8] 0014b 48 89 45 08 mov QWORD PTR T$[rbp], rax -; 284 : } +; 286 : } 0014f eb b0 jmp SHORT $LN22@NcValidate $LN7@NcValidate: -; 285 : if (Delta != 0 || !T) +; 287 : if (Delta != 0 || !T) 00151 83 bd 08 01 00 00 00 cmp DWORD PTR Delta$[rbp], 0 @@ -12260,14 +12276,14 @@ $LN7@NcValidate: 0015f 75 04 jne SHORT $LN18@NcValidate $LN19@NcValidate: -; 286 : return NULL; +; 288 : return NULL; 00161 33 c0 xor eax, eax 00163 eb 2f jmp SHORT $LN1@NcValidate $LN18@NcValidate: $LN8@NcValidate: -; 287 : while (T && (T->Flags & CODE_FLAG_IS_LABEL)) +; 289 : while (T && (T->Flags & CODE_FLAG_IS_LABEL)) 00165 48 83 7d 08 00 cmp QWORD PTR T$[rbp], 0 0016a 74 1b je SHORT $LN9@NcValidate @@ -12277,7 +12293,7 @@ $LN8@NcValidate: 00176 85 c0 test eax, eax 00178 74 0d je SHORT $LN9@NcValidate -; 288 : T = T->Next; +; 290 : T = T->Next; 0017a 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 0017e 48 8b 00 mov rax, QWORD PTR [rax] @@ -12285,21 +12301,21 @@ $LN8@NcValidate: 00185 eb de jmp SHORT $LN8@NcValidate $LN9@NcValidate: -; 289 : return T; +; 291 : return T; 00187 48 8b 45 08 mov rax, QWORD PTR T$[rbp] 0018b eb 07 jmp SHORT $LN1@NcValidate $LN15@NcValidate: $LN11@NcValidate: -; 290 : } -; 291 : return Jmp; +; 292 : } +; 293 : return Jmp; 0018d 48 8b 85 00 01 00 00 mov rax, QWORD PTR Jmp$[rbp] $LN1@NcValidate: -; 292 : } +; 294 : } 00194 48 8d a5 e8 00 00 00 lea rsp, QWORD PTR [rbp+232] @@ -12329,7 +12345,7 @@ __$ArrayPad$ = 544 Block$ = 592 ?NcCreateLabels@@YAHPEAU_NATIVE_CODE_BLOCK@@@Z PROC ; NcCreateLabels, COMDAT -; 203 : { +; 205 : { $LN18: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -12353,12 +12369,12 @@ $LN18: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00042 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 204 : ULONG CurrentLabelId = 0; +; 206 : ULONG CurrentLabelId = 0; 00047 c7 45 04 00 00 00 00 mov DWORD PTR CurrentLabelId$[rbp], 0 -; 205 : for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) +; 207 : for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) 0004e 48 8b 85 50 02 00 00 mov rax, QWORD PTR Block$[rbp] @@ -12374,8 +12390,8 @@ $LN4@NcCreateLa: 0006e 0f 84 07 02 00 00 je $LN3@NcCreateLa -; 206 : { -; 207 : if (!(T->Flags & CODE_FLAG_IS_INST)) +; 208 : { +; 209 : if (!(T->Flags & CODE_FLAG_IS_INST)) 00074 48 8b 45 28 mov rax, QWORD PTR T$4[rbp] 00078 8b 40 18 mov eax, DWORD PTR [rax+24] @@ -12383,13 +12399,13 @@ $LN4@NcCreateLa: 0007e 85 c0 test eax, eax 00080 75 02 jne SHORT $LN5@NcCreateLa -; 208 : continue; +; 210 : continue; 00082 eb da jmp SHORT $LN2@NcCreateLa $LN5@NcCreateLa: -; 209 : -; 210 : XED_CATEGORY_ENUM Category = XedDecodedInstGetCategory(&T->XedInstruction); +; 211 : +; 212 : XED_CATEGORY_ENUM Category = XedDecodedInstGetCategory(&T->XedInstruction); 00084 48 8b 45 28 mov rax, QWORD PTR T$4[rbp] 00088 48 83 c0 30 add rax, 48 ; 00000030H @@ -12397,20 +12413,20 @@ $LN5@NcCreateLa: 0008f e8 00 00 00 00 call xed_decoded_inst_get_category 00094 89 45 44 mov DWORD PTR Category$5[rbp], eax -; 211 : if (Category != XED_CATEGORY_COND_BR && Category != XED_CATEGORY_UNCOND_BR) +; 213 : if (Category != XED_CATEGORY_COND_BR && Category != XED_CATEGORY_UNCOND_BR) 00097 83 7d 44 1c cmp DWORD PTR Category$5[rbp], 28 0009b 74 08 je SHORT $LN6@NcCreateLa 0009d 83 7d 44 5b cmp DWORD PTR Category$5[rbp], 91 ; 0000005bH 000a1 74 02 je SHORT $LN6@NcCreateLa -; 212 : continue; +; 214 : continue; 000a3 eb b9 jmp SHORT $LN2@NcCreateLa $LN6@NcCreateLa: -; 213 : -; 214 : ULONG OperandCount = XedDecodedInstNumOperands(&T->XedInstruction); +; 215 : +; 216 : ULONG OperandCount = XedDecodedInstNumOperands(&T->XedInstruction); 000a5 48 8b 45 28 mov rax, QWORD PTR T$4[rbp] 000a9 48 83 c0 30 add rax, 48 ; 00000030H @@ -12418,18 +12434,18 @@ $LN6@NcCreateLa: 000b0 e8 00 00 00 00 call xed_decoded_inst_noperands 000b5 89 45 64 mov DWORD PTR OperandCount$6[rbp], eax -; 215 : if (OperandCount < 1) +; 217 : if (OperandCount < 1) 000b8 83 7d 64 01 cmp DWORD PTR OperandCount$6[rbp], 1 000bc 73 02 jae SHORT $LN7@NcCreateLa -; 216 : continue; +; 218 : continue; 000be eb 9e jmp SHORT $LN2@NcCreateLa $LN7@NcCreateLa: -; 217 : -; 218 : CONST XED_INST* Inst = XedDecodedInstInst(&T->XedInstruction); +; 219 : +; 220 : CONST XED_INST* Inst = XedDecodedInstInst(&T->XedInstruction); 000c0 48 8b 45 28 mov rax, QWORD PTR T$4[rbp] 000c4 48 83 c0 30 add rax, 48 ; 00000030H @@ -12438,19 +12454,19 @@ $LN7@NcCreateLa: 000d0 48 89 85 88 00 00 00 mov QWORD PTR Inst$7[rbp], rax -; 219 : if (!Inst) +; 221 : if (!Inst) 000d7 48 83 bd 88 00 00 00 00 cmp QWORD PTR Inst$7[rbp], 0 000df 75 05 jne SHORT $LN8@NcCreateLa -; 220 : continue; +; 222 : continue; 000e1 e9 78 ff ff ff jmp $LN2@NcCreateLa $LN8@NcCreateLa: -; 221 : -; 222 : CONST XED_OPERAND* Operand = XedInstOperand(Inst, 0); +; 223 : +; 224 : CONST XED_OPERAND* Operand = XedInstOperand(Inst, 0); 000e6 33 d2 xor edx, edx 000e8 48 8b 8d 88 00 @@ -12459,19 +12475,19 @@ $LN8@NcCreateLa: 000f4 48 89 85 a8 00 00 00 mov QWORD PTR Operand$8[rbp], rax -; 223 : if (!Operand) +; 225 : if (!Operand) 000fb 48 83 bd a8 00 00 00 00 cmp QWORD PTR Operand$8[rbp], 0 00103 75 05 jne SHORT $LN9@NcCreateLa -; 224 : continue; +; 226 : continue; 00105 e9 54 ff ff ff jmp $LN2@NcCreateLa $LN9@NcCreateLa: -; 225 : -; 226 : XED_OPERAND_TYPE_ENUM OperandType = XedOperandType(Operand); +; 227 : +; 228 : XED_OPERAND_TYPE_ENUM OperandType = XedOperandType(Operand); 0010a 48 8b 8d a8 00 00 00 mov rcx, QWORD PTR Operand$8[rbp] @@ -12479,7 +12495,7 @@ $LN9@NcCreateLa: 00116 89 85 c4 00 00 00 mov DWORD PTR OperandType$9[rbp], eax -; 227 : if (OperandType != XED_OPERAND_TYPE_IMM && OperandType != XED_OPERAND_TYPE_IMM_CONST) +; 229 : if (OperandType != XED_OPERAND_TYPE_IMM && OperandType != XED_OPERAND_TYPE_IMM_CONST) 0011c 83 bd c4 00 00 00 02 cmp DWORD PTR OperandType$9[rbp], 2 @@ -12488,13 +12504,13 @@ $LN9@NcCreateLa: 00 03 cmp DWORD PTR OperandType$9[rbp], 3 0012c 74 05 je SHORT $LN10@NcCreateLa -; 228 : continue; +; 230 : continue; 0012e e9 2b ff ff ff jmp $LN2@NcCreateLa $LN10@NcCreateLa: -; 229 : -; 230 : INT32 BranchDisplacement = XedDecodedInstGetBranchDisplacement(&T->XedInstruction); +; 231 : +; 232 : INT32 BranchDisplacement = XedDecodedInstGetBranchDisplacement(&T->XedInstruction); 00133 48 8b 45 28 mov rax, QWORD PTR T$4[rbp] 00137 48 83 c0 30 add rax, 48 ; 00000030H @@ -12503,7 +12519,7 @@ $LN10@NcCreateLa: 00143 89 85 e4 00 00 00 mov DWORD PTR BranchDisplacement$10[rbp], eax -; 231 : PNATIVE_CODE_LINK JmpPos = NcValidateJmp(T, BranchDisplacement); +; 233 : PNATIVE_CODE_LINK JmpPos = NcValidateJmp(T, BranchDisplacement); 00149 8b 95 e4 00 00 00 mov edx, DWORD PTR BranchDisplacement$10[rbp] @@ -12512,14 +12528,14 @@ $LN10@NcCreateLa: 00158 48 89 85 08 01 00 00 mov QWORD PTR JmpPos$11[rbp], rax -; 232 : if (!JmpPos) +; 234 : if (!JmpPos) 0015f 48 83 bd 08 01 00 00 00 cmp QWORD PTR JmpPos$11[rbp], 0 00167 75 25 jne SHORT $LN11@NcCreateLa -; 233 : { -; 234 : printf("Failed to validate jump. Type: %s, Displacement: %d\n", XedCategoryEnumToString(Category), BranchDisplacement); +; 235 : { +; 236 : printf("Failed to validate jump. Type: %s, Displacement: %d\n", XedCategoryEnumToString(Category), BranchDisplacement); 00169 8b 4d 44 mov ecx, DWORD PTR Category$5[rbp] 0016c e8 00 00 00 00 call xed_category_enum_t2str @@ -12530,15 +12546,15 @@ $LN10@NcCreateLa: 00 00 lea rcx, OFFSET FLAT:??_C@_0DF@KKBEBOEB@Failed?5to?5validate?5jump?4?5Type?3?5@ 00182 e8 00 00 00 00 call printf -; 235 : return FALSE; +; 237 : return FALSE; 00187 33 c0 xor eax, eax 00189 e9 f2 00 00 00 jmp $LN1@NcCreateLa $LN11@NcCreateLa: -; 236 : } -; 237 : -; 238 : if (JmpPos->Prev && (JmpPos->Prev->Flags & CODE_FLAG_IS_LABEL)) +; 238 : } +; 239 : +; 240 : if (JmpPos->Prev && (JmpPos->Prev->Flags & CODE_FLAG_IS_LABEL)) 0018e 48 8b 85 08 01 00 00 mov rax, QWORD PTR JmpPos$11[rbp] @@ -12552,8 +12568,8 @@ $LN11@NcCreateLa: 001ad 85 c0 test eax, eax 001af 74 1a je SHORT $LN12@NcCreateLa -; 239 : { -; 240 : T->Label = JmpPos->Prev->Label; +; 241 : { +; 242 : T->Label = JmpPos->Prev->Label; 001b1 48 8b 85 08 01 00 00 mov rax, QWORD PTR JmpPos$11[rbp] @@ -12562,14 +12578,14 @@ $LN11@NcCreateLa: 001c0 8b 40 1c mov eax, DWORD PTR [rax+28] 001c3 89 41 1c mov DWORD PTR [rcx+28], eax -; 241 : } +; 243 : } 001c6 e9 9a 00 00 00 jmp $LN13@NcCreateLa $LN12@NcCreateLa: -; 242 : else -; 243 : { -; 244 : NcInsertLinkBefore(JmpPos, new NATIVE_CODE_LINK(CurrentLabelId, Block)); +; 244 : else +; 245 : { +; 246 : NcInsertLinkBefore(JmpPos, new NATIVE_CODE_LINK(CurrentLabelId, Block)); 001cb b9 f0 00 00 00 mov ecx, 240 ; 000000f0H 001d0 e8 00 00 00 00 call ??2@YAPEAX_K@Z ; operator new @@ -12602,7 +12618,7 @@ $LN16@NcCreateLa: 00 00 mov rcx, QWORD PTR JmpPos$11[rbp] 0022c e8 00 00 00 00 call ?NcInsertLinkBefore@@YAXPEAU_NATIVE_CODE_LINK@@0@Z ; NcInsertLinkBefore -; 245 : Block->LabelIds.push_back(CurrentLabelId); +; 247 : Block->LabelIds.push_back(CurrentLabelId); 00231 48 8b 85 50 02 00 00 mov rax, QWORD PTR Block$[rbp] @@ -12614,21 +12630,21 @@ $LN16@NcCreateLa: 00 00 mov rcx, QWORD PTR tv163[rbp] 0024e e8 00 00 00 00 call ?push_back@?$vector@KV?$allocator@K@std@@@std@@QEAAXAEBK@Z ; std::vector >::push_back -; 246 : T->Label = CurrentLabelId; +; 248 : T->Label = CurrentLabelId; 00253 48 8b 45 28 mov rax, QWORD PTR T$4[rbp] 00257 8b 4d 04 mov ecx, DWORD PTR CurrentLabelId$[rbp] 0025a 89 48 1c mov DWORD PTR [rax+28], ecx -; 247 : ++CurrentLabelId; +; 249 : ++CurrentLabelId; 0025d 8b 45 04 mov eax, DWORD PTR CurrentLabelId$[rbp] 00260 ff c0 inc eax 00262 89 45 04 mov DWORD PTR CurrentLabelId$[rbp], eax $LN13@NcCreateLa: -; 248 : } -; 249 : T->Flags |= CODE_FLAG_IS_REL_JMP; +; 250 : } +; 251 : T->Flags |= CODE_FLAG_IS_REL_JMP; 00265 48 8b 45 28 mov rax, QWORD PTR T$4[rbp] 00269 8b 40 18 mov eax, DWORD PTR [rax+24] @@ -12636,17 +12652,17 @@ $LN13@NcCreateLa: 0026f 48 8b 4d 28 mov rcx, QWORD PTR T$4[rbp] 00273 89 41 18 mov DWORD PTR [rcx+24], eax -; 250 : } +; 252 : } 00276 e9 e3 fd ff ff jmp $LN2@NcCreateLa $LN3@NcCreateLa: -; 251 : return TRUE; +; 253 : return TRUE; 0027b b8 01 00 00 00 mov eax, 1 $LN1@NcCreateLa: -; 252 : } +; 254 : } 00280 48 8b f8 mov rdi, rax 00283 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] @@ -12744,7 +12760,7 @@ Block$ = 264 FixLabels$ = 272 ?NcInsertBlockBefore@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z PROC ; NcInsertBlockBefore, COMDAT -; 183 : { +; 185 : { $LN10: 00000 44 89 44 24 18 mov DWORD PTR [rsp+24], r8d @@ -12765,7 +12781,7 @@ $LN10: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 0003b e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 184 : if (!Link || !Link->Block || !Block || !Block->Start || !Block->End) +; 186 : if (!Link || !Link->Block || !Block || !Block->Start || !Block->End) 00040 48 83 bd 00 01 00 00 00 cmp QWORD PTR Link$[rbp], 0 @@ -12787,14 +12803,14 @@ $LN10: 0007b 75 07 jne SHORT $LN5@NcInsertBl $LN6@NcInsertBl: -; 185 : return FALSE; +; 187 : return FALSE; 0007d 33 c0 xor eax, eax - 0007f e9 fa 00 00 00 jmp $LN1@NcInsertBl + 0007f e9 0e 01 00 00 jmp $LN1@NcInsertBl $LN5@NcInsertBl: -; 186 : -; 187 : if (FixLabels && Block->LabelIds.size() && Link->Block->LabelIds.size()) +; 188 : +; 189 : if (FixLabels && Block->LabelIds.size() && Link->Block->LabelIds.size()) 00084 83 bd 10 01 00 00 00 cmp DWORD PTR FixLabels$[rbp], 0 @@ -12815,7 +12831,7 @@ $LN5@NcInsertBl: 000bc 48 85 c0 test rax, rax 000bf 74 17 je SHORT $LN7@NcInsertBl -; 188 : NcFixLabelsForBlocks(Link->Block, Block); +; 190 : NcFixLabelsForBlocks(Link->Block, Block); 000c1 48 8b 95 08 01 00 00 mov rdx, QWORD PTR Block$[rbp] @@ -12825,15 +12841,15 @@ $LN5@NcInsertBl: 000d3 e8 00 00 00 00 call ?NcFixLabelsForBlocks@@YAXPEAU_NATIVE_CODE_BLOCK@@0@Z ; NcFixLabelsForBlocks $LN7@NcInsertBl: -; 189 : -; 190 : if (Link->Prev) +; 191 : +; 192 : if (Link->Prev) 000d8 48 8b 85 00 01 00 00 mov rax, QWORD PTR Link$[rbp] 000df 48 83 78 08 00 cmp QWORD PTR [rax+8], 0 000e4 74 18 je SHORT $LN8@NcInsertBl -; 191 : Link->Prev->Next = Block->Start; +; 193 : Link->Prev->Next = Block->Start; 000e6 48 8b 85 00 01 00 00 mov rax, QWORD PTR Link$[rbp] @@ -12844,7 +12860,7 @@ $LN7@NcInsertBl: 000fb 48 89 08 mov QWORD PTR [rax], rcx $LN8@NcInsertBl: -; 192 : Block->Start->Prev = Link->Prev; +; 194 : Block->Start->Prev = Link->Prev; 000fe 48 8b 85 08 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -12854,7 +12870,7 @@ $LN8@NcInsertBl: 0010f 48 8b 49 08 mov rcx, QWORD PTR [rcx+8] 00113 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 193 : Block->End->Next = Link; +; 195 : Block->End->Next = Link; 00117 48 8b 85 08 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -12863,7 +12879,7 @@ $LN8@NcInsertBl: 00 00 mov rcx, QWORD PTR Link$[rbp] 00129 48 89 08 mov QWORD PTR [rax], rcx -; 194 : Link->Prev = Block->End; +; 196 : Link->Prev = Block->End; 0012c 48 8b 85 00 01 00 00 mov rax, QWORD PTR Link$[rbp] @@ -12872,8 +12888,8 @@ $LN8@NcInsertBl: 0013a 48 8b 49 08 mov rcx, QWORD PTR [rcx+8] 0013e 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 195 : -; 196 : for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) +; 197 : +; 198 : for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) 00142 48 8b 85 08 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -12886,31 +12902,37 @@ $LN2@NcInsertBl: 00159 48 89 45 08 mov QWORD PTR T$1[rbp], rax $LN4@NcInsertBl: 0015d 48 83 7d 08 00 cmp QWORD PTR T$1[rbp], 0 - 00162 74 15 je SHORT $LN3@NcInsertBl + 00162 74 29 je SHORT $LN3@NcInsertBl + 00164 48 8b 85 08 01 + 00 00 mov rax, QWORD PTR Block$[rbp] + 0016b 48 8b 40 08 mov rax, QWORD PTR [rax+8] + 0016f 48 8b 00 mov rax, QWORD PTR [rax] + 00172 48 39 45 08 cmp QWORD PTR T$1[rbp], rax + 00176 74 15 je SHORT $LN3@NcInsertBl -; 197 : T->Block = Link->Block; +; 199 : T->Block = Link->Block; - 00164 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] - 00168 48 8b 8d 00 01 + 00178 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] + 0017c 48 8b 8d 00 01 00 00 mov rcx, QWORD PTR Link$[rbp] - 0016f 48 8b 49 10 mov rcx, QWORD PTR [rcx+16] - 00173 48 89 48 10 mov QWORD PTR [rax+16], rcx - 00177 eb d9 jmp SHORT $LN2@NcInsertBl + 00183 48 8b 49 10 mov rcx, QWORD PTR [rcx+16] + 00187 48 89 48 10 mov QWORD PTR [rax+16], rcx + 0018b eb c5 jmp SHORT $LN2@NcInsertBl $LN3@NcInsertBl: -; 198 : -; 199 : return TRUE; +; 200 : +; 201 : return TRUE; - 00179 b8 01 00 00 00 mov eax, 1 + 0018d b8 01 00 00 00 mov eax, 1 $LN1@NcInsertBl: -; 200 : } +; 202 : } - 0017e 48 8d a5 e8 00 + 00192 48 8d a5 e8 00 00 00 lea rsp, QWORD PTR [rbp+232] - 00185 5f pop rdi - 00186 5d pop rbp - 00187 c3 ret 0 + 00199 5f pop rdi + 0019a 5d pop rbp + 0019b c3 ret 0 ?NcInsertBlockBefore@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z ENDP ; NcInsertBlockBefore _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI @@ -12923,7 +12945,7 @@ Block$ = 264 FixLabels$ = 272 ?NcInsertBlockAfter@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z PROC ; NcInsertBlockAfter, COMDAT -; 163 : { +; 165 : { $LN10: 00000 44 89 44 24 18 mov DWORD PTR [rsp+24], r8d @@ -12944,7 +12966,7 @@ $LN10: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 0003b e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 164 : if (!Link || !Link->Block || !Block || !Block->Start || !Block->End || Link->Block == Block) +; 166 : if (!Link || !Link->Block || !Block || !Block->Start || !Block->End || Link->Block == Block) 00040 48 83 bd 00 01 00 00 00 cmp QWORD PTR Link$[rbp], 0 @@ -12972,14 +12994,14 @@ $LN10: 0008f 75 07 jne SHORT $LN5@NcInsertBl $LN6@NcInsertBl: -; 165 : return FALSE; +; 167 : return FALSE; 00091 33 c0 xor eax, eax - 00093 e9 f7 00 00 00 jmp $LN1@NcInsertBl + 00093 e9 0b 01 00 00 jmp $LN1@NcInsertBl $LN5@NcInsertBl: -; 166 : -; 167 : if (FixLabels && Block->LabelIds.size() && Link->Block->LabelIds.size()) +; 168 : +; 169 : if (FixLabels && Block->LabelIds.size() && Link->Block->LabelIds.size()) 00098 83 bd 10 01 00 00 00 cmp DWORD PTR FixLabels$[rbp], 0 @@ -13000,7 +13022,7 @@ $LN5@NcInsertBl: 000d0 48 85 c0 test rax, rax 000d3 74 17 je SHORT $LN7@NcInsertBl -; 168 : NcFixLabelsForBlocks(Link->Block, Block); +; 170 : NcFixLabelsForBlocks(Link->Block, Block); 000d5 48 8b 95 08 01 00 00 mov rdx, QWORD PTR Block$[rbp] @@ -13010,15 +13032,15 @@ $LN5@NcInsertBl: 000e7 e8 00 00 00 00 call ?NcFixLabelsForBlocks@@YAXPEAU_NATIVE_CODE_BLOCK@@0@Z ; NcFixLabelsForBlocks $LN7@NcInsertBl: -; 169 : -; 170 : if (Link->Next) +; 171 : +; 172 : if (Link->Next) 000ec 48 8b 85 00 01 00 00 mov rax, QWORD PTR Link$[rbp] 000f3 48 83 38 00 cmp QWORD PTR [rax], 0 000f7 74 19 je SHORT $LN8@NcInsertBl -; 171 : Link->Next->Prev = Block->End; +; 173 : Link->Next->Prev = Block->End; 000f9 48 8b 85 00 01 00 00 mov rax, QWORD PTR Link$[rbp] @@ -13029,7 +13051,7 @@ $LN7@NcInsertBl: 0010e 48 89 48 08 mov QWORD PTR [rax+8], rcx $LN8@NcInsertBl: -; 172 : Block->End->Next = Link->Next; +; 174 : Block->End->Next = Link->Next; 00112 48 8b 85 08 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -13039,7 +13061,7 @@ $LN8@NcInsertBl: 00124 48 8b 09 mov rcx, QWORD PTR [rcx] 00127 48 89 08 mov QWORD PTR [rax], rcx -; 173 : Block->Start->Prev = Link; +; 175 : Block->Start->Prev = Link; 0012a 48 8b 85 08 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -13048,7 +13070,7 @@ $LN8@NcInsertBl: 00 00 mov rcx, QWORD PTR Link$[rbp] 0013b 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 174 : Link->Next = Block->Start; +; 176 : Link->Next = Block->Start; 0013f 48 8b 85 00 01 00 00 mov rax, QWORD PTR Link$[rbp] @@ -13057,8 +13079,8 @@ $LN8@NcInsertBl: 0014d 48 8b 09 mov rcx, QWORD PTR [rcx] 00150 48 89 08 mov QWORD PTR [rax], rcx -; 175 : -; 176 : for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) +; 177 : +; 178 : for (PNATIVE_CODE_LINK T = Block->Start; T && T != Block->End->Next; T = T->Next) 00153 48 8b 85 08 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -13071,31 +13093,37 @@ $LN2@NcInsertBl: 0016a 48 89 45 08 mov QWORD PTR T$1[rbp], rax $LN4@NcInsertBl: 0016e 48 83 7d 08 00 cmp QWORD PTR T$1[rbp], 0 - 00173 74 15 je SHORT $LN3@NcInsertBl + 00173 74 29 je SHORT $LN3@NcInsertBl + 00175 48 8b 85 08 01 + 00 00 mov rax, QWORD PTR Block$[rbp] + 0017c 48 8b 40 08 mov rax, QWORD PTR [rax+8] + 00180 48 8b 00 mov rax, QWORD PTR [rax] + 00183 48 39 45 08 cmp QWORD PTR T$1[rbp], rax + 00187 74 15 je SHORT $LN3@NcInsertBl -; 177 : T->Block = Link->Block; +; 179 : T->Block = Link->Block; - 00175 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] - 00179 48 8b 8d 00 01 + 00189 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] + 0018d 48 8b 8d 00 01 00 00 mov rcx, QWORD PTR Link$[rbp] - 00180 48 8b 49 10 mov rcx, QWORD PTR [rcx+16] - 00184 48 89 48 10 mov QWORD PTR [rax+16], rcx - 00188 eb d9 jmp SHORT $LN2@NcInsertBl + 00194 48 8b 49 10 mov rcx, QWORD PTR [rcx+16] + 00198 48 89 48 10 mov QWORD PTR [rax+16], rcx + 0019c eb c5 jmp SHORT $LN2@NcInsertBl $LN3@NcInsertBl: -; 178 : -; 179 : return TRUE; +; 180 : +; 181 : return TRUE; - 0018a b8 01 00 00 00 mov eax, 1 + 0019e b8 01 00 00 00 mov eax, 1 $LN1@NcInsertBl: -; 180 : } +; 182 : } - 0018f 48 8d a5 e8 00 + 001a3 48 8d a5 e8 00 00 00 lea rsp, QWORD PTR [rbp+232] - 00196 5f pop rdi - 00197 5d pop rbp - 00198 c3 ret 0 + 001aa 5f pop rdi + 001ab 5d pop rbp + 001ac c3 ret 0 ?NcInsertBlockAfter@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z ENDP ; NcInsertBlockAfter _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI @@ -13132,7 +13160,7 @@ Block1$ = 720 Block2$ = 728 ?NcFixLabelsForBlocks@@YAXPEAU_NATIVE_CODE_BLOCK@@0@Z PROC ; NcFixLabelsForBlocks, COMDAT -; 150 : { +; 152 : { $LN17: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -13159,7 +13187,7 @@ $LN17: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00051 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 151 : for (PNATIVE_CODE_LINK T = Block2->Start; T; T = T->Next) +; 153 : for (PNATIVE_CODE_LINK T = Block2->Start; T; T = T->Next) 00056 48 8b 85 d8 02 00 00 mov rax, QWORD PTR Block2$[rbp] @@ -13175,8 +13203,8 @@ $LN4@NcFixLabel: 00076 0f 84 26 02 00 00 je $LN3@NcFixLabel -; 152 : { -; 153 : if ((T->Flags & CODE_FLAG_IS_LABEL) && StdFind(Block1->LabelIds.begin(), Block1->LabelIds.end(), T->Label) != Block1->LabelIds.end()) +; 154 : { +; 155 : if ((T->Flags & CODE_FLAG_IS_LABEL) && StdFind(Block1->LabelIds.begin(), Block1->LabelIds.end(), T->Label) != Block1->LabelIds.end()) 0007c 48 8b 45 08 mov rax, QWORD PTR T$4[rbp] 00080 8b 40 18 mov eax, DWORD PTR [rax+24] @@ -13321,15 +13349,15 @@ $LN16@NcFixLabel: 00251 85 c0 test eax, eax 00253 74 48 je SHORT $LN5@NcFixLabel -; 154 : { -; 155 : ULONG Lid = NcGenUnusedLabelId(Block1); +; 156 : { +; 157 : ULONG Lid = NcGenUnusedLabelId(Block1); 00255 48 8b 8d d0 02 00 00 mov rcx, QWORD PTR Block1$[rbp] 0025c e8 00 00 00 00 call ?NcGenUnusedLabelId@@YAKPEAU_NATIVE_CODE_BLOCK@@@Z ; NcGenUnusedLabelId 00261 89 45 24 mov DWORD PTR Lid$5[rbp], eax -; 156 : NcChangeLabelId(Block2, T->Label, Lid); +; 158 : NcChangeLabelId(Block2, T->Label, Lid); 00264 44 8b 45 24 mov r8d, DWORD PTR Lid$5[rbp] 00268 48 8b 45 08 mov rax, QWORD PTR T$4[rbp] @@ -13338,7 +13366,7 @@ $LN16@NcFixLabel: 00 00 mov rcx, QWORD PTR Block2$[rbp] 00276 e8 00 00 00 00 call ?NcChangeLabelId@@YAXPEAU_NATIVE_CODE_BLOCK@@KK@Z ; NcChangeLabelId -; 157 : Block1->LabelIds.push_back(Lid); +; 159 : Block1->LabelIds.push_back(Lid); 0027b 48 8b 85 d0 02 00 00 mov rax, QWORD PTR Block1$[rbp] @@ -13351,13 +13379,13 @@ $LN16@NcFixLabel: 00298 e8 00 00 00 00 call ?push_back@?$vector@KV?$allocator@K@std@@@std@@QEAAXAEBK@Z ; std::vector >::push_back $LN5@NcFixLabel: -; 158 : } -; 159 : } +; 160 : } +; 161 : } 0029d e9 c4 fd ff ff jmp $LN2@NcFixLabel $LN3@NcFixLabel: -; 160 : } +; 162 : } 002a2 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] 002a6 48 8d 15 00 00 @@ -13621,7 +13649,7 @@ __$ArrayPad$ = 608 Block$ = 656 ?NcGenUnusedLabelId@@YAKPEAU_NATIVE_CODE_BLOCK@@@Z PROC ; NcGenUnusedLabelId, COMDAT -; 133 : { +; 135 : { $LN9: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -13645,14 +13673,14 @@ $LN9: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00042 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 134 : ULONG ReturnLabelId = rand(); +; 136 : ULONG ReturnLabelId = rand(); 00047 ff 15 00 00 00 00 call QWORD PTR __imp_rand 0004d 89 45 04 mov DWORD PTR ReturnLabelId$[rbp], eax $LN2@NcGenUnuse: -; 135 : while (StdFind(Block->LabelIds.begin(), Block->LabelIds.end(), ReturnLabelId) != Block->LabelIds.end()) +; 137 : while (StdFind(Block->LabelIds.begin(), Block->LabelIds.end(), ReturnLabelId) != Block->LabelIds.end()) 00050 48 8d 85 08 01 00 00 lea rax, QWORD PTR $T5[rbp] @@ -13751,7 +13779,7 @@ $LN2@NcGenUnuse: 001a2 85 c0 test eax, eax 001a4 74 0e je SHORT $LN3@NcGenUnuse -; 136 : ReturnLabelId = rand(); +; 138 : ReturnLabelId = rand(); 001a6 ff 15 00 00 00 00 call QWORD PTR __imp_rand @@ -13759,11 +13787,11 @@ $LN2@NcGenUnuse: 001af e9 9c fe ff ff jmp $LN2@NcGenUnuse $LN3@NcGenUnuse: -; 137 : return ReturnLabelId; +; 139 : return ReturnLabelId; 001b4 8b 45 04 mov eax, DWORD PTR ReturnLabelId$[rbp] -; 138 : } +; 140 : } 001b7 8b f8 mov edi, eax 001b9 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] @@ -13958,7 +13986,7 @@ Original$ = 264 New$ = 272 ?NcChangeLabelId@@YAXPEAU_NATIVE_CODE_BLOCK@@KK@Z PROC ; NcChangeLabelId, COMDAT -; 141 : { +; 143 : { $LN8: 00000 44 89 44 24 18 mov DWORD PTR [rsp+24], r8d @@ -13979,7 +14007,7 @@ $LN8: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 0003a e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 142 : for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) +; 144 : for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) 0003f 48 8b 85 00 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -13994,8 +14022,8 @@ $LN4@NcChangeLa: 0005a 48 83 7d 08 00 cmp QWORD PTR T$1[rbp], 0 0005f 74 3a je SHORT $LN3@NcChangeLa -; 143 : { -; 144 : if (((T->Flags & CODE_FLAG_IS_LABEL) || (T->Flags & CODE_FLAG_IS_REL_JMP)) && T->Label == Original) +; 145 : { +; 146 : if (((T->Flags & CODE_FLAG_IS_LABEL) || (T->Flags & CODE_FLAG_IS_REL_JMP)) && T->Label == Original) 00061 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] 00065 8b 40 18 mov eax, DWORD PTR [rax+24] @@ -14014,7 +14042,7 @@ $LN6@NcChangeLa: 00087 39 48 1c cmp DWORD PTR [rax+28], ecx 0008a 75 0d jne SHORT $LN5@NcChangeLa -; 145 : T->Label = New; +; 147 : T->Label = New; 0008c 48 8b 45 08 mov rax, QWORD PTR T$1[rbp] 00090 8b 8d 10 01 00 @@ -14022,12 +14050,12 @@ $LN6@NcChangeLa: 00096 89 48 1c mov DWORD PTR [rax+28], ecx $LN5@NcChangeLa: -; 146 : } +; 148 : } 00099 eb b4 jmp SHORT $LN2@NcChangeLa $LN3@NcChangeLa: -; 147 : } +; 149 : } 0009b 48 8d a5 e8 00 00 00 lea rsp, QWORD PTR [rbp+232] @@ -14045,7 +14073,7 @@ T$1 = 40 Block$ = 288 ?NcCalcBlockSize@@YAKPEAU_NATIVE_CODE_BLOCK@@@Z PROC ; NcCalcBlockSize, COMDAT -; 121 : { +; 123 : { $LN7: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -14064,12 +14092,12 @@ $LN7: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 122 : ULONG TotalSize = 0; +; 124 : ULONG TotalSize = 0; 00036 c7 45 04 00 00 00 00 mov DWORD PTR TotalSize$[rbp], 0 -; 123 : for (PNATIVE_CODE_LINK T = Block->Start; T; T = T->Next) +; 125 : for (PNATIVE_CODE_LINK T = Block->Start; T != Block->End->Next; T = T->Next) 0003d 48 8b 85 20 01 00 00 mov rax, QWORD PTR Block$[rbp] @@ -14081,48 +14109,52 @@ $LN2@NcCalcBloc: 00051 48 8b 00 mov rax, QWORD PTR [rax] 00054 48 89 45 28 mov QWORD PTR T$1[rbp], rax $LN4@NcCalcBloc: - 00058 48 83 7d 28 00 cmp QWORD PTR T$1[rbp], 0 - 0005d 74 23 je SHORT $LN3@NcCalcBloc + 00058 48 8b 85 20 01 + 00 00 mov rax, QWORD PTR Block$[rbp] + 0005f 48 8b 40 08 mov rax, QWORD PTR [rax+8] + 00063 48 8b 00 mov rax, QWORD PTR [rax] + 00066 48 39 45 28 cmp QWORD PTR T$1[rbp], rax + 0006a 74 23 je SHORT $LN3@NcCalcBloc -; 124 : { -; 125 : if (T->Flags & CODE_FLAG_IS_LABEL) +; 126 : { +; 127 : if (T->Flags & CODE_FLAG_IS_LABEL) - 0005f 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] - 00063 8b 40 18 mov eax, DWORD PTR [rax+24] - 00066 83 e0 01 and eax, 1 - 00069 85 c0 test eax, eax - 0006b 74 02 je SHORT $LN5@NcCalcBloc + 0006c 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] + 00070 8b 40 18 mov eax, DWORD PTR [rax+24] + 00073 83 e0 01 and eax, 1 + 00076 85 c0 test eax, eax + 00078 74 02 je SHORT $LN5@NcCalcBloc -; 126 : continue; +; 128 : continue; - 0006d eb de jmp SHORT $LN2@NcCalcBloc + 0007a eb d1 jmp SHORT $LN2@NcCalcBloc $LN5@NcCalcBloc: -; 127 : TotalSize += T->RawDataSize; +; 129 : TotalSize += T->RawDataSize; - 0006f 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] - 00073 8b 40 28 mov eax, DWORD PTR [rax+40] - 00076 8b 4d 04 mov ecx, DWORD PTR TotalSize$[rbp] - 00079 03 c8 add ecx, eax - 0007b 8b c1 mov eax, ecx - 0007d 89 45 04 mov DWORD PTR TotalSize$[rbp], eax + 0007c 48 8b 45 28 mov rax, QWORD PTR T$1[rbp] + 00080 8b 40 28 mov eax, DWORD PTR [rax+40] + 00083 8b 4d 04 mov ecx, DWORD PTR TotalSize$[rbp] + 00086 03 c8 add ecx, eax + 00088 8b c1 mov eax, ecx + 0008a 89 45 04 mov DWORD PTR TotalSize$[rbp], eax -; 128 : } +; 130 : } - 00080 eb cb jmp SHORT $LN2@NcCalcBloc + 0008d eb be jmp SHORT $LN2@NcCalcBloc $LN3@NcCalcBloc: -; 129 : return TotalSize; +; 131 : return TotalSize; - 00082 8b 45 04 mov eax, DWORD PTR TotalSize$[rbp] + 0008f 8b 45 04 mov eax, DWORD PTR TotalSize$[rbp] -; 130 : } +; 132 : } - 00085 48 8d a5 08 01 + 00092 48 8d a5 08 01 00 00 lea rsp, QWORD PTR [rbp+264] - 0008c 5f pop rdi - 0008d 5d pop rbp - 0008e c3 ret 0 + 00099 5f pop rdi + 0009a 5d pop rbp + 0009b c3 ret 0 ?NcCalcBlockSize@@YAKPEAU_NATIVE_CODE_BLOCK@@@Z ENDP ; NcCalcBlockSize _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI @@ -14132,7 +14164,7 @@ _TEXT SEGMENT Link$ = 224 ?NcUnlink@@YAXPEAU_NATIVE_CODE_LINK@@@Z PROC ; NcUnlink, COMDAT -; 110 : { +; 112 : { $LN6: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -14151,21 +14183,21 @@ $LN6: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 111 : if (Link) +; 113 : if (Link) 00036 48 83 bd e0 00 00 00 00 cmp QWORD PTR Link$[rbp], 0 0003e 74 4c je SHORT $LN2@NcUnlink -; 112 : { -; 113 : if (Link->Next) +; 114 : { +; 115 : if (Link->Next) 00040 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Link$[rbp] 00047 48 83 38 00 cmp QWORD PTR [rax], 0 0004b 74 19 je SHORT $LN3@NcUnlink -; 114 : Link->Next->Prev = Link->Prev; +; 116 : Link->Next->Prev = Link->Prev; 0004d 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Link$[rbp] @@ -14176,14 +14208,14 @@ $LN6: 00062 48 89 48 08 mov QWORD PTR [rax+8], rcx $LN3@NcUnlink: -; 115 : if (Link->Prev) +; 117 : if (Link->Prev) 00066 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Link$[rbp] 0006d 48 83 78 08 00 cmp QWORD PTR [rax+8], 0 00072 74 18 je SHORT $LN4@NcUnlink -; 116 : Link->Prev->Next = Link->Next; +; 118 : Link->Prev->Next = Link->Next; 00074 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Link$[rbp] @@ -14195,8 +14227,8 @@ $LN3@NcUnlink: $LN4@NcUnlink: $LN2@NcUnlink: -; 117 : } -; 118 : } +; 119 : } +; 120 : } 0008c 48 8d a5 c8 00 00 00 lea rsp, QWORD PTR [rbp+200] @@ -14213,7 +14245,7 @@ Link1$ = 224 Link2$ = 232 ?NcInsertLinkBefore@@YAXPEAU_NATIVE_CODE_LINK@@0@Z PROC ; NcInsertLinkBefore, COMDAT -; 98 : { +; 100 : { $LN5: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -14233,14 +14265,14 @@ $LN5: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 99 : if (Link1) +; 101 : if (Link1) 0003b 48 83 bd e0 00 00 00 00 cmp QWORD PTR Link1$[rbp], 0 00043 74 5c je SHORT $LN2@NcInsertLi -; 100 : { -; 101 : Link2->Next = Link1; +; 102 : { +; 103 : Link2->Next = Link1; 00045 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link2$[rbp] @@ -14248,7 +14280,7 @@ $LN5: 00 00 mov rcx, QWORD PTR Link1$[rbp] 00053 48 89 08 mov QWORD PTR [rax], rcx -; 102 : Link2->Prev = Link1->Prev; +; 104 : Link2->Prev = Link1->Prev; 00056 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link2$[rbp] @@ -14257,7 +14289,7 @@ $LN5: 00064 48 8b 49 08 mov rcx, QWORD PTR [rcx+8] 00068 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 103 : Link1->Prev = Link2; +; 105 : Link1->Prev = Link2; 0006c 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Link1$[rbp] @@ -14265,14 +14297,14 @@ $LN5: 00 00 mov rcx, QWORD PTR Link2$[rbp] 0007a 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 104 : if (Link2->Prev) +; 106 : if (Link2->Prev) 0007e 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link2$[rbp] 00085 48 83 78 08 00 cmp QWORD PTR [rax+8], 0 0008a 74 15 je SHORT $LN3@NcInsertLi -; 105 : Link2->Prev->Next = Link2; +; 107 : Link2->Prev->Next = Link2; 0008c 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link2$[rbp] @@ -14283,8 +14315,8 @@ $LN5: $LN3@NcInsertLi: $LN2@NcInsertLi: -; 106 : } -; 107 : } +; 108 : } +; 109 : } 000a1 48 8d a5 c8 00 00 00 lea rsp, QWORD PTR [rbp+200] @@ -14301,7 +14333,7 @@ Link1$ = 224 Link2$ = 232 ?NcInsertLinkAfter@@YAXPEAU_NATIVE_CODE_LINK@@0@Z PROC ; NcInsertLinkAfter, COMDAT -; 86 : { +; 88 : { $LN5: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -14321,14 +14353,14 @@ $LN5: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 87 : if (Link1) +; 89 : if (Link1) 0003b 48 83 bd e0 00 00 00 00 cmp QWORD PTR Link1$[rbp], 0 00043 74 59 je SHORT $LN2@NcInsertLi -; 88 : { -; 89 : Link2->Prev = Link1; +; 90 : { +; 91 : Link2->Prev = Link1; 00045 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link2$[rbp] @@ -14336,7 +14368,7 @@ $LN5: 00 00 mov rcx, QWORD PTR Link1$[rbp] 00053 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 90 : Link2->Next = Link1->Next; +; 92 : Link2->Next = Link1->Next; 00057 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link2$[rbp] @@ -14345,7 +14377,7 @@ $LN5: 00065 48 8b 09 mov rcx, QWORD PTR [rcx] 00068 48 89 08 mov QWORD PTR [rax], rcx -; 91 : Link1->Next = Link2; +; 93 : Link1->Next = Link2; 0006b 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Link1$[rbp] @@ -14353,14 +14385,14 @@ $LN5: 00 00 mov rcx, QWORD PTR Link2$[rbp] 00079 48 89 08 mov QWORD PTR [rax], rcx -; 92 : if (Link2->Next) +; 94 : if (Link2->Next) 0007c 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link2$[rbp] 00083 48 83 38 00 cmp QWORD PTR [rax], 0 00087 74 15 je SHORT $LN3@NcInsertLi -; 93 : Link2->Next->Prev = Link2; +; 95 : Link2->Next->Prev = Link2; 00089 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link2$[rbp] @@ -14371,8 +14403,8 @@ $LN5: $LN3@NcInsertLi: $LN2@NcInsertLi: -; 94 : } -; 95 : } +; 96 : } +; 97 : } 0009e 48 8d a5 c8 00 00 00 lea rsp, QWORD PTR [rbp+200] @@ -14389,7 +14421,7 @@ Block$ = 224 Link$ = 232 ?NcPrependToBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@@Z PROC ; NcPrependToBlock, COMDAT -; 66 : { +; 68 : { $LN7: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -14409,19 +14441,19 @@ $LN7: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 67 : if (!Link) +; 69 : if (!Link) 0003b 48 83 bd e8 00 00 00 00 cmp QWORD PTR Link$[rbp], 0 00043 75 05 jne SHORT $LN2@NcPrependT -; 68 : return; +; 70 : return; 00045 e9 9b 00 00 00 jmp $LN1@NcPrependT $LN2@NcPrependT: -; 69 : -; 70 : Link->Block = Block; +; 71 : +; 72 : Link->Block = Block; 0004a 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link$[rbp] @@ -14429,7 +14461,7 @@ $LN2@NcPrependT: 00 00 mov rcx, QWORD PTR Block$[rbp] 00058 48 89 48 10 mov QWORD PTR [rax+16], rcx -; 71 : Link->Next = Block->Start; +; 73 : Link->Next = Block->Start; 0005c 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link$[rbp] @@ -14438,15 +14470,15 @@ $LN2@NcPrependT: 0006a 48 8b 09 mov rcx, QWORD PTR [rcx] 0006d 48 89 08 mov QWORD PTR [rax], rcx -; 72 : Link->Prev = NULL; +; 74 : Link->Prev = NULL; 00070 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link$[rbp] 00077 48 c7 40 08 00 00 00 00 mov QWORD PTR [rax+8], 0 -; 73 : -; 74 : if (!Block->End || !Block->Start) +; 75 : +; 76 : if (!Block->End || !Block->Start) 0007f 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Block$[rbp] @@ -14458,8 +14490,8 @@ $LN2@NcPrependT: 00098 75 25 jne SHORT $LN3@NcPrependT $LN5@NcPrependT: -; 75 : { -; 76 : Block->Start = Block->End = Link; +; 77 : { +; 78 : Block->Start = Block->End = Link; 0009a 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Block$[rbp] @@ -14472,14 +14504,14 @@ $LN5@NcPrependT: 00 00 mov rcx, QWORD PTR Link$[rbp] 000ba 48 89 08 mov QWORD PTR [rax], rcx -; 77 : } +; 79 : } 000bd eb 26 jmp SHORT $LN4@NcPrependT $LN3@NcPrependT: -; 78 : else -; 79 : { -; 80 : Block->Start->Prev = Link; +; 80 : else +; 81 : { +; 82 : Block->Start->Prev = Link; 000bf 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Block$[rbp] @@ -14488,7 +14520,7 @@ $LN3@NcPrependT: 00 00 mov rcx, QWORD PTR Link$[rbp] 000d0 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 81 : Block->Start = Link; +; 83 : Block->Start = Link; 000d4 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Block$[rbp] @@ -14498,8 +14530,8 @@ $LN3@NcPrependT: $LN4@NcPrependT: $LN1@NcPrependT: -; 82 : } -; 83 : } +; 84 : } +; 85 : } 000e5 48 8d a5 c8 00 00 00 lea rsp, QWORD PTR [rbp+200] @@ -14516,7 +14548,7 @@ Block$ = 224 Link$ = 232 ?NcAppendToBlock@@YAXPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@@Z PROC ; NcAppendToBlock, COMDAT -; 46 : { +; 48 : { $LN7: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx @@ -14536,19 +14568,19 @@ $LN7: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00036 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 47 : if (!Link) +; 49 : if (!Link) 0003b 48 83 bd e8 00 00 00 00 cmp QWORD PTR Link$[rbp], 0 00043 75 05 jne SHORT $LN2@NcAppendTo -; 48 : return; +; 50 : return; 00045 e9 9d 00 00 00 jmp $LN1@NcAppendTo $LN2@NcAppendTo: -; 49 : -; 50 : Link->Block = Block; +; 51 : +; 52 : Link->Block = Block; 0004a 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link$[rbp] @@ -14556,7 +14588,7 @@ $LN2@NcAppendTo: 00 00 mov rcx, QWORD PTR Block$[rbp] 00058 48 89 48 10 mov QWORD PTR [rax+16], rcx -; 51 : Link->Prev = Block->End; +; 53 : Link->Prev = Block->End; 0005c 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link$[rbp] @@ -14565,15 +14597,15 @@ $LN2@NcAppendTo: 0006a 48 8b 49 08 mov rcx, QWORD PTR [rcx+8] 0006e 48 89 48 08 mov QWORD PTR [rax+8], rcx -; 52 : Link->Next = NULL; +; 54 : Link->Next = NULL; 00072 48 8b 85 e8 00 00 00 mov rax, QWORD PTR Link$[rbp] 00079 48 c7 00 00 00 00 00 mov QWORD PTR [rax], 0 -; 53 : -; 54 : if (!Block->End || !Block->Start) +; 55 : +; 56 : if (!Block->End || !Block->Start) 00080 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Block$[rbp] @@ -14585,8 +14617,8 @@ $LN2@NcAppendTo: 00099 75 25 jne SHORT $LN3@NcAppendTo $LN5@NcAppendTo: -; 55 : { -; 56 : Block->Start = Block->End = Link; +; 57 : { +; 58 : Block->Start = Block->End = Link; 0009b 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Block$[rbp] @@ -14599,14 +14631,14 @@ $LN5@NcAppendTo: 00 00 mov rcx, QWORD PTR Link$[rbp] 000bb 48 89 08 mov QWORD PTR [rax], rcx -; 57 : } +; 59 : } 000be eb 27 jmp SHORT $LN4@NcAppendTo $LN3@NcAppendTo: -; 58 : else -; 59 : { -; 60 : Block->End->Next = Link; +; 60 : else +; 61 : { +; 62 : Block->End->Next = Link; 000c0 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Block$[rbp] @@ -14615,7 +14647,7 @@ $LN3@NcAppendTo: 00 00 mov rcx, QWORD PTR Link$[rbp] 000d2 48 89 08 mov QWORD PTR [rax], rcx -; 61 : Block->End = Link; +; 63 : Block->End = Link; 000d5 48 8b 85 e0 00 00 00 mov rax, QWORD PTR Block$[rbp] @@ -14625,8 +14657,8 @@ $LN3@NcAppendTo: $LN4@NcAppendTo: $LN1@NcAppendTo: -; 62 : } -; 63 : } +; 64 : } +; 65 : } 000e7 48 8d a5 c8 00 00 00 lea rsp, QWORD PTR [rbp+200] @@ -14714,7 +14746,7 @@ _TEXT SEGMENT this$ = 224 ??0_NATIVE_CODE_BLOCK@@QEAA@XZ PROC ; _NATIVE_CODE_BLOCK::_NATIVE_CODE_BLOCK, COMDAT -; 40 : { +; 42 : { $LN4: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -14738,7 +14770,7 @@ $LN4: 00041 48 8b c8 mov rcx, rax 00044 e8 00 00 00 00 call ??0?$vector@KV?$allocator@K@std@@@std@@QEAA@XZ ; std::vector >::vector > -; 41 : Start = End = NULL; +; 43 : Start = End = NULL; 00049 48 8b 85 e0 00 00 00 mov rax, QWORD PTR this$[rbp] @@ -14749,7 +14781,7 @@ $LN4: 0005f 48 c7 00 00 00 00 00 mov QWORD PTR [rax], 0 -; 42 : LabelIds.clear(); +; 44 : LabelIds.clear(); 00066 48 8b 85 e0 00 00 00 mov rax, QWORD PTR this$[rbp] @@ -14757,7 +14789,7 @@ $LN4: 00071 48 8b c8 mov rcx, rax 00074 e8 00 00 00 00 call ?clear@?$vector@KV?$allocator@K@std@@@std@@QEAAXXZ ; std::vector >::clear -; 43 : } +; 45 : } 00079 48 8b 85 e0 00 00 00 mov rax, QWORD PTR this$[rbp] @@ -16660,7 +16692,7 @@ $T1 = 200 this$ = 256 ??1_NATIVE_CODE_LINK@@QEAA@XZ PROC ; _NATIVE_CODE_LINK::~_NATIVE_CODE_LINK, COMDAT -; 34 : { +; 36 : { $LN4: 00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx @@ -16679,14 +16711,14 @@ $LN4: 00 00 lea rcx, OFFSET FLAT:__84EFCFFB_NativeCode@cpp 00031 e8 00 00 00 00 call __CheckForDebuggerJustMyCode -; 35 : if (RawData) +; 37 : if (RawData) 00036 48 8b 85 00 01 00 00 mov rax, QWORD PTR this$[rbp] 0003d 48 83 78 20 00 cmp QWORD PTR [rax+32], 0 00042 74 24 je SHORT $LN2@NATIVE_COD -; 36 : delete RawData; +; 38 : delete RawData; 00044 48 8b 85 00 01 00 00 mov rax, QWORD PTR this$[rbp] @@ -16700,7 +16732,7 @@ $LN4: 00067 90 npad 1 $LN2@NATIVE_COD: -; 37 : } +; 39 : } 00068 48 8d a5 e8 00 00 00 lea rsp, QWORD PTR [rbp+232] @@ -16783,7 +16815,7 @@ $LN5: 00097 48 83 bd 10 01 00 00 00 cmp QWORD PTR Rd$[rbp], 0 - 0009f 74 21 je SHORT $LN2@NATIVE_COD + 0009f 74 20 je SHORT $LN2@NATIVE_COD ; 30 : RtlCopyMemory(RawData, Rd, Rds); @@ -16796,18 +16828,33 @@ $LN5: 00 00 mov rax, QWORD PTR this$[rbp] 000b8 48 8b 48 20 mov rcx, QWORD PTR [rax+32] 000bc e8 00 00 00 00 call memcpy - 000c1 90 npad 1 $LN2@NATIVE_COD: -; 31 : } +; 31 : +; 32 : XedDecode(&XedInstruction, RawData, RawDataSize); + + 000c1 48 8b 85 00 01 + 00 00 mov rax, QWORD PTR this$[rbp] + 000c8 48 83 c0 30 add rax, 48 ; 00000030H + 000cc 48 8b 8d 00 01 + 00 00 mov rcx, QWORD PTR this$[rbp] + 000d3 44 8b 41 28 mov r8d, DWORD PTR [rcx+40] + 000d7 48 8b 8d 00 01 + 00 00 mov rcx, QWORD PTR this$[rbp] + 000de 48 8b 51 20 mov rdx, QWORD PTR [rcx+32] + 000e2 48 8b c8 mov rcx, rax + 000e5 e8 00 00 00 00 call xed_decode + 000ea 90 npad 1 + +; 33 : } - 000c2 48 8b 85 00 01 + 000eb 48 8b 85 00 01 00 00 mov rax, QWORD PTR this$[rbp] - 000c9 48 8d a5 e8 00 + 000f2 48 8d a5 e8 00 00 00 lea rsp, QWORD PTR [rbp+232] - 000d0 5f pop rdi - 000d1 5d pop rbp - 000d2 c3 ret 0 + 000f9 5f pop rdi + 000fa 5d pop rbp + 000fb c3 ret 0 ??0_NATIVE_CODE_LINK@@QEAA@KPEAXK@Z ENDP ; _NATIVE_CODE_LINK::_NATIVE_CODE_LINK _TEXT ENDS ; COMDAT text$x diff --git a/CodeVirtualizer/x64/Debug/OpaqueBranching.cod b/CodeVirtualizer/x64/Debug/OpaqueBranching.cod index 18dfb5f..162ee00 100644 --- a/CodeVirtualizer/x64/Debug/OpaqueBranching.cod +++ b/CodeVirtualizer/x64/Debug/OpaqueBranching.cod @@ -607,7 +607,7 @@ pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?ObfGenOpaqueBranch@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@0@Z DD imagerel $LN29 - DD imagerel $LN29+1160 + DD imagerel $LN29+1176 DD imagerel $unwind$?ObfGenOpaqueBranch@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@0@Z pdata ENDS ; COMDAT pdata @@ -4232,7 +4232,7 @@ $T12 = 808 $T13 = 840 $T14 = 872 $T15 = 904 -tv214 = 920 +tv216 = 920 tv204 = 920 tv189 = 920 tv171 = 920 @@ -4297,7 +4297,7 @@ $LN3@ObfGenOpaq: ; 91 : return NULL; 00086 33 c0 xor eax, eax - 00088 e9 cc 03 00 00 jmp $LN1@ObfGenOpaq + 00088 e9 dc 03 00 00 jmp $LN1@ObfGenOpaq $LN2@ObfGenOpaq: ; 92 : @@ -4319,7 +4319,7 @@ $LN2@ObfGenOpaq: ; 96 : return NULL; 000ab 33 c0 xor eax, eax - 000ad e9 a7 03 00 00 jmp $LN1@ObfGenOpaq + 000ad e9 b7 03 00 00 jmp $LN1@ObfGenOpaq $LN4@ObfGenOpaq: ; 97 : } @@ -4367,7 +4367,7 @@ $LN10@ObfGenOpaq: ; 103 : return NULL; 00113 33 c0 xor eax, eax - 00115 e9 3f 03 00 00 jmp $LN1@ObfGenOpaq + 00115 e9 4f 03 00 00 jmp $LN1@ObfGenOpaq $LN5@ObfGenOpaq: ; 104 : } @@ -4486,7 +4486,7 @@ $LN14@ObfGenOpaq: ; 118 : return NULL; 00234 33 c0 xor eax, eax - 00236 e9 1e 02 00 00 jmp $LN1@ObfGenOpaq + 00236 e9 2e 02 00 00 jmp $LN1@ObfGenOpaq $LN6@ObfGenOpaq: ; 119 : } @@ -4583,7 +4583,7 @@ $LN20@ObfGenOpaq: ; 128 : return NULL; 00320 33 c0 xor eax, eax - 00322 e9 32 01 00 00 jmp $LN1@ObfGenOpaq + 00322 e9 42 01 00 00 jmp $LN1@ObfGenOpaq $LN7@ObfGenOpaq: ; 129 : } @@ -4674,50 +4674,57 @@ $LN24@ObfGenOpaq: 00412 48 8b 48 08 mov rcx, QWORD PTR [rax+8] 00416 e8 00 00 00 00 call ?NcInsertBlockAfter@@YAHPEAU_NATIVE_CODE_LINK@@PEAU_NATIVE_CODE_BLOCK@@H@Z ; NcInsertBlockAfter -; 138 : -; 139 : delete Taken; +; 138 : NotTaken->End = Taken->End; + + 0041b 48 8b 45 08 mov rax, QWORD PTR NotTaken$[rbp] + 0041f 48 8b 4d 28 mov rcx, QWORD PTR Taken$[rbp] + 00423 48 8b 49 08 mov rcx, QWORD PTR [rcx+8] + 00427 48 89 48 08 mov QWORD PTR [rax+8], rcx + +; 139 : +; 140 : delete Taken; - 0041b 48 8b 45 28 mov rax, QWORD PTR Taken$[rbp] - 0041f 48 89 85 88 03 + 0042b 48 8b 45 28 mov rax, QWORD PTR Taken$[rbp] + 0042f 48 89 85 88 03 00 00 mov QWORD PTR $T15[rbp], rax - 00426 48 83 bd 88 03 + 00436 48 83 bd 88 03 00 00 00 cmp QWORD PTR $T15[rbp], 0 - 0042e 74 1a je SHORT $LN25@ObfGenOpaq - 00430 ba 01 00 00 00 mov edx, 1 - 00435 48 8b 8d 88 03 + 0043e 74 1a je SHORT $LN25@ObfGenOpaq + 00440 ba 01 00 00 00 mov edx, 1 + 00445 48 8b 8d 88 03 00 00 mov rcx, QWORD PTR $T15[rbp] - 0043c e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z - 00441 48 89 85 98 03 - 00 00 mov QWORD PTR tv214[rbp], rax - 00448 eb 0b jmp SHORT $LN26@ObfGenOpaq + 0044c e8 00 00 00 00 call ??_G_NATIVE_CODE_BLOCK@@QEAAPEAXI@Z + 00451 48 89 85 98 03 + 00 00 mov QWORD PTR tv216[rbp], rax + 00458 eb 0b jmp SHORT $LN26@ObfGenOpaq $LN25@ObfGenOpaq: - 0044a 48 c7 85 98 03 + 0045a 48 c7 85 98 03 00 00 00 00 00 - 00 mov QWORD PTR tv214[rbp], 0 + 00 mov QWORD PTR tv216[rbp], 0 $LN26@ObfGenOpaq: -; 140 : return NotTaken; +; 141 : return NotTaken; - 00455 48 8b 45 08 mov rax, QWORD PTR NotTaken$[rbp] + 00465 48 8b 45 08 mov rax, QWORD PTR NotTaken$[rbp] $LN1@ObfGenOpaq: -; 141 : } +; 142 : } - 00459 48 8b f8 mov rdi, rax - 0045c 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] - 00460 48 8d 15 00 00 + 00469 48 8b f8 mov rdi, rax + 0046c 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] + 00470 48 8d 15 00 00 00 00 lea rdx, OFFSET FLAT:?ObfGenOpaqueBranch@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@0@Z$rtcFrameData - 00467 e8 00 00 00 00 call _RTC_CheckStackVars - 0046c 48 8b c7 mov rax, rdi - 0046f 48 8b 8d a0 03 + 00477 e8 00 00 00 00 call _RTC_CheckStackVars + 0047c 48 8b c7 mov rax, rdi + 0047f 48 8b 8d a0 03 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] - 00476 48 33 cd xor rcx, rbp - 00479 e8 00 00 00 00 call __security_check_cookie - 0047e 48 8d a5 b8 03 + 00486 48 33 cd xor rcx, rbp + 00489 e8 00 00 00 00 call __security_check_cookie + 0048e 48 8d a5 b8 03 00 00 lea rsp, QWORD PTR [rbp+952] - 00485 5f pop rdi - 00486 5d pop rbp - 00487 c3 ret 0 + 00495 5f pop rdi + 00496 5d pop rbp + 00497 c3 ret 0 ?ObfGenOpaqueBranch@@YAPEAU_NATIVE_CODE_BLOCK@@PEAU_NATIVE_CODE_LINK@@0@Z ENDP ; ObfGenOpaqueBranch _TEXT ENDS ; COMDAT text$x @@ -4739,7 +4746,7 @@ $T12 = 808 $T13 = 840 $T14 = 872 $T15 = 904 -tv214 = 920 +tv216 = 920 tv204 = 920 tv189 = 920 tv171 = 920 @@ -4789,7 +4796,7 @@ $T12 = 808 $T13 = 840 $T14 = 872 $T15 = 904 -tv214 = 920 +tv216 = 920 tv204 = 920 tv189 = 920 tv171 = 920 @@ -4840,7 +4847,7 @@ $T12 = 808 $T13 = 840 $T14 = 872 $T15 = 904 -tv214 = 920 +tv216 = 920 tv204 = 920 tv189 = 920 tv171 = 920 @@ -4891,7 +4898,7 @@ $T12 = 808 $T13 = 840 $T14 = 872 $T15 = 904 -tv214 = 920 +tv216 = 920 tv204 = 920 tv189 = 920 tv171 = 920 diff --git a/x64/Debug/CodeVirtualizer.ilk b/x64/Debug/CodeVirtualizer.ilk index 824e7a6c96416a031ee7658df59d43367ad27976..f9f73879a3b20778c62552b5a6db23265caaaecc 100644 GIT binary patch delta 221253 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 TYu!D@r0Hp6Qu~Mr;{_)yH8