PE是什么?
PE即 Portable Executable(可移植的执行体)。它是 Win32环境自身所带的执行体文件格式。它的一些特性继承自 Unix的 Coff 文件格式。“portable executable”(可移植的执行体)意味着此文件格式是跨win32平台的 : 即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格式。当然,移植到不同的CPU上PE执行体必然得有一些改变。所有 win32执行体 (除了VxD和16位的Dll)都使用PE文件格式,包括NT的内核模式驱动程序(kernel mode drivers)。研究PE文件格式给了我们洞悉Windows结构的良机
通常一个操作系统或者用户软件都是用二进制组成的, 有一种结构来约定这些二进制代表什么意义
当我们随便使用一个16进制编辑工具打开一个软件的时候,展示给我们的就是一个PE结构
将要学习的PE结构
一、PE为什么要分节?
1、节省硬盘空间.(这个不是决定的,由编译器决定)
硬盘通常都是1TB,2TB等等,而内存大的也就16G,32G。为什么还要节省硬盘空间呢?
在早起的编译器设置里,硬盘是非常昂贵的。通常移动存储设备也非常小(3.5寸软盘等等),为了方便携带,不占用空间,选择了对pe结构进行压缩,在现代编译器里,通常使用内存对齐和硬盘对齐一样为1000h
2、一个应用程序多开
当我们多开的时候,使用了共同的模块或者数据,如果不分节,那么会为每一个进程创建一个完整的pe结构,内存开销会变得无比巨大!
尝试解析一个PE结构的时候,我们可以直接在16进制编辑器里进行查看
学习PE可以做什么?
iat hook,导入表注入等等,pe结构是逆向的重中之重