大體來講,發生了這麼幾步:c++
一、Shell(Explorer.exe )調用CreateProcess函數激活exe程序
二、系統建立一個進程內核對象,引用計數置爲1
三、系統爲進程建立一個4GB的進程虛擬地址空間
四、PE裝載器把exe的代碼映射到地址空間,並查找ImportTable引入相關
的動態連接庫(DLLs )
五、系統爲進程建立一個主線程,線程獲得CPU後,把CS:IP指向.text節中
的程序進入點(OEP) ,此處是一條JMP指令,它跳到XXXCRTStartup
函數處執行
六、這裏完成c/c++運行期庫的一些初始化設置,包括c++ 構造函數的調用
全局變量,靜態變量的初始化
七、調用WinMain/main函數,進入主函數
八、註冊窗口類,建立窗口,顯示窗口,更新窗口,進入消息循環
九、窗口關閉,循環退出,返回到C/C++ 運行期庫
十、完成一些清理工做
11 、最後是ExitProcess退出進程windows
詳細過程參考:windows可執行程序的執行過程函數