数据目录表,是一个结构体数组。数组里的每个元素对应一个数据表。通常有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,可选的;
展开可选头;看最后一项就是数据目录表;
展开数据目录表;里面就是一个个具体的数据表;
展开几个数据表结构体看一下;单个的数据表结构体都是两个成员,一个地址,一个尺寸; 先学这么多;