win32程序運行原理
cpu的保護模式和windows系統
80386處理器有3種工作模式:實模式、保護模式、虛擬86模式。實模式和虛擬86模式是爲了8086處理器兼容而設置的。保護模
式是80386處理器的主要工作模式,保護主要是對存儲器的保護,windows操作系統就運行在此模式下。
CPU在保護模式下支持虛擬存儲,即虛擬內存。
進程的地址空間:分爲用戶空間和系統空間。用戶空間部分是進程的私有地址空間,進程不能以任何方式讀、寫其他進程此部分
空間中的數據,大量的進程的數據都被保存在這塊空間中。系統空間部分放置操作系統的代碼,包括內核代碼、設備驅動代碼、
設備I/O緩衝區等。系統空間部分在所有的進程中是共享的。
內核模式和用戶模式:80386處理器共定義了4種(0~3)特權級別,或者稱爲環。其中, 0級是最高級(特權級), 3級是最低級(用
戶級)。
系統中的每個進程都有自己的4GB私有地址空間,但是,內核模式下的系統和設備驅動程序共用一塊虛擬地址空間。
進程
組成Win32進程的兩個部分:
1. 進程內核對象。操作對象使用此內核對象來管理該進程,這個內核對象也是操作系統存放進程統計信息的地方。
2. 私有的虛擬地址空間。此地址空間包含了所有可執行的或者是DLL模塊的代碼的數據,它也是程序動態申請內存的地方,比如
線程堆棧和進程堆。
應用程序的啓動過程:
控制檯應用程序的入口函數將會是main(),操作系統事實上並不是真的調用main函數,而是去調用C/C++運行期啓動函數,此函
數會初始化C/C++運行期庫。
創建進程:
當一個線程調用CreateProcess函數的時候,系統會創建一個進程內核對象,其使用計數初始化爲1。
創建一個新的進程將促使系統創建一個進程內核對象和一個線程內核對象。
當一個進程內核對象創建以後,系統會爲這個內核對象分派一個唯一的ID號。
進程控制:
獲取進程信息:使用ToolHelp函數,需要用到頭文件<tlhelp32.h>。
終止當前進程:ExitProcess函數或者TerminateProcess函數。