【逆向】PE 文件加载核心流程

一、PE 文件加载完整流程(10步核心)

  1. 创建进程内核对象
    系统通过 CreateProcess 创建进程对象,分配PID、句柄、内存空间。
  2. 创建主线程对象
    分配主线程栈、线程环境块TEB,挂起等待加载完成。
  3. 读取并校验DOS头、NT头
    检查 MZ、PE 签名,判断是否有效32/64位PE。
  4. 解析区段表,映射内存
    按 Section 对齐内存,将代码、数据、资源分别映射到虚拟地址。
  5. 修复基址重定位(Relocation)
    首选基址被占用时,根据 .reloc 表修正绝对地址。
  6. 遍历导入表IAT,加载依赖DLL
    递归加载所有依赖DLL,解析函数地址,填入IAT。
  7. 执行DLL入口函数 DllMain
    按加载顺序依次调用 DLL_PROCESS_ATTACH。
  8. 初始化TLS(线程本地存储)
    执行TLS回调,早于EP执行,逆向常用来反调试。
  9. 设置入口点EP(AddressOfEntryPoint)
    定位程序真正开始执行的代码位置。
  10. 唤醒主线程,从EP开始执行
    进程启动完成,跑用户代码。

二、逆向必懂关键结构(一句话)

  • PEB:进程环境块,保存加载模块、IAT、LDR链表。
  • LDR:管理已加载模块链表(InLoad/InMem/InInit)。
  • IAT:导入函数地址表,调用系统函数全靠它。
  • Relocation:基址被占时修正绝对地址。
  • TLS:早于入口执行,常用于反调试。

三、总结

PE加载就是:校验头部→映射内存→重定位→填IAT→跑DllMain→执行TLS→从EP启动。

相关推荐
我就是不信39 分钟前
Java8 lambda 表达式 forEach 如何提前终止?
开发语言·windows·python
陈工大模型1 小时前
2026 Windows 免费压缩软件横向评测:7-Zip、WinRAR、Bandizip、NanaZip 与 Win 解压缩
windows·电脑·winrar·7-zip·web app·软件·win解压缩
燃烧的枫2 小时前
Windows 下 YOLO26 的 TensorRT C++ 部署
人工智能·pytorch·windows·计算机视觉·tensorrt·cuda·yolo26
钱栈up2 小时前
从 macOS 切回 Windows,我用 5 个免费工具把 80% 操作习惯搬了回来
windows·macos·策略模式
百事牛科技2 小时前
从局部到整体:Excel限制功能的几种实用设置
windows·excel
2601_949695593 小时前
3DM游戏运行库合集安装教程,缺少DLL文件这样修复
windows·游戏·电脑
Nontee4 小时前
Quartz 新手入门:定时任务的两个承诺
开发语言·windows·python
weixin_437961925 小时前
Docker安装(windows)
windows·docker·容器
kyle~5 小时前
Windows 多 AP 同名 Wi-Fi 网络异常问题复盘
网络·windows
持敬chijing5 小时前
白盒测试与代码审计-Claude Code Windows环境搭建
windows·安全·网络安全·网络攻击模型