日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

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

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

簡單回憶一下:


3.4 ?PE文件頭部解析

3.4.1 DOS MZ IMAGE_DOS_HEADER

?

?

?

? ? ? DOS MZ頭的下面是DOSS Stub。整個DOSS Stub是一個字節(jié)塊,其內(nèi)容隨著鏈接時使用的連接器不同而不同,PE中沒有與之對應(yīng)的相關(guān)結(jié)構(gòu)。

3.4.2 PE頭標識Signature

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

3.4.3 ?標準PEIMAGE_FILE_HANDER

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

?


?

?

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

3.4.4 ?擴展PEIMAGE_OPTIONAL_HEADER32

? ? 盡管從名字上看好像該部分數(shù)據(jù)是可選的,但在PE文件結(jié)構(gòu)中,它卻有著比標準PE頭更多的內(nèi)容。詳細定義如下:

?

?

?

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

3.4.5 PEIMAGE_NT_HEADERS

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

IMAGE_NT_HEADERS=4個字節(jié)的PE標識 ?+ ??IMAGE_FILE_HEADER +IMAGE_OPTIONAL_HEADER32

?

該結(jié)構(gòu)定義如下(匯編)

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 ?數(shù)據(jù)目錄項IMAGE_DATA_DIRECTORY

? ? IMAGE_OPTIONAL_HEADER32(擴展PE)結(jié)構(gòu)的最后一個字段位DataDirectory

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

? ? 從Windows NT 3.1 操作系統(tǒng)開始到現(xiàn)在,該數(shù)據(jù)目錄中定義的數(shù)據(jù)類型一直是16種。PE中使用了一種稱作“數(shù)據(jù)目錄項IMAGE_DATA_DIRECTORY”的數(shù)據(jù)結(jié)構(gòu)來定義每種數(shù)據(jù)。該結(jié)構(gòu)只有兩個字段,結(jié)構(gòu)具體定義如下:

IMAGE_DATA_DIRECTORY STRUCT

??VirtualAddress DWORD ? ;000h - 數(shù)據(jù)其實RVA

??isize DWORD ? ????????;004h - 數(shù)據(jù)塊的長度

IMAGE_DATA_DIRECTORY ENDS

? ? 兩個字段依次為VirtualAddress isize。如圖3-11所示,總的數(shù)據(jù)目錄一共由16個相同的IMAGE_DATA_DIRECTORY結(jié)構(gòu)連續(xù)排列在一起組成。

?

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

?

?

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

??下面是這16個數(shù)據(jù)目錄項依次展開后的新結(jié)構(gòu):

????????

? ? ? ??

3.4.7 ?節(jié)表項IMAGE_SECTION_HEADER

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

節(jié)表項的數(shù)據(jù)結(jié)構(gòu)詳細定義如下:

?


? ? ?節(jié)表后面就是節(jié)的內(nèi)容。截至節(jié)表,PE文件頭設(shè)計的所有數(shù)據(jù)結(jié)構(gòu)已經(jīng)全部介紹完畢。接下來,集中對以上所有數(shù)據(jù)結(jié)構(gòu)中每個字段進行詳細介紹。

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。