C++中new和delete的背後
阿新 • • 發佈:2018-12-27
NewTest!wmain:
00aa1020 56 push esi
00aa1021 6a04 push 4
00aa1023 e8b4030000 call NewTest!operator new (00aa13dc) //呼叫operator new分配大小為4位元組的空間
00aa1028 83c404 add esp,4
00aa102b 85c0 test eax,eax
00aa102d 740a je NewTest!wmain+0x19 (00aa1039)
00aa102f c7005421aa00 mov dword ptr [eax],offset NewTest!B::`vftable' (00aa2154) //將虛表地址寫入物件地址的頭4個位元組(虛表指標)
00aa1035 8bf0 mov esi,eax
00aa1037 eb02 jmp NewTest!wmain+0x1b (00aa103b)
00aa1039 33f6 xor esi,esi
00aa103b 8b06 mov eax,dword ptr [esi]
00aa103d 8b10 mov edx,dword ptr [eax]
00aa103f 8bce mov ecx,esi
00aa1041 ffd2 call edx //呼叫虛表內的第一個函式print
00aa1043 8b06 mov eax,dword ptr [esi]
00aa1045 8b5004 mov edx,dword ptr [eax+4]
00aa1048 6a01 push 1
00aa104a 8bce mov ecx,esi
00aa104c ffd2 call edx //呼叫虛表內的第二個函式(解構函式)
00aa104e 33c0 xor eax,eax
00aa1050 5e pop esi
00aa1051 c3 ret
00aa1052 cc int 3