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,可选的;

展开可选头;看最后一项就是数据目录表;

展开数据目录表;里面就是一个个具体的数据表;

展开几个数据表结构体看一下;单个的数据表结构体都是两个成员,一个地址,一个尺寸;    先学这么多;

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/115035483