真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PE格式總覽-創(chuàng)新互聯(lián)

1.DOS MZ header 和 DOS Stub:PE格式總覽

如果在DOS下執(zhí)行PE格式文件就會(huì)執(zhí)行后面的DOS Stub,顯示字符串"This program cannot run in DOS mode",如果在Window下執(zhí)行PE格式文件,PE加載器就會(huì)根據(jù)DOS MZ header中的最后一個(gè)域 e_lfnew跳過(guò)DOS Stub直接轉(zhuǎn)到PE Header , DOS MZ header 和 DOS Stub的貢獻(xiàn)僅此而已。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了惠水免費(fèi)建站歡迎大家使用!

2. PE Header:

當(dāng)加載器跳到PE Header后,根據(jù)里面的各個(gè)域首先檢查這是不是有效的PE文件格式,能否在當(dāng)前的CPU架構(gòu)下運(yùn)行,優(yōu)先加載基址是多少,一共有幾個(gè)節(jié)(section),這是一個(gè)EXE文件還是DLL文件等總體信息,有了這些總體信息之后加載器就會(huì)跳到下面的Section table。

3.Section table:

有了上面從PE Header獲得的總體信息后,加載器并不能準(zhǔn)確的加載文件,因?yàn)橐獪?zhǔn)確的加載文件,加載器還需要一些關(guān)于每一節(jié)的更具體的信息,比如:每一節(jié)在磁盤文件上的起始位置、大小,應(yīng)該被加載的線性地址空間的哪一部分,這一節(jié)是代碼還是數(shù)據(jù),讀寫屬性如何等等。所有這些信息都保存在Section table里面,Section table是一個(gè)結(jié)構(gòu)數(shù)組,數(shù)組里面的每一個(gè)結(jié)構(gòu)對(duì)應(yīng)PE文件中的一個(gè)節(jié)。PE加載器就會(huì)遍歷這個(gè)結(jié)構(gòu)數(shù)組把PE文件的每一節(jié)準(zhǔn)確的加載到線性地址空間。(這里還要注意兩點(diǎn):一是PE加載器把PE文件的每一節(jié)加載到線性地址空間并不是說(shuō)把磁盤上的文件調(diào)入物理內(nèi)存;而只是為它分配線性地址空間,分配線性地址空間意味著申請(qǐng)本進(jìn)程需要的頁(yè)表,并把相應(yīng)的信息添入頁(yè)表中。線性地址空間也可以看作是一種資源,它是通過(guò)頁(yè)表來(lái)體現(xiàn)的,當(dāng)一個(gè)頁(yè)表被添入相應(yīng)的信息被占用之后那么這個(gè)頁(yè)表對(duì)應(yīng)的那塊線性地址空間也就被分配出去了。需要注意的另一點(diǎn)是PE加載器對(duì)每一節(jié)采用文件映射的方式把相應(yīng)的磁盤文件映射到內(nèi)存,而不是把整個(gè)PE文件采用文件映射的方法把磁盤文件映射到內(nèi)存。更具體的解釋我會(huì)在“Windows 內(nèi)存管理”中提到。)

4.Sections:

PE文件最后的部分就是各個(gè)節(jié)了,比如.text , .data , .idata等等,各種節(jié)的作用后面會(huì)有一個(gè)簡(jiǎn)要介紹。

思考一下:既然加載器不一定把程序加載到PE頭中指定的優(yōu)先加載基址,那么如果在沒(méi)有加載到PE頭中指定的優(yōu)先加載基址的情況下,指令中的地址是不是都要依次修改呢?首先我們要明確的一點(diǎn)是程序指令中的地址分兩大類,其中一類是在編譯過(guò)程就可以確定的,這類地址采用的是相對(duì)虛擬地址(RVA),所以即使程序沒(méi)有被加載到希望的基址這些地址也無(wú)需修改。另一類地址是編譯過(guò)程和連接過(guò)程都無(wú)法確定的,比如那些引用外部庫(kù)的函數(shù)地址,因?yàn)橥獠繋?kù)之后在被加載器加載后里面的函數(shù)地址才能確定下來(lái),所以程序中的這類地址要在程序被加載后進(jìn)行修改。那么編譯器和連接器對(duì)這類無(wú)法確定的地址是如何處理的呢?加載器又是根據(jù)什么如何來(lái)對(duì)它們進(jìn)行修改的呢?個(gè)人感覺PE文件格式學(xué)習(xí)中這一部分內(nèi)容有些繁雜,所以希望大家讀后面各節(jié)的時(shí)候最好時(shí)常思考一下這兩個(gè)問(wèn)題。從下一節(jié)開始我們將對(duì)PE文件的各個(gè)部分作更為詳盡的講解。重點(diǎn)部分會(huì)放在對(duì)上面兩個(gè)問(wèn)題的解決上。

不登高山,怎知天高;不臨深溪,焉知地厚!站在堅(jiān)實(shí)的土地上,做著生命中最真實(shí)的事情;像一棵挺拔的大樹,認(rèn)可自己的命運(yùn)并敢于迎接屬于這一方天空的風(fēng)風(fēng)雨雨。
文章題目:PE格式總覽-創(chuàng)新互聯(lián)
URL標(biāo)題:http://weahome.cn/article/depiio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部