当前位置: 首页 > article >正文

[系统安全]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;

http://www.kler.cn/a/403100.html

相关文章:

  • VMware Workstation 17.6.1
  • 泷羽sec-星河飞雪-shell-7
  • 043 商品详情
  • 02. Python基础知识
  • sql注入报错分享(mssql+mysql)
  • 主要用于图像的颜色提取、替换以及区域修改
  • springboot-事务失效以及排查过程
  • wife_wife
  • 设计探测1飞伏的装置可能吗?
  • gitlab ci/cd搭建及使用笔记(三)
  • 常见协议所对应的漏洞
  • 如何在 Ubuntu 上使用 Docker 部署 LibreOffice Online
  • 基于isSpring的PPT转换
  • 计算机视觉中的双边滤波:经典案例与Python代码解析
  • Win本地部署大模型推理API封装调用
  • 关于win11电脑连接wifi的同时,开启热点供其它设备连接
  • lua脚本使用redis
  • word设置交叉引用快捷键和居中快捷键
  • Streamlit + AI大模型API实现视频字幕提取
  • 统计机器学习——线性回归与分类
  • CSS 3D球形旋转
  • shell脚本2---清风
  • StructRAG Boosting Knowledge 论文笔记
  • Genuine-OJ 是一个现代化的在线评测系统(Online Judge, OJ)
  • 计算机毕业设计 | SpringBoot+vue汽车资讯网站 汽车购买咨询管理系统(附源码+论文)
  • Android开发实战班 -应用架构 - MVVM 架构模式