[zz]PE格式

[zz]PE格式

在Win32平台上(包括Windows 95/98/ME/NT/2000/XP/2003/CE),可执行文件是PE(Portable Executable)格式。PE文件使用的是一个平面地址空间,所有代码和数据都被合并在一起,组成一个很大的结构。文件的内容被分割为不同的区块(Section,又称区段、节等),块中包含代码或数据。
[zz]PE格式_第1张图片
刚接触这块的朋友只需要简单了解一下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文件在磁盘上的数据结构与在内存中的结构是一致的,如下图:
[zz]PE格式_第2张图片

你可能感兴趣的:([zz]PE格式)