建構函式與new的彙編實現

findumars發表於2013-09-15

this指標,通常是通過ecx傳遞;gcc是通過堆疊傳遞的,是最後一個被壓棧。
傳遞this指標是為了訪問成員變數。除了虛擬函式,所有成員函式被編譯之後都是全域性函式。
mov eax,[ecx] ; 將第一個成員賦給eax
add eax,[ecx+4] ; 再用第一個成員函式的值加上4,可能就是第二個成員的值

new操作符:
編譯器將new與delete轉換成普通函式。new有以下特點:
1. 只有一個引數(要分配的位元組數)
2. 返回值會賦給this指標
3. 會判斷返回值是否為空

delete操作符:
與大多數函式差不多,但是最終會呼叫Free這樣的函式。

建構函式:
在分配記憶體成功以後,才會被呼叫。一般緊跟著呼叫建構函式後是分配失敗的跳轉程式碼,this復位0

啟動函式:
在連結的時候由CRT\SRC\crt***.c檔案進行連結,由它當中的程式碼呼叫main或者WinMain函式。
靜態連結:crt0.c
動態連結:crtexe.c
控制檯:wincmdln.c

相關文章