PE文件学习(三)数据目录表之资源
来源:互联网 发布:房地产网络销售传播图 编辑:程序博客网 时间:2024/06/04 17:59
资源是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; //数据偏移地址struct {DWORD OffsetToDirectory:31; //子目录偏移地址DWORD DataIsDirectory:1; //数据为目录};};}IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;其中的Name成员当此结构体位于第一层目录中时,此字段保存有资源类型的值。当此结构体位于第三层目录中时,此字段保存有资源语言区域的类型值
OffsetToDirectory和DataIsDirectory:当DataIsDirectory为1时,OffsetToDirectory的值指向下一层子目录的偏移。
这个IMAGE_RESOURCE_DIRECTORY_ENTRY是由两个大小为4字节的联合体组成的,在不同情况下,两个联合体中的有效字段也不同。
第一个联合体内的字段是根据当前结构体所处的目录层次来决定的,位于第一层目录时字段Name有效,保存的信息是资源类型;位于第二层目录时字段Id或结构体有效,这取决于此资源的索引方式,如果采用的是编号索引就是字段Id有效,否则结构体有效;位于第三层目录时字段Name有效,保存的信息是资源语言区域类型。
第二个联合体内的字段理论上是根据具体情况而定的,如果下一级是一个子目录的话,那么就是结构体生效,如果下一级是资源数据则是字段OffsetToData生效。
在经过三层目录的索引后,最后会到达一个IMAGE_RESOURCE_DATA_ENTRY结构中,这个结构将指引我们找到资源数据。下面这个结构体描述的就是此结构。
typedef struct _IMAGE_RESOURCE_DATA_ENTRY{DWORD OffsetToData; //资源数据的RAVDWORD Size ; //资源数据的长度DWORD CodePage; //代码页DWORD Reserved; //保留字段}IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
- PE文件学习(三)数据目录表之资源
- PE文件学习(二)数据目录表之导出表与导入表
- PE总结7---PE文件结构NT头之数据目录表 IMAGE_DATA_DIRECTORY
- PE总结13 --PE文件结构之 解析资源表
- PE总结15--PE文件结构之 解析资源表
- PE总结12---PE文件结构之资源表 (IMAGE_RESOURCE_DIRECTORY)
- PE学习(三)第三章:PE文件头
- 分析pe文件资源(学习)
- PE 文件格之资源
- PE文件详解(七)--资源表
- PE文件(三)
- PE文件结构详解(三)PE导出表
- PE文件结构详解(三)PE导出表
- PE文件结构详解(三)PE导出表
- PE文件结构详解(三)PE导出表
- PE文件结构详解(三)PE导出表
- PE文件结构详解(三)PE导出表
- PE文件结构详解(三)PE导出表
- I NEED A OFFER!(hdoj--1203--01背包)
- 使用百度地图开发一个导航定位demo-android学习之旅(77)
- 从qplot开始入门
- Thinking in C++之1.继承与组合概念、区别及优缺点
- iOS对项目中所有加阴影的代码进行优化
- PE文件学习(三)数据目录表之资源
- 手动扩大栈内存,让AC无忧
- 信用卡使用技巧-资深信用卡使用者推荐
- HDU1269 迷宫城堡 (强连通图判定)
- 实例化和类方法
- form表单无刷新提交并得到返回值
- 数学模板 - 计算方法
- DIV水平和垂直居中问题
- hdu1097 A hard puzzle