PE结构 (可执行文件布局)
现代操作系统的内存分配以页为单位进行管理,而页通过段进行管理,组成了段页式内存管理。 在 x64dbg 内存布局中可以看到程序的 结构布局 信息
以微信 wecall.dll 为例
wecall.dll
".textbss" 可执行代码
".text" 可执行代码
".rdata" 只读的已初始化数据
".data" 已初始化的数据
".pdata" 异常信息
".idata" 导入表
".msvcjmc"
".00cfg"
".rsrc" 资源
".reloc" 基重定位数据
区段分类
在 ida 可以按 CTRL + S 可以查看, 每个区段的大小 偏移量
在可执行文件的PE格式中,通常包含多个区段,这些区段用于存储不同类型的数据和代码。以下是常见的PE区段及其分类和详细说明:
代码段 (Code Section):
- 名称:.text
- 分类:代码段
- 说明:存储程序的机器代码,即可执行的指令部分。这是程序的主要执行逻辑所在。
数据段 (Data Section):
- 名称:.data
- 分类:数据段
- 说明:存储初始化的全局和静态变量,包括已经赋值的数据。
只读数据段 (Read-Only Data Section):
- 名称:.rdata
- 分类:数据段
- 说明:存储只读的全局和静态变量。通常用于存放只读数据,如常量字符串、格式化字符串等。
未初始化数据段 (Uninitialized Data Section):
- 名称:.bss
- 分类:数据段
- 说明:存储未初始化的全局和静态变量。这些变量在程序启动时会被清零。不占用实际的文件空间,只在运行时分配内存。
导入数据段 (Import Data Section):
- 名称:.idata
- 分类:数据段
- 说明:存储程序所需的外部函数或库的引用信息,用于动态链接。包含导入表,用于描述需要从其他DLL中导入的函数。
导出数据段 (Export Data Section):
- 名称:.edata
- 分类:数据段
- 说明:存储可执行文件中需要对外导出的符号信息,用于动态链接。包含导出表,用于描述该文件导出的函数和数据。
资源数据段 (Resource Data Section):
- 名称:.rsrc
- 分类:数据段
- 说明:存储程序所需的资源数据,如图标、位图、字符串等。这些资源可以在运行时通过API访问。
重定位数据段 (Base Relocation Data Section):
- 名称:.reloc
- 分类:数据段
- 说明:存储可执行文件的重定位信息,用于修正在内存中加载的地址。当可执行文件被加载到非原始地址时,这些重定位信息用于将地址调整到正确的位置。
异常处理数据段 (Exception Handling Data Section):
- 名称:.pdata
- 分类:数据段
- 说明:存储异常处理信息,用于C++异常或SEH(Structured Exception Handling)。包含在C++代码中使用的异常处理表。
调试数据段 (Debug Data Section):
- 名称:.debug
- 分类:数据段
- 说明:存储调试信息,用于调试器和其他调试工具。包含符号表、源代码信息、调试信息等。
这些区段是PE格式中常见的一些区段,但实际上可以根据具体的编译器和链接器选项进行定制,因此可能会有更多不同的区段。不同的编程语言和工具链可能会产生不同的区段组合。
文件对齐
为什么要修正内存对齐?
文件对齐 FileAlignment 和区块对齐 SectionAlignment的缘故,在磁盘中的PE文件的块与块表 块与块之间有许多的空白间隙,这些间隙以0为填充,在文件执行中这些空白是没有意义的,所以我们就可以利用这段空白插入我们想执行的一些代码。
PE中规定了三类对齐:数据在内存中的对齐、 数据在文件中的对齐、资源文件资源数据的对齐 1.内存对齐 由于windows操作系统对内存属性的设置以也为单位,所以通常情况下,节在内存中的对齐单位必须至少一个页的大小。 对于32的windowsxp系统来说,这个值是4KB(1000H) 对于64位操作系统来说,这个值就是8KB(2000H) 2.文件对齐(磁盘存储时候的对齐) 文件对齐要小于内存对齐,通常会一个物理扇区的大小作为对齐粒度的值。 512字节 十六进制表示位200H 通常情况下,PE在内存中的尺寸要比文件中的尺寸大
3.资源数据对齐 在资源文件中,资源字节码部分一般要求以双字(4个字节)方式对齐,以后会学习。
pe文件对齐 PE文件笔记十二 修正内存对齐 官页 wiki od ce找数据总结 [调试逆向] CE教程:进阶篇 CE Tutorial Games gtutorial ](https://www.52pojie.cn/forum.php?mod=viewthread&tid=915447)