Windows PE基础补充


Windows PE基础补充

0x00 前言

补充一些WIndows PE学习过程的基础知识。

0x01 过程

1.PE文件格式

Win16平台(Windows3.x)可执行格式是NE格式。

Win32平台(Windows 9x/NT/2000/xp/2003/vista/CE)可执行格式是PE格式。

PE 全称 Portable Executable File Format,可移植的执行体。是目前Windows平台的主流可执行文件格式。

2.EXE和DLL区别

EXE和DLL区别只是语义上的,他们使用的PE格式完全相同。区别在于有一个字段标识出文件为EXE或者DLL。

DLL的扩展,OCX控件和CPL文件(控制面板程序)等。

3.64位Windows和32位Windows区别

64位Windows是对PE格式做了一些修饰,新格式叫PE32+。将32位字段扩展位64位。

4.PE文件的数据结构

PE文件的数据结构也区分32位和64位。结构选择依赖用户正在编译的模式(例_WIN64是否被定义)。

5.PE格式定义

PE格式定义的主要地方位于我们的头文件: winnt.h 。这个头文件中几乎能找到关于PE文件的所有定义。

6.PE文件的概念

PE文件使用一个平面地址空间,所有代码和数据都被合并在一起,组成一个大型结构。文件的内容被分割位不同的区块(section,又称区段、节等)区块中包含代码或数据。

PE文件各个区块按页边界对齐,区块无大小限制,是一个连续结构。每个块都有自己在内存中的一套属性,例,单个区块是否包含代码,是否只读或可读/写等。

7.PE基地址

当PE文件通过Windows加载器加载到内存后,内存中的版本称为模块(Module)。

映射文件的起始地址被称为模块的句柄(hModule),可以用过句柄访问内存其他的数据结构。这个初始内存地址也称为基地址(ImageBase)。

基地址的值是由PE文件本身设定的。一般exe文件的基地址是00400000h,dll文件基地址是100000000h。可以在创建应用程序exe时改变这个地址。具体方法可以用链接应用时使用链接程序的/BASE选项,或者链接后通过REBASE应用程序进行设置。

8.相对虚拟地址

相对虚拟地址(Relative Virtual Address,RVA)。为了避免在PE文件中存在确定(绝对)的内存地址,引入相对虚拟地址概念,RVA是想独居PE文件基地址的偏移。

公式:

虚拟地址(VA)=基地址(ImageBase)+ 相对虚拟地址(RVA)

9.文件偏移地址

文件偏移地址(File Offset),也就PE物理地址(RAW Offset)。PE文件存储在磁盘上时,某个数据的位置相对于文件头的偏移量,称为文件偏移地址。文件偏移地址从PE文件的第一个字节开始计数,起始值为0。

用十六进制工具打开文件所显示的地址就是文件偏移地址。

0x02 参考

https://blog.csdn.net/shitdbg/article/details/49682439

https://bbs.pediy.com/thread-270210.htm

PE