PE格式的base reloc分区

news2024/11/17 14:18:00

https://0xrick.github.io/win-internals/pe7/

程序雕塑被编译之后,编译器假设可执行文件将会在特定=1的v z基地址被加载,这个地址被保存在image_optional_header的imagebase成员中,一些地址会被计算出来然后硬编码到可执行文件中

出于各种原因,可执行文件并不会被加载到他想要的那块地址上,而是被加载到另外的一个基地址上,这样的话,所有的硬编码地址都会失效,那么所有硬编码的地址都需要首先进行修复然后才可以被使用

一个保存了所有硬编码的值的列表,用于修复当映像加载到不同于预设的基地址的值,这个列表就叫做relocation table

位于.reloc分区中,重定位就是修复这些硬编码的值的过程就叫做重定位

举个例子,

int test = 2;
int* testptr = &test;

在编译时,编译器会假定一个基地址,比如说0x1000,编译器假定test变量的偏移量为0x100,那么基于这个设定,testptr的值就是0x1100,编译完成后,这个程序被启动,映像被加载到内存中,此时映像被加载到基地址为0x2000的地址,那么testptr的值就是错误的,加载器会修复这个值,通过计算真实基地址和预定义基地址的delta,0x2000-0x1000,那么testptr的新值就是0x2100,(0x1100+delta

在.reloc分区中,这个表被划分为多个块,每个块代表一个4k的页,每一个块的起始地址必须是32bit的边界

每一个块开始都是一个IMAGE_BASE_RELOCATION结构体,然后是任意个偏移entry

typedef struct _IMAGE_BASE_RELOCATION {
    DWORD   VirtualAddress;
    DWORD   SizeOfBlock;
} IMAGE_BASE_RELOCATION;
typedef IMAGE_BASE_RELOCATION UNALIGNED * PIMAGE_BASE_RELOCATION;

每个偏移entry是一个WORD,前4bit定义了relocation类型
后12bit存储了偏移量,相对于IMAGE_BASE_RELOCATION结构体中的VirtualAddress的偏移量

将偏移量加上rva之后,就可以获得一个硬编码的va,这个va就是需要修复的va(如果预定义的基地址没有命中的话)

在这里插入图片描述

现在我们已经知道每一个块以一个8字节的结构体开头,每一个entry占2字节,blocksize是0x28,那么就有0x10个entry,也就是16个

https://learn.microsoft.com/en-us/archive/msdn-magazine/2002/march/inside-windows-an-in-depth-look-into-the-win32-portable-executable-file-format-part-2

根据上面这篇文章的介绍,relocation table的作用是给出需要修改的地址所在的地址,也就是硬编码的地址所在的指令的地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

malmquist指数案例分析

传统的DEA模型可以反应静态的投入产出效率情况,但如果是面板数据,则需要使用malmquist指数进行研究。malmquist指数可以分析从t期到t1期的效率变化情况。Malmquist指数可分解为技术效率(EC)和技术进步(TC)&…

Java高手速成│Java程序怎样和数据库对话

从上一篇 Java高手速成│编写你第一个数据库程序 的例子中可以看出,Java和数据库的连接和对话离不开JDK库类,如java.sql包中支持数据库编程的各种API类、数据库软件DBMS、JDBC驱动软件或Java Connector以及你编写的数据库编程代码。 并且,在…

基础不牢,地动山摇系列 ------ 软硬通吃 unity常用API

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏 unity 实战系列 ⭐相关文章⭐ ——————————————————— -关于游戏剧情模式中用到的基础简单A…

第01讲:Git安装及基本操作

一、什么是Git 版本控制系统(VCS)是将『什么时候、谁、对什么文件做了怎样的修改』这样的信息以版本的形式保存并进行管理的系统。 简单来说,版本控制系统会去记录它所管理的文件的『历史版本』。 版本控制系统 “不是网盘,而胜…

linux常用命令(一)-路径切换及查看

切换路径-cd 我们可以使用cd(change directory,切换目录)的命令来进行目录切换 常规 其命令格式为 cd [相对路径或绝对路径] 例如: // 使用相对路径,切换到postfix目录下 cd ../postfix// 使用绝对路径切换到/var/…

Linux操作系统实验1——地址转换

实验要求: 1.在内核中先申请一个页面,使用内核提供的函数,按照寻页的步骤一步步的找到物理地址。这些步骤就相当于我们手动的模拟了mmu的寻页过程。(paging_lowmem.c) 2.通过mmap将物理内存的数据映射到一个设备文件中。 通过访问该设备就可以…

美图商业化2.0:探寻多元增长曲线

【潮汐商业评论/原创】 数字化智能化浪潮正席卷而来。与此前的工业革命、信息技术革命一样,这场箭在弦上的“数智化革命”核心也在于技术的突破与应用。 今年以来,AIGC作为AI技术在内容生产领域的应用,迎来了全球大厂的争相布局&#xff0c…

tensorflow2.x多层感知机模型参数量和计算量的统计

当创建了一个多层感知机模型后,如何调用接口获取该模型的参数量和计算量?首先,打印出模型结构,可通过graphviz模块实现 # 加载模型 model keras.models.load_model(modelPath) tf.keras.utils.plot_model(model, to_filemodel.p…

linux ubuntu 如何自动定时备份数据库到服务器 mysql mysqldump cron

linux ubuntu 如何自动定时备份数据库到服务器 mysql mysqldump cron 一、需求描述 我有一个小日记应用,从 2019 年到 2022 年已经出现了两次比较严重的数据丢失的情况,一次是服务器错误,一次是人为。 所以我急切需要它能自己自动备份数据库…

基于servlet+jsp+mysql实现的java web校园车辆管理系统

一、项目简介 本项目是一套基于servletjspmysql实现的java web校园车辆管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严…

WebDAV之葫芦儿·派盘+Orgzly

Orgzly 支持WebDAV方式连接葫芦儿派盘。 给大家推荐一款Android 上的笔记与 todo 待办事项相融合的应用,它通过树形结构来记录笔记,并且只需要对笔记进行 TODO 标记就能变身任务管理,十分方便。 Orgzly是一款多功能的应用,更确切地说,它是一款 org 文件编辑器。Org 和 …

ArcGIS基础实验操作100例--实验12以线要素分割面要素(二)

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验12 以线要素分割面要素(二) 目录 一、实验背景 二、实验数据 …

C++ | 缺省参数

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

UDS - 10.2 DiagnosticSessionControl (10) service

来自:ISO 14229-1-2020.pdf 10.2.1 服务描述 DiagnosticSessionControl服务用于在服务器中启用不同的诊断会话。 诊断会话启用服务器中的一组特定诊断服务和/或功能。该服务提供了服务器可以报告数据链路层特定参数值的能力,这些参数值对于已启用的诊断…

Python语言快速入门下1

目录 一、函数 【函数定义与调用】 【形参与实参】 【return语句】 【变量作用域】 【可变长度参数】 二、lambda表达式 三、案例 【例题1】 【例题2】 【例题3】 【例题4】 【例题5】 一、函数 【函数定义与调用】 【例子】一个穷小子想娶富家之女,她…

【正点原子FPGA连载】第四章开发环境搭建摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第四章开发环境搭…

HPA与VPA

写在前面 语雀原文阅读效果更佳: 6、HPA与VPA 语雀 《6、HPA与VPA》 HPA与VPA 1、HPA 在前面的学习中我们使用了一个 kubectl scale 命令可以来实现 Pod 的扩缩容功能,但是这个是完全手动操作的,要应对线上的各种复杂情况,我…

ELK收集交换机日志

1、环境介绍 交换机:华为、思科、H3C Elasticsearch版本:7.13.3 kibana版本:v 7.13.3 logstash版本:7.17.8 2、ES集群配置 参考: https://blog.csdn.net/zyj81092211/article/details/118935274 3、kibana配置 参考 …

实战 | 使用图像处理改善OCR结果(详细步骤 + 源码)

导 读 本文主要介绍一个通过图像处理改善OCR识别结果的实例,并给出详细步骤和源码。 背景介绍 在很多情况下,文字识别会遇到困难。比如非单一的背景、杂讯干扰、文字部分缺失等。如下图所示: 我们希望识别图中的黑色文字(12-14),但背景较复杂且存在其他干扰,如果直接…

rabbitmq基础8——持久化、存储机制、ETS、队列结构、消息状态、内存告警、磁盘告警

文章目录一、持久化1.1 持久化对象1.1.1 交换器持久化1.1.2 队列持久化1.1.3 消息持久化1.2 总结要点二、存储机制2.1 存储方式2.2 存储文件2.2.1 队列索引.idx文件2.2.2 消息存储.rdq文件2.2.3 垃圾回收机制(文件合并)2.3 存储原理2.3.1 生产者消息写入…