1.可移植性(portable )是由于任何機(jī)器(Intel 386 、MipS 、Alpha 、Power PC 等等)上的 NT 都可以使用相同的可以執(zhí)行檔格式。當(dāng)然啦,CPU 指令的二進(jìn)制編碼是完全不同的,你不可能把一個(gè)在 MIPS 機(jī)器編譯好的Portable Executable文件拿到 Intel 系統(tǒng)來(lái)跑。重要的是,程序加載器以及程序開(kāi)發(fā)工具不需
要針對(duì)每一個(gè)新的操作系統(tǒng)重寫(xiě)。
2.win32用來(lái)放置模塊的碼、資料、資源、import tables 、export tables 、以
及其它東西的內(nèi)存,是位于一塊連續(xù)的線性地址空間中。所有你需要知道的,就是這
個(gè)地址在哪里。然后你就可以輕輕松松根據(jù)儲(chǔ)存在這個(gè) "image"中的指針,找
到模塊的每一樣資料。
3.相對(duì)虛擬地址(Relative Virtual
Address ,RVA )。PE 文件中的許多字段內(nèi)容都是以 RVA 表示。一個(gè) RVA 是某一資
料項(xiàng)的 offset (偏移)值 -- 從文件被映像進(jìn)來(lái)的起點(diǎn)算起。
由此想到從前看過(guò)的許多相關(guān)Portable Executable文件解析數(shù)據(jù)提取資料,總是對(duì)其中的減來(lái)減去莫名其妙
4. 磁盤(pán)中的可執(zhí)行文件格式非常類似內(nèi)存中的模塊。因此 Windows 加載器無(wú)須非常辛苦地工作就能根據(jù)磁盤(pán)文件產(chǎn)生一個(gè)
行程。加載器使用 Win32 內(nèi)存映像檔,把適當(dāng)?shù)?Portable Executable文件加載程序的地址空間中。
如果用建筑學(xué)的方式來(lái)說(shuō),Portable Executable 檔就像是一棟預(yù)先制造組合配件的房屋:配件不多,每一個(gè)配件可以啪答一聲就定位 -- 只要經(jīng)過(guò)一些些努力。并且,就像組合屋很容易接上電路和水管一樣,Portable Executable檔也很容易與外界產(chǎn)生關(guān)系
現(xiàn)在已豁然開(kāi)朗
5.Portable Executable文件格式如下,和以往看過(guò)資料相比,這個(gè)是倒著的,只不過(guò)都是后人整理的習(xí)慣都,將
結(jié)構(gòu)倒置,不過(guò)文件的頭還確實(shí)放在了下面然后向上線性排列
【 微信掃一掃 】