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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PE文件格式详解(二)

發布時間:2023/12/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PE文件格式详解(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0x00 前言

?? 上一篇講到了PE文件頭的中IMAGE_FILE_HEADER結構的第二個結構,今天從IMAGE_FILE_HEADER中第三個結構sizeOfOptionalHeader講起。這個字段的結構名也叫做IMAGE_OPTIONAL_HEDAER講起。

0x01 ?IMAGE_OPTIONAL_HEADER概述

? 其實這個結構是IMAGE_FILE_HEADER結構的補充。這兩個結構合起來才能對整個PE文件頭進行描述。這個結構異常復雜,但真正我們用得到的其實不多,下面來看看它的各個字段情況,如下圖(左邊的16位字符表示相對于文件頭的偏移量):

ypedef struct _IMAGE_OPTIONAL_HEADER?
{
??? //
??? // Standard fields.??
??? //
+18h??? WORD??? Magic;???????? // 標志字, ROM 映像(0107h),普通可執行文件(010Bh)
+1Ah??? BYTE????? MajorLinkerVersion;???? // 鏈接程序的主版本號
+1Bh??? BYTE????? MinorLinkerVersion;???? // 鏈接程序的次版本號
+1Ch??? DWORD?? SizeOfCode;???? // 所有含代碼的節的總大小
+20h??? DWORD?? SizeOfInitializedData;??? // 所有含已初始化數據的節的總大小
+24h??? DWORD?? SizeOfUninitializedData; // 所有含未初始化數據的節的大小
+28h??? DWORD?? AddressOfEntryPoint;??? // 程序執行入口RVA
+2Ch??? DWORD?? BaseOfCode;????? // 代碼的區塊的起始RVA
+30h??? DWORD?? BaseOfData;????? // 數據的區塊的起始RVA
??? //
??? // NT additional fields.??? 以下是屬于NT結構增加的領域。
??? //
+34h??? DWORD?? ImageBase;????? // 程序的首選裝載地址
+38h??? DWORD?? SectionAlignment;????? // 內存中的區塊的對齊大
+3Ch??? DWORD?? FileAlignment;????? // 文件中的區塊的對齊大小
+40h??? WORD??? MajorOperatingSystemVersion;? // 要求操作系統最低版本號的主版本號
+42h??? WORD??? MinorOperatingSystemVersion;? // 要求操作系統最低版本號的副版本號
+44h??? WORD??? MajorImageVersion;?????? // 可運行于操作系統的主版本號
+46h??? WORD??? MinorImageVersion;?????? // 可運行于操作系統的次版本號
+48h??? WORD??? MajorSubsystemVersion;? // 要求最低子系統版本的主版本號
+4Ah??? WORD??? MinorSubsystemVersion;? // 要求最低子系統版本的次版本號
+4Ch??? DWORD?? Win32VersionValue;?????? // 莫須有字段,不被病毒利用的話一般為0
+50h??? DWORD?? SizeOfImage;?????? // 映像裝入內存后的總尺寸
+54h??? DWORD?? SizeOfHeaders;?????? // 所有頭 + 區塊表的尺寸大小
+58h??? DWORD?? CheckSum;?????? // 映像的校檢和
+5Ch??? WORD??? Subsystem;?????? // 可執行文件期望的子系統
+5Eh??? WORD??? DllCharacteristics;?????? // DllMain()函數何時被調用,默認為 0
+60h??? DWORD?? SizeOfStackReserve;?????? // 初始化時的棧大小
+64h??? DWORD?? SizeOfStackCommit;?????? // 初始化時實際提交的棧大小
+68h??? DWORD?? SizeOfHeapReserve;??????? // 初始化時保留的堆大小
+6Ch??? DWORD?? SizeOfHeapCommit;??????? // 初始化時實際提交的堆大小
+70h??? DWORD?? LoaderFlags;??????? // 與調試有關,默認為 0?
+74h??? DWORD?? NumberOfRvaAndSizes;? // 下邊數據目錄的項數,這個字段自Windows NT 發布以來??????? // 一直是16
+78h??? DWORD ? DataDirctory[16];
?????? // 數據目錄表
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

這里總共31個字段但是常用的其實就是我用紅色字體標明的。

前面我們已經知道了PE文件頭在40h的位置,則上面的偏移量推斷IMAGE_OPTIONAL_HEADER字段的首個字段在40h+18h=58h的地方,我們還是用hexwrokshop打開那個PE文件。Ctrl+G打開轉移窗口,輸入58則找到了第一個字段位置,如下圖:

? 對于這31個字段我們今天最為關心的是最后一個字段DataDirctory[16]我們一眼就能看出這是一個數組,其中的每個元素都是由一個叫做IMAGE_DATA_DIRECTORY的結構組成。這個叫做IMAGE_DATA_DIRACTORY的結構如下:

?????????????????????????????????????????????? IMAGE_DATA_DIRACTORY ???STRUC

?????????????????????????????????????????????? VritualAddress ???DWORD ???//數據塊的起始RVA

????????????????????????????????????????????? Size ????????????DWORD ??//數據塊的長度

?????????????????????????????????????????????? IMAGE_DATA_DIRACTORY ???RENS

下面是DataDirctory[16]即數據目錄表的各個成員

?

???

索引值在Windows.inc中的預定義值

對應的數據塊

偏移量

0

IMAGE_DIRECTORY_ENTRY_EXPORT

導出表

78h

1

IMAGE_DIRECTORY_ENTRY_IMPORT

導入表

80h

2

IMAGE_DIRECTORY_ENTRY_RESOURCE

資源

88h

3

IMAGE_DIRECTORY_ENTRY_EXCEPTION

異常(具體資料不詳)

90h

4

IMAGE_DIRECTORY_ENTRY_SECURITY

安全(具體資料不詳)

98h

5

IMAGE_DIRECTORY_ENTRY_BASERELOC

重定位表

A0h

6

IMAGE_DIRECTORY_ENTRY_DEBUG

調試信息

A8h

7

IMAGE_DIRECTORY_ENTRY_ARCHITECTURE

版權信息

B0h

8

IMAGE_DIRECTORY_ENTRY_GLOBALPTR

具體資料不詳

B8h

9

IMAGE_DIRECTORY_ENTRY_TLS

Thread Local Storage

C0h

10

IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG

具體資料不詳

C8h

11

IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT

具體資料不詳

D0h

12

IMAGE_DIRECTORY_ENTRY_IAT

導入函數地址表

D8h

13

IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT

具體資料不詳

E0h

14

IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR

具體資料不詳

??????E8h

15

未使用

?

保留

?

? 這張表的16個成員中第一個成員IMAGE_DIRECTORY_ENTRY_EXPORT(導出表)和第二個成員IMAGE_DIRECTORY_ENTRY_EXPORT(導入表)非常重要。下面我們用另一個PE文件來查看信息。由于前面的PE.exe沒有輸出表,所以換一個Dumped.DLL這個有輸出表的來查看結構。步驟如下:

1.Hexwrokshop打開文件,首先找到PE文件頭位置,一般都是在載入起始位+3ch處,如下圖所示。

?圖中被選中的黑色處100h,故可知PE文件頭在100h處,用快捷鍵跳ctrl+G跳轉到該處上圖標黑部分即PE文件頭位置。

2.找到了PE文件頭的位置,接下來我們來找DataDirctory[16]各個成員位置。第一個成員輸出表位于PE文件頭+78h位置即100h+78h=178h處,如下圖:

由于每個結構都占8個字節,所以可以知道輸出表的其實位置在4000h處,大小為45h

輸入表的位置位100h+80h=180h處,如下圖:

?

由上圖可知輸入表的起始位置在3000h處,大小為52h。

3.其實除了這么查找,還有一種更為簡單的方式。

我們要用到另一個工具LordPE。

步驟如下:

1)打開lordPE,點擊PE編輯器即可查看PE文件頭的許多信息,如下圖:

?

2)再點擊目錄按鈕即可查看數據目錄表的相關信息。如下圖:

?

由上圖我們直接就能看到輸出表RVA4000h大小為45h,輸入表的RVA3000h,大小為52h。這和我們計算的查找的結果一致。

?

轉載于:https://www.cnblogs.com/2f28/p/9816419.html

總結

以上是生活随笔為你收集整理的PE文件格式详解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产 日韩 欧美 在线 | 国产日韩欧美日韩大片 | 一级做a视频 | 美女一级视频 | 日韩电影在线一区 | 亚洲一区二区三区久久 | 草比视频在线观看 | 91精品国产福利在线观看 | 亚洲国产中文字幕在线观看 | 国产午夜成人久久无码一区二区 | 91视频.com| 玖玖在线播放 | 影音先锋中文字幕在线视频 | 免费啪视频 | 成年人福利网站 | 香蕉视频一级 | 天天久久综合网 | 美女张开腿露出尿口 | 国产成人无码精品久久二区三 | 污视频软件在线观看 | 成人国产网站 | 午夜爱爱影院 | 激情丁香网| 欧美黄色片 | 亚洲风情第一页 | 91视频进入 | 国产精品无码成人片 | a√天堂资源 | 日本精品视频在线播放 | 日本精品一二区 | 欧美不卡影院 | 精品视频在线观看免费 | www.黄色av | 欧美日韩中文字幕视频 | 天天综合网入口 | 清清草免费视频 | 丁香花婷婷| 中文字幕日本在线 | 亚洲天堂视频在线 | 国产精品久久久久久亚洲 | 日本在线视频一区 | 秋霞7777鲁丝伊人久久影院 | 黄色片免费播放 | 无码一区二区精品 | 久久国产视频播放 | 日本狠狠爱 | 午夜一级在线 | 久久综合高清 | 日韩中文字幕免费在线观看 | 中文字幕成人一区 | 亚洲色图制服丝袜 | 婷婷午夜天 | 日韩免费一二三区 | 国产精品午夜福利 | 国产又大又粗又硬 | 久久免费在线观看视频 | 免费观看视频一区二区 | 欧美专区第一页 | 毛茸茸亚洲孕妇孕交片 | 综合婷婷久久 | 日本少妇b | 欧美乱码视频 | 欧美激情午夜 | japanesexxxx日本妞 | 人人妻人人爽一区二区三区 | 超碰人人人人 | 日韩美女国产精品 | 黄色在线免费观看网站 | 亚洲av电影一区 | 超碰超碰超碰超碰 | 精久久久久| 91av视频在线播放 | 在线免费观看国产精品 | www在线视频 | 69xx视频在线观看 | 大象传媒成人在线观看 | 久久中文在线 | 99re99热| bangbros性欧美18 | 绿帽单男| 久久国产人妻一区二区免色戒电影 | 日本午夜一级 | 在线播放av网址 | 啪啪网站大全 | xxxx国产精品| 日韩一区二区三区在线观看视频 | 久久精品国产清自在天天线 | 伊人天堂网| 日韩一区二 | 91av在线网站 | 黑人与日本少妇 | 亚洲精品激情视频 | 女上男下动态图 | 欧美性生活精品 | 超碰2023| 青青青av| 久久久久久久久久久久久久久久久久 | 特黄aaaaaaaaa真人毛片 | 中国免费黄色片 |