RVA和FOA转换---三

文章目录

    • 修改初始值
    • RVA和FOA转换
      • RVA
      • FOA
      • RVA和FOA的关系

本次内容包含如何修改程序中的初始值,和如何转换内存和文件的地址。

修改初始值

问题
我们写了一个程序,可以输出一个结果,那么我们可以通过修改PE文件来改变这个输出结果吗?
对于有初始值的全局变量来说,是可以的。

我们在给全局变量赋初始值时,会在PE文件中记录其数据
没有初始值,无法找到

这里我们有如下一个程序:

#include<stdio.h>
int a = 0x12121212;
int main() {printf("a=(十六进制)%X\n", a);return 0;
}

执行结果如下:
在这里插入图片描述

以十六进制输出 a 的值。我们以二进制打开PE文件.这里我们将a先设置的特殊一点,便于寻找。
在这里插入图片描述
这里我们将结果12121212修改为00000000,然后另存为新文件。

在这里插入图片描述
然后再运行两个文件,发现值已经被修改:
在这里插入图片描述

RVA和FOA转换

RVA

RVA是PE文件在内存中的相对虚拟地址

比如全局变量a,在文件中是一个地址,然后映射到内存中,会有一个新地址,此时这个地址相对与基地址(也就是imageBase)的偏移量就是RVA。

FOA

FOA在PE文件在文件中的相对地址

全局变量a在文件中的地址,相对于文件起始地址的偏移量,上图中为B400h。

RVA和FOA的关系

由于两个都是相对偏移量,同时PE文件中又会记载文件对齐和内存对齐的地址信息。所有我们可以得到:

  1. 在文件头中时:RVA=FOA
  2. 在节数据中时:RVA - 内存中所在节的起始数据 = FOA - 文件中所在节的起始地址

在这里插入图片描述
在上面那个程序中,扩展PE头中,内存基址为02 00 00,内存对齐06 00 00,文件对齐0.
在这里插入图片描述
在标准PE头中记录节表数量
然后再去PE中查找节表的长度,所在节表是第几个。最后根据内存所在地址相对当前节偏移量 = 文件所在地址相对当前节偏移量就可以得到内存中的地址

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

group by和min、max函数一起使用

原始数据 查询每科的最高分数 -- 查询每科最高分数 select stuId,classId,stuName,max(score) from student_score group by classId 错误的结果 这个显然不是对的&#xff0c;或者说不是我们想要的结果&#xff0c; 我们想要的结果是 原因是什么呢&#xff1f;我们知道使用…

Vue3学习日记 Day1

一、简介 1、简介 Vue3是新的默认版本&#xff0c;拥有更快的速度&#xff0c;更好的语法 二、使用create-vue搭建Vue3项目 1、创建项目 1、介绍 create-vue是Vue官方新的脚手架工具&#xff0c;底层切换为了vite&#xff0c;为开发提供极速响应 2、使用 2.1、确定环境条件 2…

局部路径规划算法 - 人工势场法

人工势场法 参考&#xff1a; &#xff08;1&#xff09;人工势场法 &#xff08;2&#xff09;人工势场法路径规划算法&#xff08;APF&#xff09; 1 算法概述 1.1 算法简介 1986 年 Khatib首先提出人工势场法&#xff0c;并将其应用在机器人避障领域&#xff0c;而现代汽…

数据库SQLServer——插入数据

1.插入数据语法 INSERT INTO table_name(column_list) VALUES (value_list); --简写 INSERT INTO table_name VALUES (value_list);INSERT table_name VALUES (value_list); 2.实例 2.1基本形式&#xff08;不安全&#xff09; insert into 学生表01 values(李明,男,1.70) …

如何解决网络中IP地址发生冲突故障?

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 1、个人IP地址冲突解决方案 首先winR&#xff0c;调出…

Feign

Feign 1 Feign介绍2 Feign远程调用2.1 Feign替代RestTemplate2.2 自定义配置2.3 Feign使用优化2.4 最佳实践 总结 1 Feign介绍 Feign是一个声明式的Web服务客户端&#xff0c;它使得编写Web服务客户端变得更加简单。它是Spring Cloud中的一个模块&#xff0c;用于简化对REST服…

【Leetcode-19.删除链表的第N个节点】

题目详情&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1…

中国巨型地下中微子实验室准备探究宇宙奥秘

JUNO设施将于今年上线&#xff0c;将有助于确定哪种类型的中微子质量最高 - 这是物理学中最大的谜团之一。 中国江门地下中微子天文台&#xff08;JUNO&#xff09;的建设工作。朱诺号希望在2024年底之前探测到中微子。图片来源&#xff1a;Qiu Xinsheng/VCG via Getty 开平区…

SpringBoot ApplicationListener实现发布订阅模式

文章目录 前言一、Spring对JDK的扩展二、快速实现发布订阅模式 前言 发布订阅模式(Publish-Subscribe Pattern)通常又称观察者模式&#xff0c;它被广泛应用于事件驱动架构中。即一个事件的发布&#xff0c;该行为会通过同步或者异步的方式告知给订阅该事件的订阅者。JDK中提供…

SQ—inner join、left join、right join区别

关联表查询常用关键字join 假设现有两张表&#xff1a;subject和score left join 基表&#xff1a;左表 表1左连接表2&#xff0c;以左为主&#xff0c;表示以表1为主&#xff0c;关联上表2的数据&#xff0c;查出来的结果显示左边的所有数据&#xff0c;然后右边显示的是和…

2024全新红娘交友系统定制版源码 | 相亲交友小程序源码 全开源可二开

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 全新红娘交友系统定制版源码 | 相亲交友小程序源码 全开源可二开 定制版红娘交友平台小程序源码&#xff0c;很牛逼的东西&#xff0c;虽然是小程序&#xff0c;但是有700多M大&…

10大漏洞评估和渗透测试工具【附安装包】

1、Netsparker Security Scanner 专为企业设计的强大的漏洞扫描和管理工具&#xff0c;它可以检测和利用 SQL 注入和 XSS 等漏洞。 https://www.netsparker.com/product/ 2、Acunetix Scanner 针对中小型企业的 Web 应用程序漏洞扫描程序&#xff0c;但也可以扩展到更大的组…