小默

[zz]PE格式

在Win32平台上(包括Windows 95/98/ME/NT/2000/XP/2003/CE),可执行文件是PE(Portable Executable)格式。PE文件使用的是一个平面地址空间,所有代码和数据都被合并在一起,组成一个很大的结构。文件的内容被分割为不同的区块(Section,又称区段、节等),块中包含代码或数据。

刚接触这块的朋友只需要简单了解一下PE格式,更具体的PE格式请参考脱壳基础知识入门(2006年版)

    PE相关名词解释如下:
1.入口点(Entry Point)
    程序在执行时的第一行代码的地址应该就是这个值。

2.文件偏移地址(File Offset)
    PE文件在磁盘上储存时,各数据的地址称文件偏移地址(File Offset)。用十六进制工具(例如Hex Workshop、WinHex等)打开文件显示的地址就是文件偏移地址。

3.虚拟地址(Virtual Address,VA)
    由于Windows程序是运行在386保护模式下,在保护模式下,程序访问存储器所使用的逻辑地址称为虚拟地址(Virual Address,VA)。与实地址模式下的分段地址类似,虚拟地址也可写成"段:偏移量"的形式,这里的段是指段选择器。

4.基地址(ImageBase)
    文件执行时将被映像到指定内存地址中,这个初始内存地址称为基址(ImageBase)。在Windows NT中,缺省的值是10000h;对于DLLs,缺省值为400000h。在Windows 9x中,10000h不能用来装入32位的执行文件,因为该地址处于所有进程共享的线性地址区域,因此Microsoft将Win32可执行文件的缺省基地址改变为400000h。

5.相对虚拟地址
相对虚拟地址(Relative Virual Address,RVA)表示此段代码在内存中相对于基地址的偏移。即:相对虚拟地址(RVA)=虚拟地址(VA)-基址(ImageBase)。

4.2 虚拟地址和偏移量转换

  在OllyDBG,IDA和W32Dasm下显示的地址值是虚拟地址(Virual Address,VA)。而十六进制工具里,如:Hiew、Hex Workshop等显示的地址就是文件地址,称之为偏移量(File offset) 。

  其转换原理是因为PE文件在磁盘上的数据结构与在内存中的结构是一致的,如下图:


posted on 2009-12-17 16:12 小默 阅读(306) 评论(1)  编辑 收藏 引用 所属分类: Windows

评论

# re: PE格式 2009-12-17 16:52 colorfulgreen

自己举个例子
虚拟地址 = 403010H = 400000H+1000H+ 1000H*2 + 10H
FO = 400H + 200H*2 + 10H =810H
---------------
RAV = 2110H = 1000H + 1000H + 110H
FO = 400H + 200H + 110H = 710H
  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

留言簿(13)

随笔分类(287)

随笔档案(289)

漏洞

搜索

积分与排名

最新评论

阅读排行榜