iczelion pe tutcn4

原创 2001年08月29日 17:45:00

 

PE教程4: Optional Header

我们已经学习了关于 DOS header PE header 中部分成员的知识。这里是 PE header 中最后、最大或许也是最重要的成员,optional header

回顾一下,optional header 结构是 IMAGE_NT_HEADERS 中的最后成员。包含了PE文件的逻辑分布信息。该结构共有31个域,一些是很关键,另一些不太常用。这里只介绍那些真正有用的域。

这儿有个关于PE文件格式的常用术语: RVA
RVA
代表相对虚拟地址。 知道什么是虚拟地址吗?相对那些简单的概念而言,RVA有些晦涩。简言之,RVA是虚拟空间中到参考点的一段距离。我打赌您肯定熟悉文件偏移量: RVA就是类似文件偏移量的东西。当然它是相对虚拟空间里的一个地址,而不是文件头部。举例说明,如果PE文件装入虚拟地址(VA)空间的400000h处,且进程从虚址401000h开始执行,我们可以说进程执行起始地址在RVA 1000h。每个RVA都是相对于模块的起始VA的。
为什么PE文件格式要用到RVA呢? 这是为了减少PE装载器的负担。因为每个模块多有可能被重载到任何虚拟地址空间,如果让PE装载器修正每个重定位项,这肯定是个梦魇。相反,如果所有重定位项都使用RVA,那么PE装载器就不必操心那些东西了: 它只要将整个模块重定位到新的起始VA。这就象相对路径和绝对路径的概念: RVA类似相对路径,VA就象绝对路径。

Field Meanings
AddressOfEntryPoint PE装载器准备运行的PE文件的第一个指令的RVA。若您要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行。
ImageBase PE文件的优先装载地址。比如,如果该值是400000h,PE装载器将尝试把文件装到虚拟地址空间的400000h处。字眼"优先"表示若该地址区域已被其他模块占用,那PE装载器会选用其他空闲地址。
SectionAlignment 内存中节对齐的粒度。例如,如果该值是4096 (1000h),那么每节的起始地址必须是4096的倍数。若第一节从401000h开始且大小是10个字节,则下一节必定从402000h开始,即使401000h和402000h之间还有很多空间没被使用。
FileAlignment

文件中节对齐的粒度。例如,如果该值是(200h),,那么每节的起始地址必须是512的倍数。若第一节从文件偏移量200h开始且大小是10个字节,则下一节必定位于偏移量400h: 即使偏移量512和1024之间还有很多空间没被使用/定义。

MajorSubsystemVersion
MinorSubsystemVersion
win32子系统版本。若PE文件是专门为Win32设计的,该子系统版本必定是4.0否则对话框不会有3维立体感。
SizeOfImage 内存中整个PE映像体的尺寸。它是所有头和节经过节对齐处理后的大小。
SizeOfHeaders 所有头+节表的大小,也就等于文件尺寸减去文件中所有节的尺寸。可以以此值作为PE文件第一节的文件偏移量。
Subsystem NT用来识别PE文件属于哪个子系统。 对于大多数Win32程序,只有两类值: Windows GUI 和 Windows CUI (控制台)。
DataDirectory IMAGE_DATA_DIRECTORY 结构数组。每个结构给出一个重要数据结构的RVA,比如引入地址表等。

翻译:iamgufeng [Iczelion's Win32 Assembly Homepage][LuoYunBin's Win32 ASM Page]

 

PE文件结构详解(二)可执行文件头

在PE文件结构详解(一)基本概念里,解释了一下PE文件的一些基本概念,从这篇开始,将正式讲解PE文件的详细结构。 了解一个文件的详细结构,最应该首先了解的就是这个文件的文件头的含义,因为几乎所有的文件...
  • evileagle
  • evileagle
  • 2013年09月23日 23:28
  • 27833

PE文件结构分析

PE文件分析
  • qq_20307987
  • qq_20307987
  • 2016年03月22日 10:40
  • 3815

图解VC++版PE文件解析器源码分析

该源码下载自 http://download.csdn.net/download/witch_soya/4979587 1 Understand 分析的图表 ...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年07月13日 19:11
  • 1729

在PE系统中上网

我们平时都知道在PE环境下可以装系统,其实在PE环境下可以的做得事很多,现在说说在PE里完成正常上网功能。          有时候你的系统崩溃了,但是你又急需上网功能,这时可以进PE,在Pe中完成你...
  • kdc18333608478
  • kdc18333608478
  • 2015年10月24日 18:59
  • 5051

一个简单的PE感染病毒

/------- 通过开辟一个新的节表放置shellcode 修改PE入口点到shellcode,并在shellcode中设置返回原PE入口点 PE文件格式参考资料: http://bbs.pe...
  • GVFDBDF
  • GVFDBDF
  • 2015年09月22日 23:05
  • 1025

PE文件格式详解(下)

预定义段   一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text、.bss、.rdata、.data、.rsrc、.edata、.idata、.pdata和.debug。...
  • feidegengao
  • feidegengao
  • 2013年11月26日 16:02
  • 9055

【EXE PE】初识pe结构--手写可执行程序

原文地址http://bbs.pediy.com/showthread.php?t=48590 【文章标题】: 手写可执行程序 【文章作者】: dncwbc 【作者邮箱】: dnc2588@...
  • zfpigpig
  • zfpigpig
  • 2013年09月06日 11:12
  • 4421

手动修改PE文件:添加自定义代码

在PE文件里有很多位置可以添加自己的代码(其实就是感染PE),凡是用不到的地方都能加。想到的位置有(在文件中不是在内存中):Dos头和Nt头之间、每个节末尾的Padding(间隙)、新增节分配在文件末...
  • nargnos
  • nargnos
  • 2014年11月06日 16:38
  • 847

PE文件格式详解(上)

Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式。PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Specifications, Windo...
  • feidegengao
  • feidegengao
  • 2013年11月26日 16:00
  • 3558

制作Linux版PE系统

「PE系统」在初学装系统的时候是一个很热的词。它就是一个存在于优盘上的小系统,将小系统制作到优盘上有很多工具。Windows上使用诸如「老毛桃」之类的国产软件制作PE系统,包含了磁盘分区工具,ghos...
  • kangear
  • kangear
  • 2016年06月09日 17:51
  • 8966
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iczelion pe tutcn4
举报原因:
原因补充:

(最多只允许输入30个字)