PE文件结构 - 数据目录表学习
數據目錄表,是一個結構體數組。數組里的每個元素對應一個數據表。通常有16個。
數組每個元素都是一個結構體,結構體如下
typedef struct _IMAGE_DATA_DIRECTORY
{
????DWORD VirtualAddress;????// 數據表的起始虛擬地址
????DWORD Size;????// 數據表大小
}IMAGE_DATA_DIRECTORY,*IMAGE_DATA_DIRECTORY
16個數據表依次如下:
? ? ? ? 導出表、導入表、資源表、異常處理表、安全表、重定位表、調試表、版權、指針目錄、TLS、載入配置、綁定輸入目錄、導入地址表、延遲載入、COM信息。
數據目錄表包含在可選頭中,可選頭包含在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的最后一個字段就是數據目錄表;
下面來打開一個exe文件,找一下數據目錄表;
先下一個工具叫010 Editor;我還不了解;應該是一個增強型的16進制編輯器;
打開notepad.exe文件;提示安裝一個模板用來分析Win可執行文件;安裝;
上方是打開的16進制數據;下方是PE文件結構;在下方選中字段,上方移到對應內容;
先找到NT頭;展開NT頭,找到可選頭;OPTIONAL,可選的;
展開可選頭;看最后一項就是數據目錄表;
展開數據目錄表;里面就是一個個具體的數據表;
展開幾個數據表結構體看一下;單個的數據表結構體都是兩個成員,一個地址,一個尺寸;??? 先學這么多;
?
總結
以上是生活随笔為你收集整理的PE文件结构 - 数据目录表学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用程序判断一个文件是否是有效的PE文件
- 下一篇: 超图 iServer服务体系学习