欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

包含go語言pe格式解析的詞條

程序編程里的PE頭是什么

 Windows操作系統(tǒng)家族增加的Windows NT為開發(fā)環(huán)境和應(yīng)用程序本身帶來了很大的改變,這之中一個最為重大的當(dāng)屬PE文件格式了。新的PE文件格式主要來自于UNIX操作系統(tǒng)所通用的COFF 規(guī)范,同時為了保證與舊版本MS-DOS及Windows操作系統(tǒng)的兼容,PE文件格式也保留了MS-DOS中那熟悉的MZ頭部。

創(chuàng)新互聯(lián)公司主營巨野網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app開發(fā)定制,巨野h5重慶小程序開發(fā)公司搭建,巨野網(wǎng)站營銷推廣歡迎巨野等地區(qū)企業(yè)咨詢

在Windows下,程序和庫都是PE(Portable Excutable)格式文件,可以被內(nèi)存映射到一個進程中。

加載一個Windows可執(zhí)行程序或者DLL與加載一個動態(tài)鏈接的ELF程序相似,盡管在Windows下動態(tài)鏈接器是操作系統(tǒng)內(nèi)核的一部分。

PE文件可以包含有重定位項。通常一個可執(zhí)行程序不會包含可重定位項,因此必須將它們映射到在鏈接時確定的地址上。DLL都包含有重定位項,并且在它們被鏈接進來的地址空間無效的時候都會被重定位(微軟將運行時重定位稱為rebasing)。

所有的PE文件,包括可執(zhí)行程序和DLL,都有一個入口點,在DLL被加載、被卸載,以及每一次進程的線程attach或deattach這個DLL的時候,加載器都會調(diào)用DLL的入口點(每一次加載器都會傳遞一個參數(shù)說明調(diào)用原因)。這就可以提供類似ELF的.init和.fini區(qū)段的鉤子代碼來實現(xiàn)初始化和終結(jié)操作。

簡而言之,PE頭就是windows中特有的可執(zhí)行文件頭.

PE文件是什么?是EXE文件嗎?

你能把問題說 具體點嗎?EXE文件是 文件名后綴是 .exe 結(jié)尾的 你所說的PE文件 是不是 文件名后綴以 .pe結(jié)尾的嗎?

PE格式,是微軟Win32環(huán)境可執(zhí)行文件的標(biāo)準(zhǔn)格式(所謂可執(zhí)行文件不光是.EXE文件,還包括.DLL/.VXD/.SYS/.VDM等)。PE 就是Portable Executable 的縮寫,PE文件衍生于早期建立在VAX/VMS上的COFF(Common Object File Format)文件格式。Portable 是指對于不同的Windows版本和不同的CPU類型上PE文件的格式是一樣的,當(dāng)然CPU不一樣了,CPU指令的二進制編碼是不一樣的。只是文件中各種東西的布局是一樣的。 PE文件使用的是一個平面地址空間,所有代碼和數(shù)據(jù)都合并在一起,組成一個很大的結(jié)構(gòu)。主要有: .text 是在編譯或匯編結(jié)束時產(chǎn)生的一種塊,它的內(nèi)容全是指令代碼 .rdata 是運行期只讀數(shù)據(jù) .data 是初始化的數(shù)據(jù)塊 .idata 包含其它外來DLL的函數(shù)及數(shù)據(jù)信息,即輸入表 .rsrc 包含模塊的全部資源:如圖標(biāo)、菜單、位圖等

還有種是PE系統(tǒng) 是 簡化了的 windows 系統(tǒng)

pe文件的基本概念

關(guān)于PE文件最重要的是,磁盤上的可執(zhí)行文件和它被WINDOWS調(diào)入內(nèi)存之后是非常相像的。WINDOWS載入器不必為從磁盤上載入一個文件而辛辛苦苦創(chuàng)建一個進程。載入器使用內(nèi)存映射文件機制來把文件中相似的塊映射到虛擬空間中。用一個構(gòu)造式的分析模型,一個PE文件類似一個預(yù)制的屋子。它本質(zhì)上開始于這樣一個空間,這個空間后面有幾個把它連到其余空間的機件(就是說,把它聯(lián)系到它的DLL上,等等)。這對PE格式的DLL是一樣容易應(yīng)用的。一旦這個模塊被載入,Windows 就可以有效的把它和其它內(nèi)存映射文件同等對待。

和16位Windows不同的是。16位NE文件的載入器讀取文件的一部分并且創(chuàng)建完全不同的數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中表示模塊。當(dāng)數(shù)據(jù)段或者代碼段需要載入時,載入器必須從全局堆中新申請一個段,從可執(zhí)行文件中找出生鮮數(shù)據(jù),轉(zhuǎn)到這個位置,讀入這些生鮮數(shù)據(jù),并且要進行適當(dāng)?shù)男拚3硕猓總€16位模塊都有責(zé)任記住當(dāng)前它使用的所有段選擇器,而不管這個段是否被丟棄了,如此等等。

對Win32來講,模塊所使用的所有代碼,數(shù)據(jù),資源,導(dǎo)入表,和其它需要的模塊數(shù)據(jù)結(jié)構(gòu)都在一個連續(xù)的內(nèi)存塊中。在這種形勢下,你只需要知道載入器把可執(zhí)行文件映射到了什么地方。通過作為映像的一部分的指針,你可以很容易的找到這個模塊所有不同的塊。 另一個你需要知道的概念是相對虛擬地址(RVA)。PE文件中的許多域都用術(shù)語RVA來指定。一個RVA只是一些項目相對于文件映射到內(nèi)存的偏移。比如說,載入器把一個文件映射到虛擬地址0x10000開始的內(nèi)存塊。如果一個映像中的實際的表的首址是0x10464,那么它的RVA就是0x464。

(虛擬地址 0x10464)-(基地址 0x10000)=RVA 0x00464

為了把一個RVA轉(zhuǎn)化成一個有用的指針,只需要把RVA值加到模塊的基地址上即可。基地址是內(nèi)存映射EXE和DLL文件的首址,在Win32中這是一個很重要的概念。為了方便起見,WindowsNT 和 Windows9x用模塊的基地址作為這個模塊的實例句柄(HINSTANCE)。在Win32中,把模塊的基地址叫做HINSTANCE可能導(dǎo)致混淆,因為術(shù)語實例句柄來自16位Windows。一個程序在16位Windows中的每個拷貝得到它自己分開的數(shù)據(jù)段(和一個聯(lián)系起來的全局句柄)來把它和這個程序其它的拷貝分別開來,就形成了術(shù)語實例句柄。在Win32中,每個程序不必和其它程序區(qū)別開來,因為他們不共享相同的地址空間。術(shù)語INSTANCE仍然保持16位windows和32位Windows之間的連續(xù)性。在Win32中重要的是你可以對任何DLL調(diào)用GetModuleHandle()得到一個指針去訪問它的組件(譯注)。 如果 dllname 為 NULL,則得到執(zhí)行體自己的模塊句柄。這是非常有用的,如通常編譯器產(chǎn)生的啟動代碼將取得這個句柄并將它作為一個參數(shù)hInstance傳給WinMain !

你最終需要理解的PE文件的概念是塊(Section)。PE文件中的一個塊和NE文件中的一個段或者資源等價。塊可以包含代碼或者數(shù)據(jù)。和段不同的是,塊是內(nèi)存中連續(xù)的空間,而沒有尺寸限制。當(dāng)你的連接器和庫為你建立,并且包含對操作系統(tǒng)非常重要的信息的其它的數(shù)據(jù)塊時,這些塊包含你的程序直接聲明和使用的代碼或數(shù)據(jù)。在一些PE格式的描述中,塊也叫做對象。術(shù)語對象有如此多的涵義,以至于只能把代碼和數(shù)據(jù)叫做塊。

PE是什么文件呀

PE教程1: PE文件格式一覽

考慮到早期寫的PE教程1是自己所有教程中最糟糕的一篇,此番決心徹底重寫一篇以饗讀者。

PE 的意思就是 Portable Executable(可移植的執(zhí)行體)。它是 Win32環(huán)境自身所帶的執(zhí)行體文件格式。它的一些特性繼承自 Unix的 Coff (common object file format)文件格式。"portable executable"(可移植的執(zhí)行體)意味著此文件格式是跨win32平臺的 : 即使Windows運行在非Intel的CPU上,任何win32平臺的PE裝載器都能識別和使用該文件格式。當(dāng)然,移植到不同的CPU上PE執(zhí)行體必然得有一些改變。所有 win32執(zhí)行體 (除了VxD和16位的Dll)都使用PE文件格式,包括NT的內(nèi)核模式驅(qū)動程序(kernel mode drivers)。因而研究PE文件格式給了我們洞悉Windows結(jié)構(gòu)的良機。

本教程就讓我們?yōu)g覽一下 PE文件格式的概要。

DOS MZ header

DOS stub

PE header

Section table

Section 1

Section 2

Section ...

Section n

上圖是 PE文件結(jié)構(gòu)的總體層次分布。所有 PE文件(甚至32位的 DLLs) 必須以一個簡單的 DOS MZ header 開始。我們通常對此結(jié)構(gòu)沒有太大興趣。有了它,一旦程序在DOS下執(zhí)行,DOS就能識別出這是有效的執(zhí)行體,然后運行緊隨 MZ header 之后的 DOS stub。DOS stub實際上是個有效的 EXE,在不支持 PE文件格式的操作系統(tǒng)中,它將簡單顯示一個錯誤提示,類似于字符串 "This program requires Windows" 或者程序員可根據(jù)自己的意圖實現(xiàn)完整的 DOS代碼。通常我們也不對 DOS stub 太感興趣: 因為大多數(shù)情況下它是由匯編器/編譯器自動生成。通常,它簡單調(diào)用中斷21h服務(wù)9來顯示字符串"This program cannot run in DOS mode"。

緊接著 DOS stub 的是 PE header。 PE header 是PE相關(guān)結(jié)構(gòu) IMAGE_NT_HEADERS 的簡稱,其中包含了許多PE裝載器用到的重要域。當(dāng)我們更加深入研究PE文件格式后,將對這些重要域耳目能詳。執(zhí)行體在支持PE文件結(jié)構(gòu)的操作系統(tǒng)中執(zhí)行時,PE裝載器將從 DOS MZ header 中找到 PE header 的起始偏移量。因而跳過了 DOS stub 直接定位到真正的文件頭 PE header。

PE文件的真正內(nèi)容劃分成塊,稱之為sections(節(jié))。每節(jié)是一塊擁有共同屬性的數(shù)據(jù),比如代碼/數(shù)據(jù)、讀/寫等。我們可以把PE文件想象成一邏輯磁盤,PE header 是磁盤的boot扇區(qū),而sections就是各種文件,每種文件自然就有不同屬性如只讀、系統(tǒng)、隱藏、文檔等等。 值得我們注意的是 ---- 節(jié)的劃分是基于各組數(shù)據(jù)的共同屬性: 而不是邏輯概念。重要的不是數(shù)據(jù)/代碼是如何使用的,如果PE文件中的數(shù)據(jù)/代碼擁有相同屬性,它們就能被歸入同一節(jié)中。不必關(guān)心節(jié)中類似于"data", "code"或其他的邏輯概念: 如果數(shù)據(jù)和代碼擁有相同屬性,它們就可以被歸入同一個節(jié)中。(譯者注:節(jié)名稱僅僅是個區(qū)別不同節(jié)的符號而已,類似"data", "code"的命名只為了便于識別,惟有節(jié)的屬性設(shè)置決定了節(jié)的特性和功能)如果某塊數(shù)據(jù)想付為只讀屬性,就可以將該塊數(shù)據(jù)放入置為只讀的節(jié)中,當(dāng)PE裝載器映射節(jié)內(nèi)容時,它會檢查相關(guān)節(jié)屬性并置對應(yīng)內(nèi)存塊為指定屬性。

如果我們將PE文件格式視為一邏輯磁盤,PE header是boot扇區(qū)而sections是各種文件,但我們?nèi)匀狈ψ銐蛐畔矶ㄎ淮疟P上的不同文件,譬如,什么是PE文件格式中等價于目錄的東東?別急,那就是 PE header 接下來的數(shù)組結(jié)構(gòu) section table(節(jié)表)。 每個結(jié)構(gòu)包含對應(yīng)節(jié)的屬性、文件偏移量、虛擬偏移量等。如果PE文件里有5個節(jié),那么此結(jié)構(gòu)數(shù)組內(nèi)就有5個成員。因此,我們便可以把節(jié)表視為邏輯磁盤中的根目錄,每個數(shù)組成員等價于根目錄中目錄項。

以上就是PE文件格式的物理分布,下面將總結(jié)一下裝載一PE文件的主要步驟:

當(dāng)PE文件被執(zhí)行,PE裝載器檢查 DOS MZ header 里的 PE header 偏移量。如果找到,則跳轉(zhuǎn)到 PE header。

PE裝載器檢查 PE header 的有效性。如果有效,就跳轉(zhuǎn)到PE header的尾部。

緊跟 PE header 的是節(jié)表。PE裝載器讀取其中的節(jié)信息,并采用文件映射方法將這些節(jié)映射到內(nèi)存,同時付上節(jié)表里指定的節(jié)屬性。

PE文件映射入內(nèi)存后,PE裝載器將處理PE文件中類似 import table(引入表)邏輯部分。

上述步驟是基于本人觀察后的簡述,顯然還有一些不夠精確的地方,但基本明晰了執(zhí)行體被處理的過程。

其它看這里~

pe文件結(jié)構(gòu)剖析,什么是pe文件?

PE文件格式

1.PE文件的含義

PE文件的意思是Portable Executable(可移植,可執(zhí)行),它是win32可執(zhí)行文件的標(biāo)準(zhǔn)格式.它的一些特性繼承unix的COFF文件格式,同時保留了與舊版MS-DOS和WINDOWS的兼容.其可移植可執(zhí)行意味著是跨win32平臺的.

2.PE文件的層次結(jié)構(gòu)

PE文件最前面緊隨DOS MZ文件頭的是一個DOS可執(zhí)行文件(Stub).這使得PE文件成為一個合法的MS-DOS可執(zhí)行文件.DOS MZ文件頭后面是一個32位的PE文件標(biāo)志0x50450000(IMAGE_NT_SIGNATURE),即PE00.接下來的是PE的映像文件頭,包含的信息有該程序的運行平臺,有多少個節(jié),文件鏈接的時間,文件的命名格式.后面還緊跟一個可選映像頭,包含PE文件的邏輯分布信息,程序加載信息,開始地址,保留的堆棧數(shù)量,數(shù)據(jù)段大小等.可選頭還有一個重要的域,稱為:數(shù)據(jù)目錄表"的數(shù)組,表的每一項都是指向某一節(jié)的指針.可選映像頭后面緊跟的是節(jié)表和節(jié).節(jié)通過節(jié)表來實現(xiàn)索引.實際上,節(jié)的內(nèi)容才是真正執(zhí)行的數(shù)據(jù)和程序.每一個節(jié)都有相關(guān)的標(biāo)志.每一個節(jié)會被一個或多個目錄表指向,目錄表可通過可選頭的"數(shù)據(jù)目錄表"的入口找到.就像輸出函數(shù)表或基址重定位表.也存在沒有目錄表指向的節(jié).

3.PE文件層次解釋

A.DOS STUB和DOS頭

DOS插樁程序在大多數(shù)情況下由匯編器/編譯器自動產(chǎn)生.通常它調(diào)用INT 21H服務(wù)9來顯示上述字符串.可以通過IMAGE_DOS_HEADER結(jié)構(gòu)來識別一個合法的DOS頭.這個結(jié)構(gòu)的頭兩個字節(jié)肯定是"MZ".可通過該結(jié)構(gòu)的e_lfanew成員來找到PE文件的開始標(biāo)志.MS-DOS頭部占據(jù)了PE文件的頭64個字節(jié).在微軟的WINNT.H中可以找到其內(nèi)容結(jié)構(gòu)的描述.

B.PE文件頭

在DOS STUB后是PE文件頭(PE header).PE文件頭是PE相關(guān)結(jié)構(gòu)IMGAE_NT_HEADERS的簡稱,即NT映像頭,存放PE整個文件信息發(fā)布的重要字段,包含了PE裝載器用到的重要域.執(zhí)行體在操作系統(tǒng)中執(zhí)行時,PE裝載器將從DOS MZ頭中找到PE頭文件的起始偏移量e_lfanew,從而跳過DOS STUB直接定位真正的PE文件.它由3部分組成:

(1)PE文件標(biāo)志(4H字節(jié))

PE文件標(biāo)志0x50450000即PE00,標(biāo)志著NT映像頭的開始,也是PE文件中與windows有關(guān)內(nèi)容的開始.

(2)映像文件(14H字節(jié))

是NT映像文件的主要部分,包含PE文件的基本信息

(3)可選映像頭

包含PE文件的邏輯分布信息.

C.節(jié)表

節(jié)表其實是緊跟NT映像文件的一個結(jié)構(gòu)數(shù)組.其成員數(shù)目由映像文件頭結(jié)構(gòu)NumberOFSectios域的值來決定.

D.節(jié)

PE文件的真正內(nèi)容劃分為塊,稱之為節(jié).節(jié)的劃分基于各組數(shù)據(jù)的共同屬性.惟有節(jié)的屬性設(shè)置決定了節(jié)的特性和功能.典型的windows NT應(yīng)用程序可以具有9個節(jié):.texr,.bss.rdata,.data,.rsrc,edata,idata,pdata,.debug

PE后綴是什么意思

PE(Portable Executable)格式,是微軟Win32環(huán)境可移植可執(zhí)行文件(如exe、dll、vxd、sys和vdm等)的標(biāo)準(zhǔn)文件格式。PE格式衍生于早期建立在VAX(R)VMS(R)上的COFF(Common Object File Format)文件格式。

分享名稱:包含go語言pe格式解析的詞條
當(dāng)前網(wǎng)址:http://chinadenli.net/article18/dsgdcgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化用戶體驗做網(wǎng)站企業(yè)網(wǎng)站制作營銷型網(wǎng)站建設(shè)標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)