PE文件结构 - 数据目录表学习
數(shù)據(jù)目錄表,是一個(gè)結(jié)構(gòu)體數(shù)組。數(shù)組里的每個(gè)元素對(duì)應(yīng)一個(gè)數(shù)據(jù)表。通常有16個(gè)。
數(shù)組每個(gè)元素都是一個(gè)結(jié)構(gòu)體,結(jié)構(gòu)體如下
typedef struct _IMAGE_DATA_DIRECTORY
{
????DWORD VirtualAddress;????// 數(shù)據(jù)表的起始虛擬地址
????DWORD Size;????// 數(shù)據(jù)表大小
}IMAGE_DATA_DIRECTORY,*IMAGE_DATA_DIRECTORY
16個(gè)數(shù)據(jù)表依次如下:
? ? ? ? 導(dǎo)出表、導(dǎo)入表、資源表、異常處理表、安全表、重定位表、調(diào)試表、版權(quán)、指針目錄、TLS、載入配置、綁定輸入目錄、導(dǎo)入地址表、延遲載入、COM信息。
數(shù)據(jù)目錄表包含在可選頭中,可選頭包含在NT頭中;參閱;
https://blog.csdn.net/bcbobo21cn/article/details/115032841
可選頭定義如下;
typedef struct _IMAGE_OPTIONAL_HEADER {
??? WORD??? Magic;
??? BYTE??? MajorLinkerVersion;
??? BYTE??? MinorLinkerVersion;
??? DWORD?? SizeOfCode;
??? DWORD?? SizeOfInitializedData;
??? DWORD?? SizeOfUninitializedData;
??? DWORD?? AddressOfEntryPoint;
??? DWORD?? BaseOfCode;
??? DWORD?? BaseOfData;
??? DWORD?? ImageBase;
??? DWORD?? SectionAlignment;
??? DWORD?? FileAlignment;
??? WORD??? MajorOperatingSystemVersion;
??? WORD??? MinorOperatingSystemVersion;
??? WORD??? MajorImageVersion;
??? WORD??? MinorImageVersion;
??? WORD??? MajorSubsystemVersion;
??? WORD??? MinorSubsystemVersion;
??? DWORD?? Win32VersionValue;
??? DWORD?? SizeOfImage;
??? DWORD?? SizeOfHeaders;
??? DWORD?? CheckSum;
??? WORD??? Subsystem;
??? WORD??? DllCharacteristics;
??? DWORD?? SizeOfStackReserve;
??? DWORD?? SizeOfStackCommit;
??? DWORD?? SizeOfHeapReserve;
??? DWORD?? SizeOfHeapCommit;
??? DWORD?? LoaderFlags;
??? DWORD?? NumberOfRvaAndSizes;
??? IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
}
?? 看一下 _IMAGE_OPTIONAL_HEADER的最后一個(gè)字段就是數(shù)據(jù)目錄表;
下面來打開一個(gè)exe文件,找一下數(shù)據(jù)目錄表;
先下一個(gè)工具叫010 Editor;我還不了解;應(yīng)該是一個(gè)增強(qiáng)型的16進(jìn)制編輯器;
打開notepad.exe文件;提示安裝一個(gè)模板用來分析Win可執(zhí)行文件;安裝;
上方是打開的16進(jìn)制數(shù)據(jù);下方是PE文件結(jié)構(gòu);在下方選中字段,上方移到對(duì)應(yīng)內(nèi)容;
先找到NT頭;展開NT頭,找到可選頭;OPTIONAL,可選的;
展開可選頭;看最后一項(xiàng)就是數(shù)據(jù)目錄表;
展開數(shù)據(jù)目錄表;里面就是一個(gè)個(gè)具體的數(shù)據(jù)表;
展開幾個(gè)數(shù)據(jù)表結(jié)構(gòu)體看一下;單個(gè)的數(shù)據(jù)表結(jié)構(gòu)體都是兩個(gè)成員,一個(gè)地址,一個(gè)尺寸;??? 先學(xué)這么多;
?
總結(jié)
以上是生活随笔為你收集整理的PE文件结构 - 数据目录表学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用程序判断一个文件是否是有效的PE文件
- 下一篇: 超图 iServer服务体系学习