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

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

  1. 创建进程内核对象
    系统通过 CreateProcess 创建进程对象,分配PID、句柄、内存空间。
  2. 创建主线程对象
    分配主线程栈、线程环境块TEB,挂起等待加载完成。
  3. 读取并校验DOS头、NT头
    检查 MZPE 签名,判断是否有效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启动。

相关推荐
qq_369224333 天前
Windows全系通用!ntdll.dll文件丢失、报错、闪退问题的完整排查与修复教程
windows·dll·dll修复·dll丢失·dll错误
阿米亚波3 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
caimouse3 天前
Reactos 第 10 章 网络操作 — 10.3.1 NIC驱动
网络·windows
初圣魔门首席弟子3 天前
Node.js 详细介绍(知识库版)
windows·qt·node.js·知识库
CHENG-JustDoIt3 天前
AI工具 | 爆火开源项目Odysseus AI 工作台:从项目介绍、部署情况及其使用等多方位分析指南(含详细步骤)
大数据·人工智能·windows·python·ai·开源·github
kingbal3 天前
Windows:flutter环境搭建
windows·flutter
未若君雅裁3 天前
Python 数据容器详解,list、tuple、str、set、dict 到底怎么选
windows·python·list
CodeKwang3 天前
Windows 环境 OCCT 8.0 编译构建及与 Qt6 项目集成
windows·qt·opencascade
我是伪码农3 天前
小兔鲜1-25
linux·服务器·windows
vx-Biye_Design3 天前
springboot安阳地区研学旅游服务小程序-计算机毕业设计源码12785
java·vue.js·windows·spring boot·tomcat·maven·mybatis