PE结构学习笔记(一)

本文详细探讨了PE文件格式的基本概念,包括exe和dll文件的PE格式、PE结构框架、内存映射机制及PE文件在内存中的加载过程。通过分析PE文件的数据结构与内存布局,阐述了文件如何在不同平台间实现可移植性,以及在Windows系统中PE文件是如何被高效加载和执行的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Chinese:

1、PE (Portable Executable) 是微软Win32环境下可移植可执行文件的标准文件格式。

2、exe文件和dll文件的PE格式是完全相同的。

3、32位下的PE格式叫PE32,64位下的PE格式叫PE32+,PE32+并没有加入新的结构,改变的只是简单的将32位字段扩展成了64位。

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

5、PE文件中的数据结构一般都有32位和64位之分,一般在文件名称上会表现出来:比如IMAGE_NT_HEADER32IMAGE_NT_HEADER64

6、PE结构框架图一览

7、PE文件使用的是一个平面地址空间,所有代码和数据都被合并在一起,组成一个很大的结构。

8、文件的内容被分割为不同的区块,块中包含代码或数据。各个区块按页边界来对齐,区块没有大小限制,是一个连续的结构。

9、此外,每个块有自己在内存中的一套属性,比如说这个区块时否包含代码、时否只读或可读/写等。

10、PE文件不是作为单一内存映射文件被装入内存的。

11、Windows加载器(PE装载器)遍历PE文件并决定文件的哪一部份被映射,这种映射方式是将文件较高的偏移位置映射到较高的内存地址中。

12、当磁盘文件一旦被装入内存中,磁盘上的数据结构布局和内存中的数据结构布局是一致的。因此这样如果知道在磁盘的数据结构中找到一些内容,那么几乎都能在被装入到内存映射文件中找到相同的信息;但数据之间的相对位置可能改变,其某项的偏移地址可能区别于原始的偏移位置,不管怎样,所有表现出来的信息都允许从磁盘文件偏移到内存偏移的转换(相同的比例)。

13、PE文件磁盘与内存映像结构图:

14、PE文件加载到内存后,我们把内存中的这个PE文件称之为模块,上图所示的基地址就是该模块的头地址,也就是该模块的"句柄"(hModule)。该句柄可以通过Win32 api的GetModuleHandle获得。函数原型: HMODULE GetModuleHandle(LPCTSTR lpModuleName) 详细的请参考msdn http://msdn.microsoft.com/en-us/library/windows/desktop/ms683199(v=vs.85).aspx

15、文件偏移地址就是各个块相对于文件头的偏移量,虚拟地址也就是地址管理器为该程序分配的伪地址(分配在硬盘上,32位下是4G),相对虚拟地址则是虚拟地址与基地址的差值。

 

转载于:https://www.cnblogs.com/maplewan/p/PE%e7%bb%93%e6%9e%84.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值