Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.58 KB | None | 0 0
  1.     //
  2.     // SerializeObjectToMemBuff()
  3.     //
  4.     //
  5.     //*********************************************************************************************
  6.     CSmartPtrRef<I_MemoryBufferExt> SerializeObjectToMemBuff(I_BaseObject &obj)
  7.     {
  8. 00007FF61B608760  mov         qword ptr [rsp+18h],rbx  
  9. 00007FF61B608765  push        rbp  
  10. 00007FF61B608766  push        rsi  
  11. 00007FF61B608767  push        rdi  
  12. 00007FF61B608768  push        r12  
  13. 00007FF61B60876A  push        r13  
  14. 00007FF61B60876C  push        r14  
  15. 00007FF61B60876E  push        r15  
  16. 00007FF61B608770  lea         rbp,[rsp-27h]  
  17. 00007FF61B608775  sub         rsp,0B0h  
  18. 00007FF61B60877C  mov         rax,qword ptr [__security_cookie (07FF61D9BC5C8h)]  
  19. 00007FF61B608783  xor         rax,rsp  
  20. 00007FF61B608786  mov         qword ptr [rbp+1Fh],rax  
  21. 00007FF61B60878A  mov         rdi,rdx  
  22. 00007FF61B60878D  mov         r15,rcx  
  23. 00007FF61B608790  mov         qword ptr [rbp-31h],rcx  
  24. 00007FF61B608794  xor         r13d,r13d  
  25. 00007FF61B608797  mov         dword ptr [rbp-69h],r13d  
  26.         const CHAR * classId(obj._GetRTTI()->GetClassId());
  27. 00007FF61B60879B  mov         rax,qword ptr [rdx]  
  28. 00007FF61B60879E  mov         rcx,rdx  
  29. 00007FF61B6087A1  call        qword ptr [rax+18h]  
  30. 00007FF61B6087A4  mov         rcx,rax  
  31. 00007FF61B6087A7  call        Nexus::CRTTI::GetClassId (07FF61888340Ah)  
  32. 00007FF61B6087AC  mov         rbx,rax  
  33.  
  34.         NX_ASSERT(classId);
  35. 00007FF61B6087AF  test        rax,rax  
  36. 00007FF61B6087B2  jne         Nexus::SerializeObjectToMemBuff+6Bh (07FF61B6087CBh)  
  37. 00007FF61B6087B4  lea         r8d,[r13+14h]  
  38. 00007FF61B6087B8  lea         rdx,[string "O:\\Projects\\code\\nexus\\kernel\\u@"... (07FF61CFCB490h)]  
  39. 00007FF61B6087BF  lea         rcx,[string "(classId)" (07FF61CB338E0h)]  
  40. 00007FF61B6087C6  call        Nexus::SysAssertExpr (07FF6188867D1h)  
  41.  
  42.         CSmartPtrRef<Persistence::COutputNode>  output(NX_NEW Persistence::COutputNode(4096));
  43. 00007FF61B6087CB  mov         ecx,50h  
  44. 00007FF61B6087D0  call        Nexus::CPoolAllocatedObj<150,64,Nexus::CMTLockingPolicyNULL>::operator new (07FF618880AC5h)  
  45. 00007FF61B6087D5  mov         qword ptr [rbp-49h],rax  
  46. 00007FF61B6087D9  test        rax,rax  
  47. 00007FF61B6087DC  je          Nexus::SerializeObjectToMemBuff+8Dh (07FF61B6087EDh)  
  48. 00007FF61B6087DE  mov         edx,1000h  
  49. 00007FF61B6087E3  mov         rcx,rax  
  50. 00007FF61B6087E6  call        Nexus::Persistence::COutputNode::COutputNode (07FF6188A9D6Ch)  
  51. 00007FF61B6087EB  jmp         Nexus::SerializeObjectToMemBuff+90h (07FF61B6087F0h)  
  52. 00007FF61B6087ED  mov         rax,r13  
  53. 00007FF61B6087F0  lea         rsi,[Nexus::CSmartPtrRef<Nexus::Persistence::COutputNode>::`vftable' (07FF61CB39898h)]  
  54. 00007FF61B6087F7  mov         qword ptr [rbp-61h],rsi  
  55. 00007FF61B6087FB  mov         qword ptr [rbp-59h],rax  
  56. 00007FF61B6087FF  test        rax,rax  
  57. 00007FF61B608802  je          Nexus::SerializeObjectToMemBuff+0A7h (07FF61B608807h)  
  58. 00007FF61B608804  inc         dword ptr [rax+8]  
  59.  
  60.         NX_CHECK(output->Process(CToken("__classId").Get(), CStdString(classId)));
  61. 00007FF61B608807  lea         rdx,[string "__classId" (07FF61CFCB4D8h)]  
  62. 00007FF61B60880E  lea         rcx,[rbp-29h]  
  63. 00007FF61B608812  call        Nexus::CToken::CToken (07FF61886718Dh)  
  64. 00007FF61B608817  mov         ecx,dword ptr [rax]  
  65. 00007FF61B608819  mov         dword ptr [rbp-51h],ecx  
  66. 00007FF61B60881C  mov         qword ptr [rbp+0Fh],r13  
  67. 00007FF61B608820  mov         qword ptr [rbp+17h],0Fh  
  68. 00007FF61B608828  mov         byte ptr [rbp-1],0  
  69. 00007FF61B60882C  mov         r8,0FFFFFFFFFFFFFFFFh  
  70. 00007FF61B608833  inc         r8  
  71. 00007FF61B608836  cmp         byte ptr [rbx+r8],0  
  72. 00007FF61B60883B  jne         Nexus::SerializeObjectToMemBuff+0D3h (07FF61B608833h)  
  73. 00007FF61B60883D  mov         rdx,rbx  
  74. 00007FF61B608840  lea         rcx,[rbp-1]  
  75. 00007FF61B608844  call        std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign (07FF61887C4C5h)  
  76. 00007FF61B608849  nop  
  77. 00007FF61B60884A  lea         r8,[rbp-1]  
  78. 00007FF61B60884E  lea         rdx,[rbp-51h]  
  79. 00007FF61B608852  mov         rcx,qword ptr [rbp-59h]  
  80. 00007FF61B608856  call        Nexus::Persistence::COutputNode::Process<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > (07FF618861C92h)  
  81. 00007FF61B60885B  test        al,al  
  82. 00007FF61B60885D  jne         Nexus::SerializeObjectToMemBuff+119h (07FF61B608879h)  
  83. 00007FF61B60885F  mov         r8d,18h  
  84. 00007FF61B608865  lea         rdx,[string "O:\\Projects\\code\\nexus\\kernel\\u@"... (07FF61CFCB490h)]  
  85. 00007FF61B60886C  lea         rcx,[string "(output->Process(CToken("__clas@"... (07FF61CFCB4F0h)]  
  86. 00007FF61B608873  call        Nexus::SysAssertExpr (07FF6188867D1h)  
  87. 00007FF61B608878  nop  
  88. 00007FF61B608879  mov         rdx,qword ptr [rbp+17h]  
  89. 00007FF61B60887D  cmp         rdx,10h  
  90. 00007FF61B608881  jb          Nexus::SerializeObjectToMemBuff+154h (07FF61B6088B4h)  
  91. 00007FF61B608883  inc         rdx  
  92. 00007FF61B608886  mov         rcx,qword ptr [rbp-1]  
  93. 00007FF61B60888A  mov         rax,rcx  
  94. 00007FF61B60888D  cmp         rdx,1000h  
  95. 00007FF61B608894  jb          Nexus::SerializeObjectToMemBuff+14Fh (07FF61B6088AFh)  
  96. 00007FF61B608896  add         rdx,27h  
  97. 00007FF61B60889A  mov         rcx,qword ptr [rcx-8]  
  98. 00007FF61B60889E  sub         rax,rcx  
  99. 00007FF61B6088A1  add         rax,0FFFFFFFFFFFFFFF8h  
  100. 00007FF61B6088A5  cmp         rax,1Fh  
  101. 00007FF61B6088A9  ja          Nexus::SerializeObjectToMemBuff+3CAh (07FF61B608B2Ah)  
  102. 00007FF61B6088AF  call        operator delete (07FF618841F96h)  
  103. 00007FF61B6088B4  mov         qword ptr [rbp+0Fh],r13  
  104. 00007FF61B6088B8  mov         qword ptr [rbp+17h],0Fh  
  105. 00007FF61B6088C0  mov         byte ptr [rbp-1],0  
  106. 00007FF61B6088C4  lea         rax,[Nexus::Persistence::CIOCtxBase::`vftable' (07FF61CBB79F8h)]  
  107. 00007FF61B6088CB  mov         qword ptr [rbp-49h],rax  
  108.  
  109.         if (!obj.SaveState(output, Persistence::CIOCtxBase()))
  110. 00007FF61B6088CF  mov         rax,qword ptr [rdi]  
  111. 00007FF61B6088D2  lea         r8,[rbp-49h]  
  112. 00007FF61B6088D6  lea         rdx,[rbp-61h]  
  113. 00007FF61B6088DA  mov         rcx,rdi  
  114. 00007FF61B6088DD  call        qword ptr [rax+30h]  
  115. 00007FF61B6088E0  test        al,al  
  116. 00007FF61B6088E2  jne         Nexus::SerializeObjectToMemBuff+222h (07FF61B608982h)  
  117.         {
  118.             NX_TRACE_E(FS("%s: unable to serialize object of class %s", __NX_FUNC_ID, classId));
  119. 00007FF61B6088E8  mov         r9,rbx  
  120. 00007FF61B6088EB  lea         r8,[string "Nexus::SerializeObjectToMemBuff" (07FF61CFCB540h)]  
  121. 00007FF61B6088F2  lea         rdx,[string "%s: unable to serialize object @"... (07FF61CFCB568h)]  
  122. 00007FF61B6088F9  lea         rcx,[rbp-1]  
  123. 00007FF61B6088FD  call        Nexus::FS (07FF618890E70h)  
  124. 00007FF61B608902  nop  
  125. 00007FF61B608903  mov         rcx,rax  
  126. 00007FF61B608906  call        Nexus::NX_TRACE_E (07FF61887E027h)  
  127. 00007FF61B60890B  nop  
  128. 00007FF61B60890C  mov         rdx,qword ptr [rbp+17h]  
  129. 00007FF61B608910  cmp         rdx,10h  
  130. 00007FF61B608914  jb          Nexus::SerializeObjectToMemBuff+1E7h (07FF61B608947h)  
  131. 00007FF61B608916  inc         rdx  
  132. 00007FF61B608919  mov         rcx,qword ptr [rbp-1]  
  133. 00007FF61B60891D  mov         rax,rcx  
  134. 00007FF61B608920  cmp         rdx,1000h  
  135. 00007FF61B608927  jb          Nexus::SerializeObjectToMemBuff+1E2h (07FF61B608942h)  
  136. 00007FF61B608929  add         rdx,27h  
  137. 00007FF61B60892D  mov         rcx,qword ptr [rcx-8]  
  138. 00007FF61B608931  sub         rax,rcx  
  139. 00007FF61B608934  add         rax,0FFFFFFFFFFFFFFF8h  
  140. 00007FF61B608938  cmp         rax,1Fh  
  141. 00007FF61B60893C  ja          Nexus::SerializeObjectToMemBuff+3C4h (07FF61B608B24h)  
  142. 00007FF61B608942  call        operator delete (07FF618841F96h)  
  143.  
  144.             return false;
  145. 00007FF61B608947  lea         rax,[Nexus::CSmartPtrRef<Nexus::I_MemoryBufferExt>::`vftable' (07FF61CB36100h)]  
  146. 00007FF61B60894E  mov         qword ptr [r15],rax  
  147. 00007FF61B608951  mov         qword ptr [r15+8],r13  
  148. 00007FF61B608955  mov         qword ptr [rbp-61h],rsi  
  149. 00007FF61B608959  mov         rcx,qword ptr [rbp-59h]  
  150. 00007FF61B60895D  test        rcx,rcx  
  151. 00007FF61B608960  je          Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)  
  152. 00007FF61B608966  dec         dword ptr [rcx+8]  
  153. 00007FF61B608969  cmp         dword ptr [rcx+8],0  
  154. 00007FF61B60896D  jg          Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)  
  155. 00007FF61B608973  mov         rax,qword ptr [rcx]  
  156. 00007FF61B608976  mov         edx,1  
  157. 00007FF61B60897B  call        qword ptr [rax]  
  158.         }
  159.  
  160. #if 0
  161.         const size_t streamSize(output->GetMemStream()->Size());
  162.  
  163.         return CMemoryBufferExt::CreateWithTakingDataOwnership(output->GetMemStream()->RetrieveDataOwnership(), streamSize, true);
  164. #else
  165.         //
  166.         // Codegen bug introduced Visual Studio 2019 16.4.0 causes following code to create memory buffer object of size 0
  167.         //
  168.  
  169.         return CMemoryBufferExt::CreateWithTakingDataOwnership(output->GetMemStream()->RetrieveDataOwnership(), output->GetMemStream()->Size(), true);
  170. 00007FF61B60897D  jmp         Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)  
  171. 00007FF61B608982  lea         rax,[Nexus::CSmartPtrRef<Nexus::CMemoryStream>::`vftable' (07FF61CB8F270h)]  
  172. 00007FF61B608989  mov         qword ptr [rbp-21h],rax  
  173. 00007FF61B60898D  mov         rdi,qword ptr [rbp-59h]  
  174. 00007FF61B608991  mov         rsi,qword ptr [rdi+28h]  
  175. 00007FF61B608995  mov         qword ptr [rbp-19h],rsi  
  176. 00007FF61B608999  test        rsi,rsi  
  177. 00007FF61B60899C  je          Nexus::SerializeObjectToMemBuff+245h (07FF61B6089A5h)  
  178. 00007FF61B60899E  inc         dword ptr [rsi+8]  
  179. 00007FF61B6089A1  mov         rdi,qword ptr [rbp-59h]  
  180. 00007FF61B6089A5  mov         qword ptr [rbp-11h],rax  
  181. 00007FF61B6089A9  mov         rdi,qword ptr [rdi+28h]  
  182. 00007FF61B6089AD  mov         qword ptr [rbp-9],rdi  
  183. 00007FF61B6089B1  test        rdi,rdi  
  184. 00007FF61B6089B4  je          Nexus::SerializeObjectToMemBuff+259h (07FF61B6089B9h)  
  185. 00007FF61B6089B6  inc         dword ptr [rdi+8]  
  186. 00007FF61B6089B9  mov         r14,qword ptr [rdi+18h]  
  187. 00007FF61B6089BD  mov         qword ptr [rdi+18h],r13  
  188. 00007FF61B6089C1  mov         qword ptr [rdi+28h],r13  
  189. 00007FF61B6089C5  mov         qword ptr [rdi+20h],r13  
  190. 00007FF61B6089C9  mov         qword ptr [rdi+30h],r13  
  191. 00007FF61B6089CD  mov         r12,qword ptr [rsi+30h]  
  192. 00007FF61B6089D1  mov         ecx,28h  
  193. 00007FF61B6089D6  call        operator new (07FF6188AA500h)  
  194. 00007FF61B6089DB  mov         rbx,rax  
  195. 00007FF61B6089DE  mov         qword ptr [rbp-41h],rax  
  196. 00007FF61B6089E2  test        rax,rax  
  197. 00007FF61B6089E5  je          Nexus::SerializeObjectToMemBuff+2AFh (07FF61B608A0Fh)  
  198. 00007FF61B6089E7  lea         rax,[Nexus::CRefCountedMT::`vftable' (07FF61CB35E00h)]  
  199. 00007FF61B6089EE  mov         qword ptr [rbx],rax  
  200. 00007FF61B6089F1  mov         dword ptr [rbx+8],r13d  
  201. 00007FF61B6089F5  lea         rax,[Nexus::CMemoryBufferExt::`vftable' (07FF61CB36008h)]  
  202. 00007FF61B6089FC  mov         qword ptr [rbx],rax  
  203. 00007FF61B6089FF  mov         qword ptr [rbx+10h],r14  
  204. 00007FF61B608A03  mov         qword ptr [rbx+18h],r12  
  205. 00007FF61B608A07  mov         word ptr [rbx+20h],101h  
  206. 00007FF61B608A0D  jmp         Nexus::SerializeObjectToMemBuff+2B2h (07FF61B608A12h)  
  207. 00007FF61B608A0F  mov         rbx,r13  
  208. 00007FF61B608A12  lea         rax,[Nexus::CSmartPtrRef<Nexus::CMemoryBufferExt>::`vftable' (07FF61CB36068h)]  
  209. 00007FF61B608A19  mov         qword ptr [rbp-41h],rax  
  210. 00007FF61B608A1D  mov         qword ptr [rbp-39h],rbx  
  211. 00007FF61B608A21  lea         r14,[rbx+8]  
  212. 00007FF61B608A25  test        rbx,rbx  
  213. 00007FF61B608A28  je          Nexus::SerializeObjectToMemBuff+2D2h (07FF61B608A32h)  
  214. 00007FF61B608A2A  mov         rcx,r14  
  215. 00007FF61B608A2D  call        Nexus::InterlockedInc (07FF61889D242h)  
  216. 00007FF61B608A32  mov         dword ptr [rbp-69h],2  
  217. 00007FF61B608A39  lea         rax,[Nexus::CSmartPtrRef<Nexus::I_MemoryBufferExt>::`vftable' (07FF61CB36100h)]  
  218. 00007FF61B608A40  mov         qword ptr [r15],rax  
  219. 00007FF61B608A43  mov         qword ptr [r15+8],rbx  
  220. 00007FF61B608A47  test        rbx,rbx  
  221. 00007FF61B608A4A  je          Nexus::SerializeObjectToMemBuff+2F4h (07FF61B608A54h)  
  222. 00007FF61B608A4C  mov         rcx,r14  
  223. 00007FF61B608A4F  call        Nexus::InterlockedInc (07FF61889D242h)  
  224. 00007FF61B608A54  mov         dword ptr [rbp-69h],3  
  225. 00007FF61B608A5B  test        rbx,rbx  
  226. 00007FF61B608A5E  je          Nexus::SerializeObjectToMemBuff+33Ah (07FF61B608A9Ah)  
  227. 00007FF61B608A60  mov         rcx,r14  
  228. 00007FF61B608A63  call        Nexus::InterlockedDec (07FF61884B168h)  
  229. 00007FF61B608A68  mov         r14d,eax  
  230. 00007FF61B608A6B  test        eax,eax  
  231. 00007FF61B608A6D  jns         Nexus::SerializeObjectToMemBuff+328h (07FF61B608A88h)  
  232. 00007FF61B608A6F  mov         r8d,52h  
  233. 00007FF61B608A75  lea         rdx,[string "O:\\Projects\\code\\nexus\\common\\r@"... (07FF61CB35E10h)]  
  234. 00007FF61B608A7C  lea         rcx,[string "(static_cast<int32>(newCnt) >= @"... (07FF61CB35E48h)]  
  235. 00007FF61B608A83  call        Nexus::SysAssertExpr (07FF6188867D1h)  
  236. 00007FF61B608A88  test        r14d,r14d  
  237. 00007FF61B608A8B  jne         Nexus::SerializeObjectToMemBuff+33Ah (07FF61B608A9Ah)  
  238. 00007FF61B608A8D  mov         rax,qword ptr [rbx]  
  239. 00007FF61B608A90  lea         edx,[r14+1]  
  240. 00007FF61B608A94  mov         rcx,rbx  
  241. 00007FF61B608A97  call        qword ptr [rax]  
  242. 00007FF61B608A99  nop  
  243. 00007FF61B608A9A  test        rdi,rdi  
  244. 00007FF61B608A9D  je          Nexus::SerializeObjectToMemBuff+356h (07FF61B608AB6h)  
  245. 00007FF61B608A9F  dec         dword ptr [rdi+8]  
  246. 00007FF61B608AA2  cmp         dword ptr [rdi+8],0  
  247. 00007FF61B608AA6  jg          Nexus::SerializeObjectToMemBuff+356h (07FF61B608AB6h)  
  248. 00007FF61B608AA8  mov         rax,qword ptr [rdi]  
  249. 00007FF61B608AAB  mov         edx,1  
  250. 00007FF61B608AB0  mov         rcx,rdi  
  251. 00007FF61B608AB3  call        qword ptr [rax]  
  252. 00007FF61B608AB5  nop  
  253. 00007FF61B608AB6  test        rsi,rsi  
  254. 00007FF61B608AB9  je          Nexus::SerializeObjectToMemBuff+372h (07FF61B608AD2h)  
  255. 00007FF61B608ABB  dec         dword ptr [rsi+8]  
  256. 00007FF61B608ABE  cmp         dword ptr [rsi+8],0  
  257. 00007FF61B608AC2  jg          Nexus::SerializeObjectToMemBuff+372h (07FF61B608AD2h)  
  258. 00007FF61B608AC4  mov         rax,qword ptr [rsi]  
  259. 00007FF61B608AC7  mov         edx,1  
  260. 00007FF61B608ACC  mov         rcx,rsi  
  261. 00007FF61B608ACF  call        qword ptr [rax]  
  262. 00007FF61B608AD1  nop  
  263. 00007FF61B608AD2  lea         rax,[Nexus::CSmartPtrRef<Nexus::Persistence::COutputNode>::`vftable' (07FF61CB39898h)]  
  264. 00007FF61B608AD9  mov         qword ptr [rbp-61h],rax  
  265. 00007FF61B608ADD  mov         rcx,qword ptr [rbp-59h]  
  266. 00007FF61B608AE1  test        rcx,rcx  
  267. 00007FF61B608AE4  je          Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)  
  268. 00007FF61B608AE6  dec         dword ptr [rcx+8]  
  269. 00007FF61B608AE9  cmp         dword ptr [rcx+8],0  
  270. 00007FF61B608AED  jg          Nexus::SerializeObjectToMemBuff+39Ah (07FF61B608AFAh)  
  271. 00007FF61B608AEF  mov         r8,qword ptr [rcx]  
  272. 00007FF61B608AF2  mov         edx,1  
  273. 00007FF61B608AF7  call        qword ptr [r8]  
  274. 00007FF61B608AFA  mov         rax,r15  
  275. 00007FF61B608AFD  mov         rcx,qword ptr [rbp+1Fh]  
  276. 00007FF61B608B01  xor         rcx,rsp  
  277. 00007FF61B608B04  call        __security_check_cookie (07FF61886A31Ah)  
  278. 00007FF61B608B09  mov         rbx,qword ptr [rsp+100h]  
  279. 00007FF61B608B11  add         rsp,0B0h  
  280. 00007FF61B608B18  pop         r15  
  281. 00007FF61B608B1A  pop         r14  
  282. 00007FF61B608B1C  pop         r13  
  283. 00007FF61B608B1E  pop         r12  
  284. 00007FF61B608B20  pop         rdi  
  285. 00007FF61B608B21  pop         rsi  
  286. 00007FF61B608B22  pop         rbp  
  287. 00007FF61B608B23  ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement