首页
社区
课程
招聘
[原创]读取PE结构中的数据目录项
发表于: 2018-8-19 13:06 5781

[原创]读取PE结构中的数据目录项

2018-8-19 13:06
5781
中断了一段时间PE的学习,从昨天开始捡起来,研究了一下NT头里边的optionalheader的数据目录项,里边存放着很多重要的表的数据,想要解析那些表,就必须要能够解析这个数组。
typedef struct _IMAGE_DATA_DIRECTORY {
        DWORD VirtualAddress; //相对虚拟地址
	DWORD Size;      //大小

} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

这是vs里边给出的定义,数据目录在winnt.h中的定义为
#define IMAGE_DIRECTORY_ENTRY_EXPORT		 0 导出表
#define IMAGE_DIRECTORY_ENTRY_IMPORT		 1 导入表 
#define IMAGE_DIRECTORY_ENTRY_RESOURCE		 2 资源目录
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION		 3 异常目录
#define IMAGE_DIRECTORY_ENTRY_SECURITY		 4 安全目录
#define IMAGE_DIRECTORY_ENTRY_BASERELOC	         5 重定位基本表
#define IMAGE_DIRECTORY_ENTRY_DEBUG		 6 调试目录
#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT		 7 描术字串
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR		 8 机器值
#define IMAGE_DIRECTORY_ENTRY_TLS		 9 TLS目录
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG	 10 载入配值目录
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT       11 绑定输入表
#define IMAGE_DIRECTORY_ENTRY_IAT		 12 导入地址表
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT	 13 延迟载入描述
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR     14 COM信息
这是15个基本表,其实一共有16个但是第十六个保留不适用所以没有写,想要用代码找必须要会手动查找。
这里我是用的软件是windows自带的notepad  工具为UltraEdit
通过查询PE文件结构可以知道,数据目录项在节表上方,16项每项的大小为8个字节,所以从节表开始出向上找8行。(但是这个地方我有点不理解为什么是virtualaddress在前,size在后边,看定义的时候位置是相反的。)
手动找到完成之后开始使用代码写,大体步骤为:
1、将文件读到缓冲区。
2、定义每个pe头的信息。
3、定义数据目录项指针将指针指向数据目录项、

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-8-19 13:07 被1lu29e编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//