PE文件的资源
1. PE文件的资源是以树形结构存储的。
2. 资源目录:
typedef struct
{
DWORD Characteristics;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
WORD NumberOfNamedEntries;
WORD NumberOfIdEntries;
}IMAGE_RESOURCE_DIRECTORY;
IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];
>
DirectoryEntries紧跟在IMAGE_RESOURCE_DIRECTORY之后,
个数是 = NumberOfNamedEntries + NumberOfIdEntries 。
typedef struct
{
DWORD Name;
DWORD OffsetToData;
}IMAGE_RESOURCE_DIRECTORY_ENTRY;
OffsetToData这字段若不是另一个资源目录的偏移位置,就是指向特定资源实体的一个指针。如果最
高位(0x80000000 )设立,表示这个目录项目指向另一个子目录,而剩余的 31 个位
元就是另一个 IMAGE_RESOURCE_DIRECTORY 的偏移位置(从resource section 算
起)。如果最高位没有设立,剩余的 31 个位就是某一个
IMAGE_RESOURCE_DATA_ENTRY 的偏移位置(从resource section 算起)。
IMAGE_RESOURCE_DATA_ENTRY 结构内含资源原始资料的位置、大小、以及code
page 。
DirectoryEntries[]
---------
---> 下一个目录 或者是 IMAGE_RESOURCE_DATA_ENTRY
---------
---------
typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
DWORD OffsetToData;
DWORD Size;
DWORD CodePage;
DWORD Reserved;
} IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;