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

CTF-PWN-QEMU-前置知识

文章目录

  • QEMU 内存管理(QEMU 如何管理某个特定 VM 的内存)
    • MemoryRegion gpa->hpa
    • FlatView:表示MR 树对应的地址空间
    • FlatRange:存储不同MR对应的地址信息
    • AddressSpace:不同类型的 MemoryRegion树
    • RAMBlock
    • 总体简化图
  • QEMU 设备模拟 (QEMU的模拟IO设备如何与VM交互)
    • QEMU 设备 IO 处理

QEMU 内存管理(QEMU 如何管理某个特定 VM 的内存)

QEMU:能够完成gva-gpa=hva-hpa地址的转换

MemoryRegion gpa->hpa

QEMU通过MemoryRegion管理虚拟机内存,每个MemoryRegion对应虚拟机一部分内存,同时还有相关对应Host的虚拟内存相关信息。不同MemoryRegion通过树状组织连接起来,连接到根MemoryRegion下,不同MemoyRegion树代表不同作用的内存,如系统内存空间(system_memorry)或IO内存空间(system_io)

MemoryRegion可以分为以下三种类型

  • 根级MemoryRegion:通过memory_region_init初始化,只是个管理用的(如system_memory),没有自已对应的部分内存
  • 实体MemoryRegion:通过memory_region_init_ram初始化,有对应的内存,大小为size
  • 别名 MemoryRegion:通过 memory_region_init_alias 初始化,没有自己对应的内存,作为一个实体的别名存在,通过alias成员指向对应的实体,alias_offset代表该别名MemoryRegion所代表内存起始GPA相对于实体 MemoryRegion 所代表内存起始GPA的偏移量

FlatView:表示MR 树对应的地址空间

struct FlatView {struct rcu_head rcu;unsigned ref;FlatRange *ranges;unsigned nr;unsigned nr_allocated;struct AddressSpaceDispatch *dispatch;MemoryRegion *root;
};

FlatRange:存储不同MR对应的地址信息

struct FlatRange {MemoryRegion *mr;hwaddr offset_in_region;AddrRange addr;uint8_t dirty_log_mask;bool romd_mode;bool readonly;bool nonvolatile;
};

AddressSpace:不同类型的 MemoryRegion树

两种,为address_space_memory 与 address_space_io

/*** struct AddressSpace: describes a mapping of addresses to #MemoryRegion objects*/
struct AddressSpace {/* private: */struct rcu_head rcu;char *name;MemoryRegion *root; //是对应树的根/* Accessed via RCU.  */struct FlatView *current_map; //对对应树的地址空间表示int ioeventfd_nb;struct MemoryRegionIoeventfd *ioeventfds;QTAILQ_HEAD(, MemoryListener) listeners;QTAILQ_ENTRY(AddressSpace) address_spaces_link;
};

RAMBlock

MR 对应的 Host 虚拟内存,每个RAMBlock表示单个实体MemoryRegion所占的Host虚拟内存信息,多个RAMBlock构成RAMList
每个RAMBlock都有一个唯一的MemoryRegion对应

总体简化图

大佬勿喷,后续学的更深会完善
在这里插入图片描述

QEMU 设备模拟 (QEMU的模拟IO设备如何与VM交互)

QEMU 在用户空间中独立进行设备模拟,虚拟设备被其他的 VM 通过 VMM 提供的接口进行调用。并且设备的模拟是独立于VMM

QEMU 设备 IO 处理

当VM访问某虚拟设备的物理内存/端口时候,控制权由VM转交到VMM,此时QEMU会根据触发VM-exit的事件类型进行不同的处理,即MMIO还是PMIO。
MMIO:对address_space_memory类的地址空间读写
PMIO: 对address_space_io类的地址空间进行读写

相关文章:

CTF-PWN-QEMU-前置知识

文章目录 QEMU 内存管理(QEMU 如何管理某个特定 VM 的内存)MemoryRegion gpa->hpaFlatView:表示MR 树对应的地址空间FlatRange:存储不同MR对应的地址信息AddressSpace:不同类型的 MemoryRegion树RAMBlock总体简化图 QEMU 设备模拟 &#x…...

iEnglish全国ETP大赛:教育游戏助力英语习得

“seesaw,abacus,sword,feather,frog,lion,mouse……”11月18日,经过3局的激烈较量,“以过客之名队”的胡玲、黄长翔、林家慷率先晋级“玩转英语,用iEnglish”第三届全国ETP大赛的16强,在过去的周末中,还有TIK徘徊者队、不负昭华队、温柔杀戮者队先后晋级。据悉,根据活动规则,在…...

租车系统开发/多功能租车平台微信小程序源码/汽车租赁系统源码/汽车租赁小程序系统

源码介绍: 多功能租车平台微信小程序源码,作为汽车租赁、摩托车租车平台系统源码,是小程序系统。基于微信小程序的汽车租赁系统源码。 开发环境及工具: 大等于jdk1.8,大于mysql5.5,idea(eclip…...

Nevron Vision for .NET 2023.1 Crack

Nevron Vision for .NET 适用于桌面和 Web 应用程序的高级数据可视化 Nevron Vision for .NET提供最全面的组件,用于构建面向 Web 和桌面的企业级数据可视化应用程序。 该套件中的组件具有连贯的 2D 和 3D 数据可视化效果,对观众产生巨大的视觉冲击力。我…...

基于Python的新浪微博爬虫程序设计与实现

完整下载:基于Python的新浪微博爬虫程序设计与实现.docx 基于Python的新浪微博爬虫程序设计与实现 Design and Implementation of a Python-based Weibo Web Crawler Program 目录 目录 2 摘要 3 关键词 4 第一章 引言 4 1.1 研究背景 4 1.2 研究目的 5 1.3 研究意义…...

Java架构师发展方向和历程

目录 1 导论2 架构师的三观培养3 架构师的遇到的困难4 架构师职责5 架构师之路6 架构师的发展方向7 应用领域架构师8 业务架构师9 系统架构师和企业架构师10 技术路线和演进规划11 一线大厂的技术生态拓张案例12 如何推进项目落地想学习架构师构建流程请跳转:Java架构师系统架…...

CUDA与GPU编程

文章目录 CUDA与GPU编程1. 并行处理与GPU体系架构1.1 并行处理简介1.1.1 串行处理与并行处理的区别1.1.2 并行处理的概念1.1.3 常见的并行处理 1.2 GPU并行处理1.2.1 GPU与CPU并行处理的异同1.2.2 CPU的优化方式1.2.3 GPU的特点 1.3 环境搭建 CUDA与GPU编程 1. 并行处理与GPU体…...

C# 执行Excel VBA宏工具类

写在前面 在Excel文档的自动化处理流程中,有部分值需要通过已定义的宏来求解,所以延伸出了用C# 调用Excel中的宏代码的需求。 首先要从NuGet中引入Microsoft.Office.Interop.Excel 类库 using Excel Microsoft.Office.Interop.Excel; 代码实现 /// &l…...

acwing算法基础之数学知识--求组合数基础版

目录 1 基础知识2 模板3 工程化 1 基础知识 (一) 组合数 C n k C_n^k Cnk​的计算公式, C n k n ⋅ ( n − 1 ) ⋯ ( n − k 1 ) 1 ⋅ 2 ⋯ k C_n^k\frac{n\cdot(n-1)\cdots(n-k1)}{1\cdot 2\cdots k} Cnk​1⋅2⋯kn⋅(n−1)⋯(n−k1)​ …...

SpringBoot中的classpath都包含啥

一句话总结:classpath 等价于 main/java main/resources 第三方jar包的根目录。下面详细解释。 参考:SpringBoot中的classpath...

新王加冕,GPT-4V 屠榜视觉问答

当前,多模态大型模型(Multi-modal Large Language Model, MLLM)在视觉问答(VQA)领域展现了卓越的能力。然而,真正的挑战在于知识密集型 VQA 任务,这要求不仅要识别视觉元素,还需要结…...

python之TCP的网络应用程序开发

文章目录 版权声明python3编码转换socket类的使用创建Socket对象Socket对象常用方法和参数使用示例服务器端代码客户端代码 TCP客户端程序开发流程TCP服务端程序开发流程TCP网络应用程序注意点socket之send和recv原理剖析send原理剖析recv原理剖析send和recv原理剖析图 多任务版…...

Axios 拦截器 请求拦截器 响应拦截器

请求拦截器 相当于一个关卡,如果满足条件就放行请求,不满足就拦截 响应拦截器 在处理结果之前,先对结果进行预处理,比如:对数据进行一下格式化的处理 全局请求拦截器 axios.interceptors.request.use(config > { /…...

Mysql Shell笔记

Mysql Shell部署 cd /usr/local/ tar -xvf /root/mysql-shell-8.0.35-linux-glibc2.17-x86-64bit.tar.gz chown -R mysql.mysql mysqlsh mysql-shell-8.0.35-linux-glibc2.17-x86-64bitmysqlsh登录退出 mysqlsh -uroot -S /data/3306/mysql.sock MySQL Shell 8.0.35 Copyrigh…...

Hive日志默认存储在什么位置?

在hive-log4j.properties配置文件中,有这么一段配置信息 hive.log.thresholdALL hive.root.loggerWARN,DRFA hive.log.dir${java.io.tmpdir}/${user.name} hive.log.filehive.log hive.log.dir就是日志存储在目录/tmp/${user.name}(当前用户名)/下 而hive.log就是h…...

Kafka 常用功能总结(不断更新中....)

kafka 用途 业务中我们经常用来两个方面 1.发送消息 2.发送日志记录 kafka 结构组成 broker:可以理解成一个单独的服务器,所有的东西都归属到broker中 partation:为了增加并发度而做的拆分,相当于把broker拆分成不同的小块&…...

单链表相关面试题--5.合并有序链表

5.合并有序链表 21. 合并两个有序链表 - 力扣(LeetCode) /* 解题思路: 此题可以先创建一个空链表,然后依次从两个有序链表中选取最小的进行尾插操作进行合并。 */ typedef struct ListNode Node; struct ListNode* mergeTwoList…...

SV-7042VP sip广播4G无线网络号角

SV-7042VP sip广播4G无线网络号角 1. 采用防水一体化设计,整合了音频解码、数字功放及音柱 2. 提供配置软件,支持SIP标准协议,通过SIP服务器能够接入现有综合通信调度平台系统,接受sip通信调度平台。融合第三方sip协议及sip服务器…...

基于OpenCV+MediaPipe的手势识别

【精选】【优秀课设】基于OpenCVMediaPipe的手势识别(数字、石头剪刀布等手势识别)_石头剪刀布opencv识别代码_网易独家音乐人Mike Zhou的博客-CSDN博客 import cv2 import mediapipe as mp import mathdef vector_2d_angle(v1, v2):求解二维向量的角度v…...

YOLO目标检测——无人机航拍行人检测数据集下载分享【含对应voc、coc和yolo三种格式标签】

实际项目应用:智能交通管理、城市安防监控、公共安全救援等领域数据集说明:无人机航拍行人检测数据集,真实场景的高质量图片数据,数据场景丰富标签说明:使用lableimg标注软件标注,标注框质量高,…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

零基础设计模式——行为型模式 - 责任链模式

第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

SpringTask-03.入门案例

一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...