日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Windows Pe 第三章 PE头文件(中)

發布時間:2025/6/17 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows Pe 第三章 PE头文件(中) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 這一章的上半部分大體介紹了下PE文件頭,下半部分是詳細介紹里面的內容,這一章一定要多讀幾遍,好好記記基礎概念和知識,方便之后的學習。

簡單回憶一下:


3.4 ?PE文件頭部解析

3.4.1 DOS MZ IMAGE_DOS_HEADER

?

?

?

? ? ? DOS MZ頭的下面是DOSS Stub。整個DOSS Stub是一個字節塊,其內容隨著鏈接時使用的連接器不同而不同,PE中沒有與之對應的相關結構。

3.4.2 PE頭標識Signature

? ? 緊跟在DOS Stub后面的是PE頭標識Signature。與大部分分支文件格式的頭部結構一樣,PE頭部信息中有一個四字節的標識,該標識位于指針IMAGE_DOS_HEANDER.e_lfanew指向的位置。其內容固定,對應于ASCII碼的字符串”PE\0\0”

3.4.3 ?標準PEIMAGE_FILE_HANDER

? ? 標準PEIMAGE_FILE_HEADER緊跟在PE頭標識后,即位于IMAGE_DOS_HEADERe_lfanew+4的位置。由此位置開始的20個字節為數據結構標準PEIMAGE_FILE_HEANDER的內容。該結構在微軟的官方文檔中被稱為標準通用對象文件格式(Common Object File Format,COFF)頭,它記錄了PE文件的全局屬性,該PE文件運行的平臺、PE文件類型(是EXE還是DLL文件)、文件中存在的節的總數,其詳細定義如下:

?


?

?

? ??該結構常用于判斷PE文件是EXE還是DLL類型,不但可以通過該結構得到PE文件中節的數量,還可以當成對接信息進行遍歷操作時的循環次數。

3.4.4 ?擴展PEIMAGE_OPTIONAL_HEADER32

? ? 盡管從名字上看好像該部分數據是可選的,但在PE文件結構中,它卻有著比標準PE頭更多的內容。詳細定義如下:

?

?

?

? ? ?文件執行時的入口地址、文件被操作系統裝入內存后的默認基地址,以及節在磁盤和內存中的對齊單位等信息均可以在此結構中找到。對于該結構中的某些數值的隨意改動可能造成對PE文件的加載或運行失敗。

3.4.5 PEIMAGE_NT_HEADERS

? ??這個結構是廣義上的PE頭,在標準的PE文件中器大小為456個字節。它是3.4.2節、3.4.3節和3.3.4節中提到的三個數據結構的組合,即

IMAGE_NT_HEADERS=4個字節的PE標識 ?+ ??IMAGE_FILE_HEADER +IMAGE_OPTIONAL_HEADER32

?

該結構定義如下(匯編)

IMAGE_NT_HEADERS STRUCT

??Signature DWORD ? ??;0000h ??????????????????????-PE文件標識,”PE\0\0”

??FileHeader IMAGE_FILE_HEADER <> ;0004h ????????????-PE標準頭

??OptionalHeader IMAGE_OPTIONAL_HEADER32<>;0018h ?-PE擴展頭

IMAGE_NT_HEADERS ENDS

3.4.6 ?數據目錄項IMAGE_DATA_DIRECTORY

? ? IMAGE_OPTIONAL_HEADER32(擴展PE)結構的最后一個字段位DataDirectory

? ? 該字段定義了PE文件中出現的所有不同類型的目錄信息。如前所述,應用程序中的數據被按照用途分成很多種類,如導入表、導出表、資源、重定位表等。在內存中,這些數據被操作系統以頁位單位組織起來,并賦以不同的訪問屬性;在文件中,這些數據也同樣被組織起來,按照不同的類別分別放在文件的指定位置。該結構就是用來描述這些不同類別的數據在文件(和內存)中的位置及大小的,因為這個字段比較重要。

? ? 從Windows NT 3.1 操作系統開始到現在,該數據目錄中定義的數據類型一直是16種。PE中使用了一種稱作“數據目錄項IMAGE_DATA_DIRECTORY”的數據結構來定義每種數據。該結構只有兩個字段,結構具體定義如下:

IMAGE_DATA_DIRECTORY STRUCT

??VirtualAddress DWORD ? ;000h - 數據其實RVA

??isize DWORD ? ????????;004h - 數據塊的長度

IMAGE_DATA_DIRECTORY ENDS

? ? 兩個字段依次為VirtualAddress isize。如圖3-11所示,總的數據目錄一共由16個相同的IMAGE_DATA_DIRECTORY結構連續排列在一起組成。

?

? ? 這16個元組的沒組每一項均代表PE中的某一個類型的數據,各數據類型詳見表3-1?

?

?

? ? ??如果想在PE文件中尋找特定類型的數據,就需要從該結構開始。比如,要想查看PE中都調用了哪些動態間接庫的函數,則需要從數據目錄表的第2個元素的IMAGE_DATA_DIRECTORY結構獲取導入表在文件中的起始位置和大小,然后再根據VirtualAddress_1地址指向的位置找到導入表相關的字節碼。這種信息組織方式正式本章開始的“頭部+身體”的數據組織方式。

??下面是這16個數據目錄項依次展開后的新結構:

????????

? ? ? ??

3.4.7 ?節表項IMAGE_SECTION_HEADER

? ? PEIMAGE_NT_HEADERS后面緊跟著節表。它由許多節表項(IMAGE_SECTION_HEADER)組成,每個節表項紀錄了PE中與某個特定節有關的信息,如節的屬性、節的大小、在文件和內存中的起始位置等。節表中節的數量有字段IMAGE_FILE_HEADER.NumberOfSections來定義。

節表項的數據結構詳細定義如下:

?


? ? ?節表后面就是節的內容。截至節表,PE文件頭設計的所有數據結構已經全部介紹完畢。接下來,集中對以上所有數據結構中每個字段進行詳細介紹。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Windows Pe 第三章 PE头文件(中)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。