正在阅读:PE文件格式详解(3)PE文件格式详解(3)

2004-02-14 09:34 出处:PConline 作者:titilima/CSDN 责任编辑:linjixiong

  数据目录

  WINNT.H之中所定义的数据目录为:

  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
  // 机器值(MIPS GP)
  #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
  // TLS目录
  #define IMAGE_DIRECTORY_ENTRY_TLS 9
  // 载入配置目录
  #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10

  基本上,每个数据目录都是一个被定义为IMAGE_DATA_DIRECTORY的结构。虽然数据目录入口本身是相同的,但是每个特定的目录种类却是完全唯一的。每个数据目录的定义在本文的以后部分被描述为“预定义段”。

  WINNT.H
  typedef struct _IMAGE_DATA_DIRECTORY {
  ULONG VirtualAddress;
  ULONG Size;
  } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

  每个数据目录入口指定了该目录的尺寸和相对虚拟地址。如果你要定义一个特定的目录的话,就需要从可选头部中的数据目录数组中决定相对的地址,然后使用虚拟地址来决定该目录位于哪个段中。一旦你决定了哪个段包含了该目录,该段的段头部就会被用于查找数据目录的精确文件偏移量位置。

  所以要获得一个数据目录的话,那么首先你需要了解段的概念。我在下面会对其进行描述,这个讨论之后还有一个有关如何定位数据目录的示例。(未完待续)

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品