快速业务通道

对PE资源的研究

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
;——————————————————

| NAME RVA/INTEGER ID |

——————————————————————

| E | DATA ENTRY RVA/SUBDIR RVA |

——————————————————————

资源表3(Resource Directory Entry)

在DELPHI中的申明:

PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;

IMAGE_RESOURCE_DIRECTORY_ENTRY = packed record

Name: DWORD; // Or ID: Word (Union)

OffsetToData: DWORD;

INTEGER ID

包含一个识别资源的整数ID

如果在根目录,这个ID表示的意义如下

资源类型

1: cursor

2: bitmap

3: icon

4: menu

5: dialog

6: string table

7: font directory

8: font

9: accelerators

10: unformatted resource data

11: message table

12: group cursor

14: group icon

16: version information

NAME RVA

名字的相对实际地址,包含一个31位的相对资源的Image Base的地址。表的形式见表4

E 一位的不可缺少的识别码(mask 80000000h)

如果这位为0,则为Resource Data Entries,其中DATA RVA = 31位的(mask 7fffffffh) 数据条目的地址。结构见表5

如果这位为1,则表示接另一个子目录(Subdirectory Entry)。

{ 此函数检验 offset 是一个字符串名还是一个目录 }

{ IMAGE_RESOURCE_NAME_IS_STRING

= IMAGE_RESOURCE_DATA_IS_DIRECTORY

= $80000000 }

function HighBitSet(L: Longint): Boolean;

begin

Result := (L and IMAGE_RESOURCE_DATA_IS_DIRECTORY) <> 0;

end;

{ 下面两个函数用于去掉E位剩下的值或者指针 }

{IMAGE_OFFSET_STRIP_HIGH = $7FFFFFFF;}

function StripHighBit(L: Longint): Longint;

begin

Result := L and IMAGE_OFFSET_STRIP_HIGH;

end;

function StripHighPtr(L: Longint): Pointer;

begin

Result := Pointer(L and IMAGE_OFFSET_STRIP_HIGH);

end;

每一个资源目录名为如下格式

——————————————————————

| LENGTH | UNICODE STRING |

——————————————————————

| LENGTH | UNICODE STRING |

——————————————————————

表4(Resource Directory String Entry)

在DELPHI中的申明

PIMAGE_RESOURCE_DIR_STRING_U = ^IMAGE_RESOURCE_DIR_STRING_U;

IMAGE_RESOURCE_DIR_STRING_U = packed record

Length : WORD;

NameString : array [0..0] of WCHAR;

end;

LENGTH

就是字符串的长度

UNICODE STRING

Unicode的字符串.

资源数据表结构:

—————————————

| DATA RVA |

—————————————

| SIZE |

—————————————

| CODEPAGE |

———&m

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号