-
-
[原创]读取PE结构中的数据目录项
-
发表于: 2018-8-19 13:06 5783
-
中断了一段时间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、定义数据目录项指针将指针指向数据目录项、
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2018-8-19 13:07
被1lu29e编辑
,原因:
赞赏
他的文章
- [原创]Themida 2.3.5.5分析 16223
- [原创]PE文件格式资源表解析 9576
- 关于Themida/Winlicense v.2.1.x.x 的一些问题。 7912
- [原创][原创]EXE导入表解析 7649
- [原创]新增节移动重定向表…… 5799
看原图
赞赏
雪币:
留言: