PE总结12---PE文件结构之资源表 (IMAGE_RESOURCE_DIRECTORY)

本文详细介绍了如何解析PE文件中的资源表,从IMAGE_RESOURCE_DIRECTORY结构开始,逐步解析IMAGE_RESOURCE_DIRECTORY_ENTRY和IMAGE_RESOURCE_DATA_ENTRY,通过实例展示了如何计算资源在文件中的偏移,以及如何遍历资源的多层目录结构,最终获取到资源的数据位置。
摘要由CSDN通过智能技术生成
资源在PE中是以目录的形式存在的,一般有3层:资源类型,目标资源ID与资源代码页
都是以IMAGE_RESOURCE_DIRECTORY结构为头部的,并且后面跟着一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组。

IMAGE_RESOURCE_DIRECTORY,负责指出后面数组中的成员个数

IMAGE_RESOURCE_DIRECTORY_ENTRY,数组成员分别指向下一层目录结构


IMAGE_RESOURCE_DIRECTORY结构

// 【资源表位于数据目录表的第三项,共动态分配字节, 其中结构体中的成员指出的RVA偏移量都是对于此结构体的地址作为基地址】
typedef struct _IMAGE_RESOURCE_DIRECTORY
{
	DWORD Characteristics;		//理论上为资源的属性,不过事实上总是0
	DWORD TimeDateStamp;		//资源的产生时刻
	WORD MajorVersion;		//理论上为资源的版本,不过事实上总是0
	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;				//数据偏移地址
		struct {
			DWORD   OffsetToDirectory : 31;         //子目录偏移地址
			DWORD   DataIsDirectory : 1;	        //数据为目录
		};
	};
} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;</
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值