從源文件到可執(zhí)行文件
1.計(jì)算機(jī)只能運(yùn)行本地代碼:CPU能直接解析并運(yùn)行的不是源代碼而是本地代碼的程序。作為計(jì)算機(jī)大腦的CPU也只能解釋已經(jīng)轉(zhuǎn)換成本地代碼的程序內(nèi)容。
2.本地代碼的內(nèi)容:用記事本打開由代碼清單的內(nèi)容轉(zhuǎn)換成本地代碼得到的EXE文件。每個(gè)數(shù)值都表示某一個(gè)命令或數(shù)據(jù),這里我們用的是原始的dump程序。
3.編譯器負(fù)責(zé)轉(zhuǎn)換源代碼:能夠把高級(jí)語言編寫的源代碼轉(zhuǎn)換成本地代碼的程序稱為編譯器。。編譯器首先讀入代碼內(nèi)容,然后再把源代碼轉(zhuǎn)換成本地代碼。交叉編譯器,它生成的是和運(yùn)行環(huán)境中的CPU不同的CPU所使用的本地代碼。
4.僅靠編譯是無法得到可執(zhí)行文件的:編譯器轉(zhuǎn)換為源代碼后,就會(huì)生成本地代碼,但是本地代碼是無法直接運(yùn)行的。,編譯之后還要進(jìn)行“鏈接”處理。把多個(gè)目標(biāo)文件結(jié)合,生成一個(gè)EXE文件的處理就是鏈接,運(yùn)行鏈接的程序就稱為鏈接器
5.啟動(dòng)及庫文件:庫文件指的是把多個(gè)目標(biāo)文件集中成保存到一個(gè)文件中的形式。鏈接器指定庫文件后,就會(huì)從中把多個(gè)目標(biāo)文件抽取出來,并同其他文件結(jié)合生成EXE文件。
6.DLL文件及導(dǎo)入庫:Windows中,API的目標(biāo)文件,并不是存儲(chǔ)在通常的庫文件中,而是儲(chǔ)存在名為DLL文件的特殊庫文件中。存儲(chǔ)目標(biāo)文件的實(shí)體,并直接和EXE文件結(jié)合的庫文件形式稱為靜態(tài)庫鏈接。
7.可執(zhí)行文件運(yùn)行時(shí)的必要條件:在程序運(yùn)行時(shí),虛擬的內(nèi)存地址會(huì)轉(zhuǎn)換成實(shí)際的內(nèi)存地址。鏈接器會(huì)在EXE文件開頭,追加轉(zhuǎn)換內(nèi)存地址所需的必要信息,這個(gè)信息稱為再配置信息
8.程序加載時(shí)會(huì)生成棧和堆。棧和堆的相似之處在于,他們的內(nèi)存空間都是在程序運(yùn)行時(shí)得到申請(qǐng)分配的。根據(jù)編程語言的不同,對(duì)堆用的內(nèi)存空間進(jìn)行申請(qǐng)分配和釋放的編寫方法也是多種多樣的。

浙公網(wǎng)安備 33010602011771號(hào)