资源是PE文件中最复杂的结构了,资源在PE文件中是以目录结构的形式存在的,一般情况下分为3层,从根目录开始分别是资源类型、目录资源ID与资源代码页。
3层目录结构都是由一个IMAGE_RESOURCE_DIRECTORY结构为头部,后面跟着一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组。
结构体IMAGE_RESOURCE_DIRECTORY_ENTRY如下所示:
typedef struct _IMAGE_RESOURCE_DIRECTORY{
DWORD Characteristics; //资源属性标识
DWORD TimeDateStamp; //资源建立的时间
WORD MajorVersion; //资源主版本
WORD MinorVersion; //资源子版本
WORD NumberOfNamedEntries; //资源名称条目个数
WORD NumberOfIdEntries; //资源ID条目个数
} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;
结构体IMAGE_RESOURCE_DIRECTORY_ENTRY:
typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY
{
union
{
struct
{
DWORD NameOffset:31; //资源名偏移
DWORD NameIsString:1; //资源名为字符串
};
DWORD Name; //资源/语言类型
WORD Id; //资源数字ID
};
union{
DWORD OffsetToData; //数