一 應用程序啓動方式
鏈接器選擇CRTT啓動函數,進而選擇啓動函數。
四個啓動函數
連接時的選擇方式:
以VC爲例
搜索 鏈接選項 /SUBSYSTEM: 如果是Console, 且非 unicode,則調用 _mainnCRTStartup,其中會調用 main。 如果是 WINDOWS,且非 unicode,則調用 _WinMainCRTStartup。 Unicode版本則對應調用w開頭的。
CRTstartup函數的具體職能如下:
• 檢索指向新進程的完整命令行的指針。
• 檢索指向新進程的環境變量的指針。
• 對C / C + +運行期的全局變量進行初始化。如果包含了S t d L i b . h 文件,代碼就能訪問這些變量。表4 - 1 列出了這些變量。
• 對C 運行期內存單元分配函數(m a l l o c 和c a l l o c )和其他低層輸入/輸出例程使用的內存棧進行初始化。
• 爲所有全局和靜態C + +類對象調用構造函數。
二 應用程序句柄和模塊句柄
G e t M o d u l e H a n d l e (LPSTR lpszModuleName)
0x04000000
應用程序句柄實際是系統將可執行文件的映象加載到進程的地址空間時使用的基本地址空間。
當參數爲NULL時候,返回應用程序句柄。否則,去查找響應的DLL或者進程的名字,返回其地址。
三
四 進程的環境變量
DWORD GetEnvironmentVariable( PCTSTR pszName, PTSTR pszValue, DWORD cchValue);