PE 文 件 格 式 详 解
文 件 格 式 详 解文 件 格 式 详 解
文 件 格 式 详 解 (上
上上
上 )
作 者 : MSDN
译 者 : 李 马 (http://home.nuc.edu.cn/~titilima)
摘 要
摘 要摘 要
摘 要
Windows NT 3.1 引 入 了 一 种 名 为 PE 文 件 格 式 的 新 可 执 行 文 件 格 式 。 PE 文 件 格 式
的 规 范 包 含 在 了 MSDN 的 CD 中 ( Specs and Strategy, Specifications, Windows NT File
Format Specifications) , 但 是 它 非 常 之 晦 涩 。
然 而 这 一 的 文 档 并 未 提 供 足 够 的 信 息 ,所 以 开 发 者 们 无 法 很 好 地 弄 懂 PE 格 式 。 本
文 旨 在 解 决 这 一 问 题 ,它 会 对 整 个 的 PE 文 件 格 式 作 一 个 十 分 彻 底 的 解 释 ,另 外 ,本 文 中
还 带 有 对 所 有 必 需 结 构 的 描 述 以 及 示 范 如 何 使 用 这 些 信 息 的 源 码 示 例 。
为 了 获 得 PE 文 件 中 所 包 含 的 重 要 信 息 , 我 编 写 了 一 个 名 为 PEFILE.DLL 的 动 态 链
接 库 , 本 文 中 所 有 出 现 的 源 码 示 例 亦 均 摘 自 于 此 。 这 个 DLL 和 它 的 源 代 码 都 作 为 PEFile
示 例 程 序 的 一 部 分 包 含 在 了 CD 中( 译 注 :示 例 程 序 请 在 MSDN 中 寻 找 ,本 站 恕 不 提 供 ),
你 可 以 在 你 自 己 的 应 用 程 序 中 使 用 这 个 DLL; 同 样 , 你 亦 可 以 依 你 所 愿 地 使 用 并 构 建 它
的 源 码 。在 本 文 末 尾 ,你 会 找 到 PEFILE.DLL 的 函 数 导 出 列 表 和 一 个 如 何 使 用 它 们 的 说 明 。
我 觉 得 你 会 发 现 这 些 函 数 会 让 你 从 容 应 付 PE 文 件 格 式 的 。
介 绍
介 绍介 绍
介 绍
Windows 操 作 系 统 家 族 最 近 增 加 的 Windows NT 为 开 发 环 境 和 应 用 程 序 本 身 带 来
了 很 大 的 改 变 ,这 之 中 一 个 最 为 重 大 的 当 属 PE 文 件 格 式 了 。新 的 PE 文 件 格 式 主 要 来 自
于 UNIX 操 作 系 统 所 通 用 的 COFF 规 范 , 同 时 为 了 保 证 与 旧 版 本 MS-DOS 及 Windows 操
作 系 统 的 兼 容 , PE 文 件 格 式 也 保 留 了 MS-DOS 中 那 熟 悉 的 MZ 头 部 。
在 本 文 之 中 , PE 文 件 格 式 是 以 自 顶 而 下 的 顺 序 解 释 的 。 在 你 从 头 开 始 研 究 文 件 内
容 的 过 程 之 中 , 本 文 会 详 细 讨 论 PE 文 件 的 每 一 个 组 成 部 分 。
许 多 单 独 的 文 件 成 分 定 义 都 来 自 于 Microsoft Win32 SDK 开 发 包 中 的 WINNT.H 文
件 , 在 这 个 文 件 中 你 会 发 现 用 来 描 述 文 件 头 部 和 数 据 目 录 等 各 种 成 分 的 结 构 类 型 定 义 。
但 是 , 在 WINNT.H 中 缺 少 对 PE 文 件 结 构 足 够 的 定 义 , 在 这 种 情 况 下 , 我 定 义 了 自 己 的
结 构 来 存 取 文 件 数 据 。 你 会 在 PEFILE.DLL 工 程 的 PEFILE.H 中 找 到 这 些 结 构 的 定 义 , 整
套 的 PEFILE.H 开 发 文 件 包 含 在 PEFile 示 例 程 序 之 中 。
本 文 配 套 的 示 例 程 序 除 了 PEFILE.DLL 示 例 代 码 之 外 ,还 有 一 个 单 独 的 Win32 示 例
应 用 程 序 ,名 为 EXEVIEW.EXE。创 建 这 一 示 例 目 的 有 二 :首 先 ,我 需 要 测 试 PEFILE.DLL
的 函 数 ,并 且 某 些 情 况 要 求 我 同 时 查 看 多 个 文 件 ;其 次 ,很 多 解 决 PE 文 件 格 式 的 工 作 和
直 接 观 看 数 据 有 关 。例 如 ,要 弄 懂 导 入 地 址 名 称 表 是 如 何 构 成 的 ,我 就 得 同 时 查 看 .idata
段 头 部 、导 入 映 像 数 据 目 录 、可 选 头 部 以 及 当 前 的 .idata 段 实 体 ,而 EXEVIEW.EXE 就 是
评论1
最新资源