[PE结构分析] 11.资源表结构
资源表是一个树形结构,可以设置成2的31次方的层数,Windows 使用了3级:
类型->名称->语言

其中涉及到四个结构:
|
Data |
Description |
|
Resource Directory Tables (and Resource Directory Entries) |
A series of tables, one for each group of nodes in the tree. All top-level (Type) nodes are listed in the first table. Entries in this table point to second-level tables. Each second-level tree has the same Type ID but different Name IDs. Third-level trees have the same Type and Name IDs but different Language IDs. Each individual table is immediately followed by directory entries, in which each entry has a name or numeric identifier and a pointer to a data description or a table at the next lower level. |
|
Resource Directory Strings |
Two-byte-aligned Unicode strings, which serve as string data that is pointed to by directory entries. |
|
Resource Data Description |
An array of records, pointed to by tables, that describe the actual size and location of the resource data. These records are the leaves in the resource-description tree. |
|
Resource Data |
Raw data of the resource section. The size and location information in the Resource Data Descriptions field delimit the individual regions of resource data. |
Resource Directory Table
Each resource directory table has the following format. This data structure should be considered the heading of a table because the table actually consists of directory entries (described in section 6.9.2, "Resource Directory Entries") and this structure:
| Offset | Size | Field | Description |
| 0 | 4 | Characteristics | Resource flags. This field is reserved for future use. It is currently set to zero. |
| 4 | 4 | Time/Date Stamp | The time that the resource data was created by the resource compiler. |
| 8 | 2 | Major Version | The major version number, set by the user. |
| 10 | 2 | Minor Version | The minor version number, set by the user. |
| 12 | 2 | Number of Name Entries | The number of directory entries immediately following the table that use strings to identify Type, Name, or Language entries (depending on the level of the table). |
| 14 | 2 | Number of ID Entries | The number of directory entries immediately following the Name entries that use numeric IDs for Type, Name, or Language entries. |
Resource Directory Entries
The directory entries make up the rows of a table. Each resource directory entry has the following format. Whether the entry is a Name or ID entry is indicated by the resource directory table, which indicates how many Name and ID entries follow it (remember that all the Name entries precede all the ID entries for the table). All entries for the table are sorted in ascending order: the Name entries by case-sensitive string and the ID entries by numeric value. Offsets are relative to the address in the IMAGE_DIRECTORY_ENTRY_RESOURCE DataDirectory.
|
Offset |
Size |
Field |
Description |
|
0 |
4 |
Name Offset |
The offset of a string that gives the Type, Name, or Language ID entry, depending on level of table. |
|
0 |
4 |
Integer ID |
A 32-bit integer that identifies the Type, Name, or Language ID entry. |
|
4 |
4 |
Data Entry Offset |
High bit 0. Address of a Resource Data entry (a leaf). |
|
4 |
4 |
Subdirectory Offset |
High bit 1. The lower 31 bits are the address of another resource directory table (the next level down). |
Resource Directory String
The resource directory string area consists of Unicode strings, which are word-aligned. These strings are stored together after the last Resource Directory entry and before the first Resource Data entry. This minimizes the impact of these variable-length strings on the alignment of the fixed-size directory entries. Each resource directory string has the following format:
|
Offset |
Size |
Field |
Description |
|
0 |
2 |
Length |
The size of the string, not including length field itself. |
|
2 |
variable |
Unicode String |
The variable-length Unicode string data, word-aligned. |
Resource Data Entry
Each Resource Data entry describes an actual unit of raw data in the Resource Data area. A Resource Data entry has the following format:
|
Offset |
Size |
Field |
Description |
|
0 |
4 |
Data RVA |
The address of a unit of resource data in the Resource Data area. |
|
4 |
4 |
Size |
The size, in bytes, of the resource data that is pointed to by the Data RVA field. |
|
8 |
4 |
Codepage |
The code page that is used to decode code point values within the resource data. Typically, the code page would be the Unicode code page. |
|
12 |
4 |
Reserved, must be 0. |
|
[PE结构分析] 11.资源表结构的更多相关文章
- [PE结构分析] 8.输入表结构和输入地址表(IAT)
在 PE文件头的 IMAGE_OPTIONAL_HEADER 结构中的 DataDirectory(数据目录表) 的第二个成员就是指向输入表的.每个被链接进来的 DLL文件都分别对应一个 IMAGE_ ...
- Windows PE资源表编程(枚举资源树)
资源枚举 写一个例子,枚举一个PE文件的资源表.首先说下资源相关的作为铺垫. 1.资源类型也是PE可选头中数据目录的一种.位于第三个类型. 2.资源目录分为三层.第四层是描述文件相关的.这些结构是按照 ...
- activti表结构
1.结构设计 1.1. 逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...
- activiti数据库表结构剖析
1.结构设计 1.1. 逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...
- Apache activiti5.13工作流框架的表结构详解
1.结构设计 1.1. 逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...
- activiti 5.22 表结构解析及清空流程运行测试数据
1.结构设计 1.1. 逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: 'RE'表示repository(存储),RepositoryService接口所操作的 ...
- WindowsPE 第七章 资源表
资源表 在程序设计中,总会设计一些数据.这些数据可能是源代码内部需要用到的常量,菜单选项.界面描述等:也可能是源代码外部的,比如程序的图标文件.北京音乐文件.配置文件等,以上这些数据统称为资源.按照程 ...
- activiti5.13 框架 数据库表结构说明
1.结构设计 1.1. 逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: 'RE'表示repository(存储),RepositoryService接口所操作的 ...
- PE格式第九讲,资源表解析
PE格式第九讲,资源表解析 一丶熟悉Windows管理文件的方法 首先,为什么标题是这个,主要是为了下边讲解资源方便,因为资源结构体很乱.如果直接拿出来讲解,那么就会很晕. 1.windows管理文件 ...
随机推荐
- [GraphQL] Create a GraphQL Schema
we’ll take a look at the GraphQL Language and write out our first GraphQL Schema. We’ll use the grap ...
- ch6 影响 MySQLServer 性能的相关因素
第6章影响 MySQLServer 性能的相关因素 前言: 大部分人都一致认为一个数据库应用系统(这里的数据库应用系统概指所有使用数据库的系统)的性能瓶颈最容易出现在数据的操作方面,而数据库应用系统的 ...
- Entity Framework: Joining in memory data with DbSet
转载自:https://ilmatte.wordpress.com/2013/01/06/entity-framework-joining-in-memory-data-with-dbset/ The ...
- dWebBrowser常用知识点
1.webbrowser调用的就是本机IE,并且webbrowser默认就是运行在IE7 mode下,除非你改变它. 2.不装IE,无法用webbrowser. 3.设置WebBrowser在IE9 ...
- apache 配置反向代理服务器
前几天实验了下 nginx 配置反向代理服务器.虽然 nginx 的安装很麻烦,但是用起来倒是很简单.不过组里没人用过 nginx,apache 服务器大家倒是蛮熟,为了减少 ops team 的工作 ...
- string-->wstring-->string
std::string src("三毛三毛三毛三毛三三三三流浪记"); size_t size = mbstowcs(NULL,src.c_str(),0); std::wstri ...
- 解决HP打印机错误:Couldn't open fifo
我的是因为选错了打印机协议,一开始选成了“互联网打印协议 - IPP”. 解决方案:删除原有打印机配置,重新选择协议为“HP Jetdirect-Socket”即可.
- C/C++/Qt 统计运行时间
http://www.cnblogs.com/Romi/archive/2012/04/19/2457175.html 程序中经常需要统计时间,需要统计某项运算的运行时间时,需要计算时间差. 1. C ...
- JAVA字节码解析
Java字节码指令 Java 字节码指令及javap 使用说明 ### java字节码指令列表 字节码 助记符 指令含义 0x00 nop 什么都不做 0x01 aconst_null 将null推送 ...
- 使用EntityFramework6连接MySql数据库
准备工具: VS2013.MySQL For VisualStudio 1.1.4.Connector/Net 6.8.3(百度网盘里) 程序包管理器执行命令: Install-Package Ent ...