虚拟内存相关知识汇总(程序重定位)

前置知识:

Windows的内存可以被分为两个层面:物理内存和虚拟内存。其中,物理内存非常复杂,需要进入到Windows内核级别ring0才能看到。通常在用户模式下,用调试器看到的内存地址都是虚拟地址。

1.虚拟内存的定义

虚拟地址定义:用户编译程序时使用的地址称为虚拟地址或逻辑地址。其对应的存储空间称为虚拟内存或逻辑空间。

物理地址定义:计算机物理内存的访问地址则称为实际地址或物理地址,其对应的存储空间称为物理存储空间或主存空间。

程序重定位概念程序进行虚拟地址到实际地址的转换过程称为程序的重定位

2.PE文件与虚拟内存的映射

在程序重定位(漏洞分析)时,可能通常需要进行以下两种操作:

(1)通过静态反汇编工具看到的PE文件中某条指令的位置是相对于磁盘文件而言的,即文件偏移。但是我们常常还需要知道这条指令在内存中的位置,即虚拟地址。

(2)当我们在调试时看到的某条指令的地址是虚拟内存地址,我们就需要回到PE文件中找到这条指令对应的机器码。

总结:我们在调试漏洞或程序重定位的时候,需要将PE文件格式和反汇编结果联系起来。

3.程序重定位涉及到的重要概念

(1)文件偏移地址(File Offset):数据在PE文件中的地址叫文件偏移地址,这是文件在磁盘上存放时相对于文件开头的偏移。

(2)装载基址(Image Base):PE装入内存是的基址地址。默认情况下,"".exe"文件在内存中的基址是0x00400000,“.dll”文件是0x10000000,这些位置可以通过修改编译选项修改。

(3)虚拟内存地址(Virtual Address)**:PE文件".text“节中的指令被装入内存后的地址。**

(4)相对虚拟地址(Relative Virtual Address)**:相对虚拟地址是内存地址相对于映射基址的偏移量。**(注意:相对虚拟地址是偏移量,不是地址)

虚拟内存地址、映射基址、相对虚拟内存地址的关系:(重要)

相对虚拟内存地址(RVA)=虚拟内存地址(VA)-装载基址(IB)

4.PE文件和内存的映射关系图

通过以上示意图:我们对PE文件映射到内存有了直观的认识,但是我们发现将PE文件中的每个数据节映射到内存后,内存中对应的每个数据节变大了。这是因为PE文件数据的存放单位与内存数据存放单位不同造成的差异。

5.PE文件存储数据与内存存储数据的差异

(1)PE文件中的数据按照磁盘数据标准存放,以0x200字节为单位进行组织。当一个数据节不足0x200字节时,不足地方被0x00填充;当一个数据节大小超过0x200字节,会将下一个0x200字节分配给这个数据节使用。所以在PE文件中节的大小总是0x200的整数倍。

(2)同理,当代码装入内存后,将按照内存数据标准存放,并以0x1000字节为基本单位进行组织,当不足时会不全,当超过0x1000字节,会将下一0x1000块分配给改数据节使用,所以内存中的节总是0x1000的整数倍。

补充:分析PE文件可以使用工具——LordPE软件

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

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

相关文章

Java实现知乎热点小时榜爬虫

1.效果演示 1.1 热点问题列表 启动程序后&#xff0c;自动展示热点问题&#xff0c;并等待终端输入 1.2 根据序号选择想看的热点问题 输入问题序号&#xff0c;展示回答内容 1.3 退出 输入q即可退出程序 2.源码 2.1 pom.xml <?xml version"1.0" enco…

腾讯云怎么申请免费服务器?2024免费云主机申请教程

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

2024年腾讯云免费服务器申请教程,个人和企业均可领取

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

大数据数据分析-scala、IDEA、jdk之间的搭配关系

Scala主要是一门面向对象编程语言和函数式编程语言。 一、大数据框架&#xff08;处理海量/流式数据&#xff09; - ---以HADOOP 2. x为系列的大数据生态系统处理框架 离线数据分析&#xff0c;分析的数据为N1天数据 -----MapReduce 并行计算框架&#xff0c;分而治之…

Java数据结构二叉树练习

1.检查两棵二叉树是否都是相同的练习 我要求时间复杂度为1&#xff0c;所以我们不用前序中序后序是否都一样来进行判断 如何判断二叉树是否都是相同的子问题方式 先判断根节点是否相同 再判断左子树和右子树是否都是相同的 先用代码判断不相同的情况&#xff0c;都相同的化…

多线程JUC 第2季 wait和notify唤醒机制

一 wait和notify的区别与相同 1.1 wait和notify的作用 1) 使用wait()、notify()和notifyAII()时需要先对调用对象加锁。否则直接调用的话会抛出 IllegalMonitorStateExceptiona。 2) 调用wait()方法后&#xff0c;线程状态。由RUNNING变为WAITING&#xff0c;并将当前线程放置…

pyinstaller打包不显示DOS窗口

1 使用pyinstaller 打包 会不显示DOS窗口 打包的时候把-w去掉就行了

微信小程序开发学习笔记——4.1小程序官方api文档showToast提示框

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;https://www.bilibili.com/video/BV19G4y1K74d?p26&vd_source9b149469177ab5fdc47515e14cf3cf74 一、showToast属性 https://developers.weixin.q…

Chapter 16 Techniques of Design-Oriented Analysis: Extra Element Theorems

Chapter 16 Techniques of Design-Oriented Analysis: Extra Element Theorems 这一章介绍Middlebrook’s Extra Element Theorem (EET), 这是一个强力的分析复杂电路传输函数的工具. 16.1 Extra Element Theorem 对于一个已知的传输函数, Extra Element Theorem可以帮助算出…

Java学习笔记(15)

JDK7前时间相关类 Date时间类 Simpledateformat Format 格式化 Parse 解析 默认格式 指定格式 EE&#xff1a;表示周几 Parse&#xff1a;把字符串时间转成date对象 注意&#xff1a;创建对象的格式要和字符串的格式一样 Calendar日历类 不能创建对象 Getinstance 获取当…

Qt for Mac阻止MacOS系统休眠

Qt开发的应用程序如果电脑休眠了会影响软件的使用&#xff0c;因此在软件的使用过程中需要防止电脑休眠&#xff0c;在Win上有专门的API进行处理&#xff0c;在Mac上也必需使用Mac平台自身的API&#xff0c;本篇介绍在Mac平台下使用Qt阻止Mac系统休眠。 要调用Mac系统的API&am…

leetcode代码记录(整数拆分

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入…

PMP-第二章-项目运作环境

2.1 项目所受的影响 2.2 事业环境因素 Enterprise Environmental Factors(EEF) 定义&#xff1a;项目团队不能控制的、将对项目产生影响、限制或指令作用的各种条件 特点&#xff1a; 大多数项目管理过程的输入(例外&#xff1a;人力资源管理过程)可能提高或限制项目管理的灵…

[论文精读]Dynamic Coarse-to-Fine Learning for Oriented Tiny Object Detection

论文网址&#xff1a;[2304.08876] 用于定向微小目标检测的动态粗到细学习 (arxiv.org) 论文代码&#xff1a;https://github.com/ChaselTsui/mmrotate-dcfl 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&…

2024年腾讯云免费服务器申请领取入口

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

离散数学——(6)谓词逻辑的翻译,谓词的合式公式,约束变元及换名,闭式,谓词的等价,谓词的等价式和蕴含式

目录 1.谓词逻辑的翻译 2.谓词的合式公式 1.原子谓词公式 3.约束变元及换名 1.换名规则 4.闭式 5.谓词的等价 1.命题公式的推广 2.量词与联结词之间的关系 6.谓词的等价和蕴含式 量词分配率等价式 多重量词等价式 蕴含式 1.谓词逻辑的翻译 2.谓词的合式…

Python爬虫 Day1

要注意看网页的请求方式是request还是get 一、小型爬虫 &#xff08;爬百度首页&#xff09; from urllib.request import urlopen url "https://www.baidu.com" resp urlopen(url) print(resp.read().decode(utf-8)) print("over!") //&#xff01;&am…

【云原生进阶之数据库技术】第三章-PostgreSQL-管理-2.1-安装部署

1 PostgreSQL安装 数据库安装包:PostgreSQL数据库(https://www.postgresql.org/download/windows/) 数据库管理工具:Navicat for PostgreSQL (如V11.1) 数据库建模工具:PowerDesigner (如V16.5) 1.1 在Linux系统上配置安装PostgreSQL 1.1.1 下载安装 访问官网下载地址…

json-server库的使用,实现数据模拟

项目目录 安装 npm i -g json-server0.17.4 启动单个json服务&#xff0c;在cookbook目录下执行命令&#xff1a; json-server ./mock/a.json -p 9000 待实现 使用0.17.4版本即可。

从排序算法的艺术看C语言qsort函数的魅力:一场数据的时空穿越

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 目录 一 、回调函数 二、qsort函数 1.qsort函数排序整型数据 2.qsort函数排序结构数据 一 、回调函数 何为回调函数&#xff1…