Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网络安全 > 黑客技术 > PE教程3: File Header (文件头)
【标  题】:PE教程3: File Header (文件头)
【关键字】:文件,教程,File,PE,Header,Fi,PE,File,Header
【来  源】:网络

PE教程3: File Header (文件头)

Your Ad Here 本课我们将要研究 PE header 的 file header(文件头)部分。

至此,我们已经学到了哪些东东,先简要回顾一下:

  • DOS MZ header 又命名为 IMAGE_DOS_HEADER.。其中只有两个域比较重要: e_magic 包含字符串"MZ",e_lfanew 包含PE header在文件中的偏移量。
  • 比较e_magic 是否为IMAGE_DOS_SIGNATURE以验证是否是有效的DOS header。比对符合则认为文件拥有一个有效的DOS header。
  • 为了定位PE header,移动文件指针到e_lfanew所指向的偏移。
  • PE header的第一个双字包含字符串"PE\0\0"。该双字与IMAGE_NT_SIGNATURE比对,符合则认为PE header有效。

本课我们继续探讨关于 PE header 的知识。 PE header 的正式命名是 IMAGE_NT_HEADERS。再来回忆一下这个结构。

IMAGE_NT_HEADERS STRUCT
Signature dd ?
FileHeader IMAGE_FILE_HEADER <>
OptionalHeader IMAGE_OPTIONAL_HEADER32 <>
IMAGE_NT_HEADERS ENDS

Signature PE标记,值为50h, 45h, 00h, 00h(PE\0\0)。
FileHeader 该结构域包含了关于PE文件物理分布的一般信息。
OptionalHeader 该结构域包含了关于PE文件逻辑分布的信息。

最有趣的东东在 OptionalHeader 里。不过,FileHeader 里的一些域也很重要。本课我们将学习FileHeader,下一课研究OptionalHeader。

IMAGE_FILE_HEADER STRUCT
Machine WORD ?
NumberOfSections WORD ?
TimeDateStamp dd ?
PointerToSymbolTable dd ?
NumberOfSymbols dd ?
SizeOfOptionalHeader WORD ?
Characteristics WORD ?
IMAGE_FILE_HEADER ENDS

Field name Meanings
Machine 该文件运行所要求的CPU。对于Intel平台,该值是IMAGE_FILE_MACHINE_I386 (14Ch)。我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行。看起来,除了禁止程序执行之外,本域对我们来说用处不大。
NumberOfSections 文件的节数目。如果我们要在文件中增加或删除一个节,就需要修改这个值。
TimeDateStamp 文件创建日期和时间。我们不感兴趣。
PointerToSymbolTable 用于调试。
NumberOfSymbols 用于调试。
SizeOfOptionalHeader 指示紧随本结构之后的 OptionalHeader 结构大小,必须为有效值。
Characteristics 关于文件信息的标记,比如文件是exe还是dll。

简言之,只有三个域对我们有一些用: Machine, NumberOfSections 和 Characteristics。通常不会改变 Machine 和Characteristics 的值,但如果要遍历节表就得使用 NumberOfSections。
为了更好阐述 NumberOfSections 的用处,这里简要介绍一下节表。

节表是一个结构数组,每个结构包含一个节的信息。因此若有3个节,数组就有3个成员。 我们需要NumberOfSections值来了解该数组中到底有几个成员。 也许您会想检测结构中的全0成员起到同样效果。Windows确实采用了这种方法。为了证明这一点,可以增加NumberOfSections的值,Windows仍然可以正常执行文件。据我们的观察,Windows读取NumberOfSections的值然后检查节表里的每个结构,如果找到一个全0结构就结束搜索,否则一直处理完NumberOfSections指定数目的结构。 为什么我们不能忽略NumberOfSections的值? 有几个原因。PE说明中没有指定节表必须以全0结构结束。Thus there may be a situation where the last array member is contiguous to the first section, without empty space at all. Another reason has to do with bound imports. The new-style binding puts the information immediately following the section table's last structure array member. 因此您仍然需要NumberOfSections。

PE教程4: Optional Header:【上一篇】
PE教程1: PE文件格式一览:【下一篇】
【相关文章】
  • PE教程6: Import Table(引入表)(3)
  • PE教程6: Import Table(引入表)(4)
  • diy pe教学5
  • PE教程7: Export Table(引出表)(1)
  • PE教程7: Export Table(引出表)(2)
  • PE教程7: Export Table(引出表)(3)
  • PE教程7: Export Table(引出表)(4)
  • diy pe教学4 上
  • diy pe教学4 下
  • diy pe教学3 上
  • 【随机文章】
  • (转载)关于23种设计模式的有趣见解
  • XML 属性
  • 可获得抛出位置和捕获位置的C++异常类
  • 关于Qt中自定义槽和信号的简单示例
  • CWDM:光通信技术的新亮点
  • 能说会道的Word 2003 实现文本教学的朗读
  • 网格技术的发展现状及趋势
  • 设计模式之C#实现(一)--AbstractFactory(补)
  • Reiserfs分区格式化工具的交叉编译
  • 嵌入式人才需求直逼两大平台 VC没有过时
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.