Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // SerializeObjectToMemBuff()
- //
- //
- //*********************************************************************************************
- CSmartPtrRef<I_MemoryBufferExt> SerializeObjectToMemBuff(I_BaseObject &obj)
- {
- 00007FF61B608760 mov qword ptr [rsp+18h],rbx
- 00007FF61B608765 push rbp
- 00007FF61B608766 push rsi
- 00007FF61B608767 push rdi
- 00007FF61B608768 push r12
- 00007FF61B60876A push r13
- 00007FF61B60876C push r14
- 00007FF61B60876E push r15
- 00007FF61B608770 lea rbp,[rsp-27h]
- 00007FF61B608775 sub rsp,0B0h
- 00007FF61B60877C mov rax,qword ptr [__security_cookie (07FF61D9BC5C8h)]
- 00007FF61B608783 xor rax,rsp
- 00007FF61B608786 mov qword ptr [rbp+1Fh],rax
- 00007FF61B60878A mov rdi,rdx
- 00007FF61B60878D mov r15,rcx
- 00007FF61B608790 mov qword ptr [rbp-31h],rcx
- 00007FF61B608794 xor r13d,r13d
- 00007FF61B608797 mov dword ptr [rbp-69h],r13d
- const CHAR * classId(obj._GetRTTI()->GetClassId());
- 00007FF61B60879B mov rax,qword ptr [rdx]
- 00007FF61B60879E mov rcx,rdx
- 00007FF61B6087A1 call qword ptr [rax+18h]
- 00007FF61B6087A4 mov rcx,rax
- 00007FF61B6087A7 call Nexus::CRTTI::GetClassId (07FF61888340Ah)
- 00007FF61B6087AC mov rbx,rax
- NX_ASSERT(classId);
- 00007FF61B6087AF test rax,rax
- 00007FF61B6087B2 jne Nexus::SerializeObjectToMemBuff+6Bh (07FF61B6087CBh)
- 00007FF61B6087B4 lea r8d,[r13+14h]
- 00007FF61B6087B8 lea rdx,[string "O:\\Projects\\code\\nexus\\kernel\\u@"... (07FF61CFCB490h)]
- 00007FF61B6087BF lea rcx,[string "(classId)" (07FF61CB338E0h)]
- 00007FF61B6087C6 call Nexus::SysAssertExpr (07FF6188867D1h)
- CSmartPtrRef<Persistence::COutputNode> output(NX_NEW Persistence::COutputNode(4096));
- 00007FF61B6087CB mov ecx,50h
- 00007FF61B6087D0 call Nexus::CPoolAllocatedObj<150,64,Nexus::CMTLockingPolicyNULL>::operator new (07FF618880AC5h)
- 00007FF61B6087D5 mov qword ptr [rbp-49h],rax
- 00007FF61B6087D9 test rax,rax
- 00007FF61B6087DC je Nexus::SerializeObjectToMemBuff+8Dh (07FF61B6087EDh)
- 00007FF61B6087DE mov edx,1000h
- 00007FF61B6087E3 mov rcx,rax
- 00007FF61B6087E6 call Nexus::Persistence::COutputNode::COutputNode (07FF6188A9D6Ch)
- 00007FF61B6087EB jmp Nexus::SerializeObjectToMemBuff+90h (07FF61B6087F0h)
- 00007FF61B6087ED mov rax,r13
- 00007FF61B6087F0 lea rsi,[Nexus::CSmartPtrRef<Nexus::Persistence::COutputNode>::`vftable' (07FF61CB39898h)]
- 00007FF61B6087F7 mov qword ptr [rbp-61h],rsi
- 00007FF61B6087FB mov qword ptr [rbp-59h],rax
- 00007FF61B6087FF test rax,rax
- 00007FF61B608802 je Nexus::SerializeObjectToMemBuff+0A7h (07FF61B608807h)
- 00007FF61B608804 inc dword ptr [rax+8]
- NX_CHECK(output->Process(CToken("__classId").Get(), CStdString(classId)));
- 00007FF61B608807 lea rdx,[string "__classId" (07FF61CFCB4D8h)]
- 00007FF61B60880E lea rcx,[rbp-29h]
- 00007FF61B608812 call Nexus::CToken::CToken (07FF61886718Dh)
- 00007FF61B608817 mov ecx,dword ptr [rax]
- 00007FF61B608819 mov dword ptr [rbp-51h],ecx
- 00007FF61B60881C mov qword ptr [rbp+0Fh],r13
- 00007FF61B608820 mov qword ptr [rbp+17h],0Fh
- 00007FF61B608828 mov byte ptr [rbp-1],0
- 00007FF61B60882C mov r8,0FFFFFFFFFFFFFFFFh
- 00007FF61B608833 inc r8
- 00007FF61B608836 cmp byte ptr [rbx+r8],0
- 00007FF61B60883B jne Nexus::SerializeObjectToMemBuff+0D3h (07FF61B608833h)
- 00007FF61B60883D mov rdx,rbx
- 00007FF61B608840 lea rcx,[rbp-1]
- 00007FF61B608844 call std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign (07FF61887C4C5h)
- 00007FF61B608849 nop
- 00007FF61B60884A lea r8,[rbp-1]
- 00007FF61B60884E lea rdx,[rbp-51h]
- 00007FF61B608852 mov rcx,qword ptr [rbp-59h]
- 00007FF61B608856 call Nexus::Persistence::COutputNode::Process<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > (07FF618861C92h)
- 00007FF61B60885B test al,al
- 00007FF61B60885D jne Nexus::SerializeObjectToMemBuff+119h (07FF61B608879h)
- 00007FF61B60885F mov r8d,18h
- 00007FF61B608865 lea rdx,[string "O:\\Projects\\code\\nexus\\kernel\\u@"... (07FF61CFCB490h)]
- 00007FF61B60886C lea rcx,[string "(output->Process(CToken("__clas@"... (07FF61CFCB4F0h)]
- 00007FF61B608873 call Nexus::SysAssertExpr (07FF6188867D1h)
- 00007FF61B608878 nop
- 00007FF61B608879 mov rdx,qword ptr [rbp+17h]
- 00007FF61B60887D cmp rdx,10h
- 00007FF61B608881 jb Nexus::SerializeObjectToMemBuff+154h (07FF61B6088B4h)
- 00007FF61B608883 inc rdx
- 00007FF61B608886 mov rcx,qword ptr [rbp-1]
- 00007FF61B60888A mov rax,rcx
- 00007FF61B60888D cmp rdx,1000h
- 00007FF61B608894 jb Nexus::SerializeObjectToMemBuff+14Fh (07FF61B6088AFh)
- 00007FF61B608896 add rdx,27h
- 00007FF61B60889A mov rcx,qword ptr [rcx-8]
- 00007FF61B60889E sub rax,rcx
- 00007FF61B6088A1 add rax,0FFFFFFFFFFFFFFF8h
- 00007FF61B6088A5 cmp rax,1Fh
- 00007FF61B6088A9 ja Nexus::SerializeObjectToMemBuff+3CAh (07FF61B608B2Ah)
- 00007FF61B6088AF call operator delete (07FF618841F96h)
- 00007FF61B6088B4 mov qword ptr [rbp+0Fh],r13
- 00007FF61B6088B8 mov qword ptr [rbp+17h],0Fh
- 00007FF61B6088C0 mov byte ptr [rbp-1],0
- 00007FF61B6088C4 lea rax,[Nexus::Persistence::CIOCtxBase::`vftable' (07FF61CBB79F8h)]
- 00007FF61B6088CB mov qword ptr [rbp-49h],rax
- if (!obj.SaveState(output, Persistence::CIOCtxBase()))
- 00007FF61B6088CF mov rax,qword ptr [rdi]
- 00007FF61B6088D2 lea r8,[rbp-49h]
- 00007FF61B6088D6 lea rdx,[rbp-61h]
- 00007FF61B6088DA mov rcx,rdi
- 00007FF61B6088DD call qword ptr [rax+30h]
- 00007FF61B6088E0 test al,al
- 00007FF61B6088E2 jne Nexus::SerializeObjectToMemBuff+222h (07FF61B608982h)
- {
- NX_TRACE_E(FS("%s: unable to serialize object of class %s", __NX_FUNC_ID, classId));
- 00007FF61B6088E8 mov r9,rbx
- 00007FF61B6088EB lea r8,[string "Nexus::SerializeObjectToMemBuff" (07FF61CFCB540h)]
- 00007FF61B6088F2 lea rdx,[string "%s: unable to serialize object @"... (07FF61CFCB568h)]
- 00007FF61B6088F9 lea rcx,[rbp-1]
- 00007FF61B6088FD call Nexus::FS (07FF618890E70h)
- 00007FF61B608902 nop
- 00007FF61B608903 mov rcx,rax
- 00007FF61B608906 call Nexus::NX_TRACE_E (07FF61887E027h)
- 00007FF61B60890B nop
- 00007FF61B60890C mov rdx,qword ptr [rbp+17h]
- 00007FF61B608910 cmp rdx,10h
- 00007FF61B608914 jb Nexus::SerializeObjectToMemBuff+1E7h (07FF61B608947h)
- 00007FF61B608916 inc rdx
- 00007FF61B608919 mov rcx,qword ptr [rbp-1]
- 00007FF61B60891D mov rax,rcx
- 00007FF61B608920 cmp rdx,1000h
- 00007FF61B608927 jb Nexus::SerializeObjectToMemBuff+1E2h (07FF61B608942h)
- 00007FF61B608929 add rdx,27h
- 00007FF61B60892D mov rcx,qword ptr [rcx-8]
- 00007FF61B608931 sub rax,rcx
- 00007FF61B608934 add rax,0FFFFFFFFFFFFFFF8h
- 00007FF61B608938 cmp rax,1Fh
- 00007FF61B60893C ja Nexus::SerializeObjectToMemBuff+3C4h (07FF61B608B24h)
- 00007FF61B608942 call operator delete (07FF618841F96h)
- return false;
- 00007FF61B608947 lea rax,[Nexus::CSmartPtrRef<Nexus::I_MemoryBufferExt>::`vftable' (07FF61CB36100h)]
- 00007FF61B60894E mov qword ptr [r15],rax
- 00007FF61B608951 mov qword ptr [r15+8],r13
- 00007FF61B608955 mov qword ptr [rbp-61h],rsi
- 00007FF61B608959 mov rcx,qword ptr [rbp-59h]
- 00007FF61B60895D test rcx,rcx
- 00007FF61B608960 je Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)
- 00007FF61B608966 dec dword ptr [rcx+8]
- 00007FF61B608969 cmp dword ptr [rcx+8],0
- 00007FF61B60896D jg Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)
- 00007FF61B608973 mov rax,qword ptr [rcx]
- 00007FF61B608976 mov edx,1
- 00007FF61B60897B call qword ptr [rax]
- }
- #if 0
- const size_t streamSize(output->GetMemStream()->Size());
- return CMemoryBufferExt::CreateWithTakingDataOwnership(output->GetMemStream()->RetrieveDataOwnership(), streamSize, true);
- #else
- //
- // Codegen bug introduced Visual Studio 2019 16.4.0 causes following code to create memory buffer object of size 0
- //
- return CMemoryBufferExt::CreateWithTakingDataOwnership(output->GetMemStream()->RetrieveDataOwnership(), output->GetMemStream()->Size(), true);
- 00007FF61B60897D jmp Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)
- 00007FF61B608982 lea rax,[Nexus::CSmartPtrRef<Nexus::CMemoryStream>::`vftable' (07FF61CB8F270h)]
- 00007FF61B608989 mov qword ptr [rbp-21h],rax
- 00007FF61B60898D mov rdi,qword ptr [rbp-59h]
- 00007FF61B608991 mov rsi,qword ptr [rdi+28h]
- 00007FF61B608995 mov qword ptr [rbp-19h],rsi
- 00007FF61B608999 test rsi,rsi
- 00007FF61B60899C je Nexus::SerializeObjectToMemBuff+245h (07FF61B6089A5h)
- 00007FF61B60899E inc dword ptr [rsi+8]
- 00007FF61B6089A1 mov rdi,qword ptr [rbp-59h]
- 00007FF61B6089A5 mov qword ptr [rbp-11h],rax
- 00007FF61B6089A9 mov rdi,qword ptr [rdi+28h]
- 00007FF61B6089AD mov qword ptr [rbp-9],rdi
- 00007FF61B6089B1 test rdi,rdi
- 00007FF61B6089B4 je Nexus::SerializeObjectToMemBuff+259h (07FF61B6089B9h)
- 00007FF61B6089B6 inc dword ptr [rdi+8]
- 00007FF61B6089B9 mov r14,qword ptr [rdi+18h]
- 00007FF61B6089BD mov qword ptr [rdi+18h],r13
- 00007FF61B6089C1 mov qword ptr [rdi+28h],r13
- 00007FF61B6089C5 mov qword ptr [rdi+20h],r13
- 00007FF61B6089C9 mov qword ptr [rdi+30h],r13
- 00007FF61B6089CD mov r12,qword ptr [rsi+30h]
- 00007FF61B6089D1 mov ecx,28h
- 00007FF61B6089D6 call operator new (07FF6188AA500h)
- 00007FF61B6089DB mov rbx,rax
- 00007FF61B6089DE mov qword ptr [rbp-41h],rax
- 00007FF61B6089E2 test rax,rax
- 00007FF61B6089E5 je Nexus::SerializeObjectToMemBuff+2AFh (07FF61B608A0Fh)
- 00007FF61B6089E7 lea rax,[Nexus::CRefCountedMT::`vftable' (07FF61CB35E00h)]
- 00007FF61B6089EE mov qword ptr [rbx],rax
- 00007FF61B6089F1 mov dword ptr [rbx+8],r13d
- 00007FF61B6089F5 lea rax,[Nexus::CMemoryBufferExt::`vftable' (07FF61CB36008h)]
- 00007FF61B6089FC mov qword ptr [rbx],rax
- 00007FF61B6089FF mov qword ptr [rbx+10h],r14
- 00007FF61B608A03 mov qword ptr [rbx+18h],r12
- 00007FF61B608A07 mov word ptr [rbx+20h],101h
- 00007FF61B608A0D jmp Nexus::SerializeObjectToMemBuff+2B2h (07FF61B608A12h)
- 00007FF61B608A0F mov rbx,r13
- 00007FF61B608A12 lea rax,[Nexus::CSmartPtrRef<Nexus::CMemoryBufferExt>::`vftable' (07FF61CB36068h)]
- 00007FF61B608A19 mov qword ptr [rbp-41h],rax
- 00007FF61B608A1D mov qword ptr [rbp-39h],rbx
- 00007FF61B608A21 lea r14,[rbx+8]
- 00007FF61B608A25 test rbx,rbx
- 00007FF61B608A28 je Nexus::SerializeObjectToMemBuff+2D2h (07FF61B608A32h)
- 00007FF61B608A2A mov rcx,r14
- 00007FF61B608A2D call Nexus::InterlockedInc (07FF61889D242h)
- 00007FF61B608A32 mov dword ptr [rbp-69h],2
- 00007FF61B608A39 lea rax,[Nexus::CSmartPtrRef<Nexus::I_MemoryBufferExt>::`vftable' (07FF61CB36100h)]
- 00007FF61B608A40 mov qword ptr [r15],rax
- 00007FF61B608A43 mov qword ptr [r15+8],rbx
- 00007FF61B608A47 test rbx,rbx
- 00007FF61B608A4A je Nexus::SerializeObjectToMemBuff+2F4h (07FF61B608A54h)
- 00007FF61B608A4C mov rcx,r14
- 00007FF61B608A4F call Nexus::InterlockedInc (07FF61889D242h)
- 00007FF61B608A54 mov dword ptr [rbp-69h],3
- 00007FF61B608A5B test rbx,rbx
- 00007FF61B608A5E je Nexus::SerializeObjectToMemBuff+33Ah (07FF61B608A9Ah)
- 00007FF61B608A60 mov rcx,r14
- 00007FF61B608A63 call Nexus::InterlockedDec (07FF61884B168h)
- 00007FF61B608A68 mov r14d,eax
- 00007FF61B608A6B test eax,eax
- 00007FF61B608A6D jns Nexus::SerializeObjectToMemBuff+328h (07FF61B608A88h)
- 00007FF61B608A6F mov r8d,52h
- 00007FF61B608A75 lea rdx,[string "O:\\Projects\\code\\nexus\\common\\r@"... (07FF61CB35E10h)]
- 00007FF61B608A7C lea rcx,[string "(static_cast<int32>(newCnt) >= @"... (07FF61CB35E48h)]
- 00007FF61B608A83 call Nexus::SysAssertExpr (07FF6188867D1h)
- 00007FF61B608A88 test r14d,r14d
- 00007FF61B608A8B jne Nexus::SerializeObjectToMemBuff+33Ah (07FF61B608A9Ah)
- 00007FF61B608A8D mov rax,qword ptr [rbx]
- 00007FF61B608A90 lea edx,[r14+1]
- 00007FF61B608A94 mov rcx,rbx
- 00007FF61B608A97 call qword ptr [rax]
- 00007FF61B608A99 nop
- 00007FF61B608A9A test rdi,rdi
- 00007FF61B608A9D je Nexus::SerializeObjectToMemBuff+356h (07FF61B608AB6h)
- 00007FF61B608A9F dec dword ptr [rdi+8]
- 00007FF61B608AA2 cmp dword ptr [rdi+8],0
- 00007FF61B608AA6 jg Nexus::SerializeObjectToMemBuff+356h (07FF61B608AB6h)
- 00007FF61B608AA8 mov rax,qword ptr [rdi]
- 00007FF61B608AAB mov edx,1
- 00007FF61B608AB0 mov rcx,rdi
- 00007FF61B608AB3 call qword ptr [rax]
- 00007FF61B608AB5 nop
- 00007FF61B608AB6 test rsi,rsi
- 00007FF61B608AB9 je Nexus::SerializeObjectToMemBuff+372h (07FF61B608AD2h)
- 00007FF61B608ABB dec dword ptr [rsi+8]
- 00007FF61B608ABE cmp dword ptr [rsi+8],0
- 00007FF61B608AC2 jg Nexus::SerializeObjectToMemBuff+372h (07FF61B608AD2h)
- 00007FF61B608AC4 mov rax,qword ptr [rsi]
- 00007FF61B608AC7 mov edx,1
- 00007FF61B608ACC mov rcx,rsi
- 00007FF61B608ACF call qword ptr [rax]
- 00007FF61B608AD1 nop
- 00007FF61B608AD2 lea rax,[Nexus::CSmartPtrRef<Nexus::Persistence::COutputNode>::`vftable' (07FF61CB39898h)]
- 00007FF61B608AD9 mov qword ptr [rbp-61h],rax
- 00007FF61B608ADD mov rcx,qword ptr [rbp-59h]
- 00007FF61B608AE1 test rcx,rcx
- 00007FF61B608AE4 je Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)
- 00007FF61B608AE6 dec dword ptr [rcx+8]
- 00007FF61B608AE9 cmp dword ptr [rcx+8],0
- 00007FF61B608AED jg Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)
- 00007FF61B608AEF mov r8,qword ptr [rcx]
- 00007FF61B608AF2 mov edx,1
- 00007FF61B608AF7 call qword ptr [r8]
- 00007FF61B608AFA mov rax,r15
- 00007FF61B608AFD mov rcx,qword ptr [rbp+1Fh]
- 00007FF61B608B01 xor rcx,rsp
- 00007FF61B608B04 call __security_check_cookie (07FF61886A31Ah)
- 00007FF61B608B09 mov rbx,qword ptr [rsp+100h]
- 00007FF61B608B11 add rsp,0B0h
- 00007FF61B608B18 pop r15
- 00007FF61B608B1A pop r14
- 00007FF61B608B1C pop r13
- 00007FF61B608B1E pop r12
- 00007FF61B608B20 pop rdi
- 00007FF61B608B21 pop rsi
- 00007FF61B608B22 pop rbp
- 00007FF61B608B23 ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement