[系统安全]PE文件头中的重定位表

PE加载的过程

任何一个EXE程序会被分配4GB的内存空间,用户层处理低2G的内存,驱动处理高2G的内存。

  • 1、双击EXE程序,操作系统开辟一个4GB的空间。
  • 2、从ImageBase决定了加载后的基址,ImageSize决定了程序有多大。
  • 3、然后加载DLL

大体流程:

复制代码
1、PE被执行时,装载器为进程分配虚拟地址空间,在此情况下,并不是把完整的PE文件载入到磁盘中,而是做一个简单的内存映射。

2、PE装载器在内核中创建进程对象和主进程对象以及其他的内容。

3、PE装载器搜索输入表,装载应用程序所用的动态链接库,方式类似于应用程序的装载。

4、PE装载器执行PE文件首部所指定地址的代码,开始执行应用程序。

PE文件头中的重定位表

程序被装入内存时,其基址是由字段IMAGE_OPTIONAL_HEADER32.ImageBase决定的。如果当装载时该位置已经被别的程序使用,那么操作系统就有权重新选择一个基地址。这个时候就需要对所有的重定位信息进行修正,而修正的依据就是PE的重定位表。

重定位表结构

重定位表为数据目录中注册的数据类型之一,其描述信息处于数据目录的第6个目录项中。

复制代码
typedef struct _IMAGE_BASE_RELOCATION {
    DWORD   VirtualAddress;    // 页存储的起始RVA
    DWORD   SizeOfBlock;      // 重定位块的长度
} IMAGE_BASE_RELOCATION;
typedef IMAGE_BASE_RELOCATION UNALIGNED * PIMAGE_BASE_RELOCATION;
相关推荐
初願致夕霞4 分钟前
《为什么公网访问不了内网?正向代理、内网穿透与 NAT 打洞一次说清》
linux·网络·tcp/ip·智能路由器
喜欢吃燃面12 分钟前
Linux网络编程深度解析:从Socket API到自定义协议设计
linux·网络·arm开发
xxy2224120 分钟前
Linux 网络编程入门(一):从 OSI 模型到 TCP Socket 编程
网络·tcp/ip·tcp
消失的旧时光-194322 分钟前
(KMP-Net进阶)第一篇:AppResult<T>——网络层到底应该 throw,还是返回统一 Result?
网络·ktor·kmp
PHP实战开发录1 小时前
企业微信客户标签同步冲突排查记录
mysql·系统安全·php·企业微信·开发
网安蟹佬霸1 小时前
区块链与智能合约安全实战:从Solidity审计到DeFi漏洞深度剖析
运维·前端·网络·安全·自动化·区块链·智能合约
今夕资源网2 小时前
NapCatQQ:把最难接的 QQ 协议层,变成一组能直接调用的接口
网络·qq·napcat·napcatqq·q协议·qq协议
GuoFeng.Wan2 小时前
深入理解经典蓝牙的channel
linux·服务器·网络
影寂ldy2 小时前
C# WinForm TCP-Socket
网络·tcp/ip·c#
sungtv2 小时前
电力变电站项目安全生产动画怎么做更贴合现场
安全·安全生产动画