首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将退出代码从QEMU来宾传递到arm64 / aarch64上的主机(相当于isa-debug- exit )

将退出代码从QEMU来宾传递到arm64/aarch64上的主机可以通过以下步骤实现:

  1. 首先,确保在QEMU来宾中使用了适当的退出代码。退出代码是一个整数值,用于指示程序的退出状态。常见的退出代码包括0表示成功,非零值表示错误或异常情况。
  2. 在QEMU来宾中,可以使用以下代码将退出代码传递给主机:
代码语言:c
复制

#include <stdlib.h>

#include <stdio.h>

#include <unistd.h>

#include <sys/ioctl.h>

#include <linux/kvm.h>

int main() {

代码语言:txt
复制
   int exit_code = 42; // 设置退出代码
代码语言:txt
复制
   // 使用KVM_RUN ioctl执行来宾代码
代码语言:txt
复制
   // 将退出代码传递给主机
代码语言:txt
复制
   ioctl(0, KVM_SET_REGS, &exit_code);
代码语言:txt
复制
   // 退出来宾程序
代码语言:txt
复制
   exit(exit_code);

}

代码语言:txt
复制

以上代码使用了KVM_RUN ioctl来执行来宾代码,并使用KVM_SET_REGS ioctl将退出代码传递给主机。

  1. 在arm64/aarch64上的主机中,可以使用以下代码来接收来宾传递的退出代码:
代码语言:c
复制

#include <stdlib.h>

#include <stdio.h>

#include <unistd.h>

#include <sys/ioctl.h>

#include <linux/kvm.h>

int main() {

代码语言:txt
复制
   int exit_code;
代码语言:txt
复制
   // 接收来宾传递的退出代码
代码语言:txt
复制
   ioctl(0, KVM_GET_REGS, &exit_code);
代码语言:txt
复制
   // 打印退出代码
代码语言:txt
复制
   printf("Exit code: %d\n", exit_code);
代码语言:txt
复制
   // 退出主机程序
代码语言:txt
复制
   exit(exit_code);

}

代码语言:txt
复制

以上代码使用了KVM_GET_REGS ioctl来接收来宾传递的退出代码,并将其打印出来。

这样,退出代码就可以从QEMU来宾传递到arm64/aarch64上的主机了。

请注意,以上代码仅为示例,实际使用时需要根据具体情况进行适当的修改和调整。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用QEMU搭建ARM64实验环境

1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.9.2 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 对于Linux爱好者,你是否也有这样困扰...注:这篇文章是之前写,当时最新内核版本是linux-5.9.2,不想做重复工作,现在基本都使用linux-5.11内核讲解代码,但是qemu环境搭建基本一致,且本文暂不涉及虚拟化讲解。...6.开始体验 1)创建共享目录 $ mkdir kmodules 用于主机qemu运行系统进行共享文件。...4)共享文件 前面已经支持了主机qemu系统共享目录,这个目录就是kmodules目录:通过mount可以查看被挂载到了qemu系统/mnt目录下 在主机内核源码目录kmodules目录中...文章这里关于QEMU体验最新Linux内核已经完成了,当然QEMU有多功能在此不在描述,目前配置QEMU环境已经足够内核学习和实际,只有大量内核源代码+在一种体系架构处理器实际内核才能真正去理解内核实现机理

3K20
  • ARM64 SMP多核启动(下)- PSCI

    4.支持psci情况 上面说了pin-table多核启动方式,看似很繁琐,实际并不复杂,无外乎主处理器唤醒处理器指定地址上去执行指令,说他简单是相对于功能来说,因为他只是实现了处理器启动,...仅此而已,所以,现在社区几乎很少使用spin-table这种方式,取而代之是psci,他不仅可以启动处理器,还可以关闭,挂起等其他核操作,现在基本arm64平台使用多核启动方式都是psci。...那么就开始我们正题: 下面代码角度分析服务注册处理流程: 4.1 el31处理总体流程 atf/bl31/aarch64/bl31_entrypoint.S: //架构相关 bl31_...时候会放置一些进程这些处理器,然后进程就可以再这些处理器欢快运行。...,然后处理器进入内核后需要自身做一些必要初始化,就进入idle状态等待有任务来 调度,我们主要以分析源代码方式讲解了spin-table和psci两种方式来启动多核,而arm64平台使用psci更为广泛

    2.8K20

    如何在 Mac 愉快使用 Docker

    Lima 方案直接看第五节.三、虚拟机方案目前在 M1 , 唯一可用或者说堪用虚拟机当属 Parallels Desktop, 至于其他 VBox、VMware 目前还不成熟; 如果纯 qemu...QEMU, 可能需要执行以下命令将 QEMU 升级 7.0:// 输入代码内容brew upgrade qemu为了使用 docker, 还需要通过 brew 安装一下 docker cli://...其本质利用 docker context 功能, 然后通过将虚拟机中 sock 文件挂载到宿主机, 并配置 docker context 来实现无缝使用 docker 命令.5.5、虚拟机调整某些情况下...lima 虚拟机为 aarch64 情况下仍然可以使用.除了这种 “速度较快” 跨架构运行方式, lima 还支持直接在 VM 中定义架构, 这样在 qemu 启动时则会直接 VM 系统层模拟目标架构..."# 定义本虚拟机需要使用哪个架构启动(对应会使用上面目标架构镜像)arch: "aarch64"Copy六、总结目前整体来看, Docker Desktop 在 mac 基本是很难用, Colima

    3.9K30

    Linux中binfmt-misc原理分析

    可以看出,这条规则会使用/usr/libexec/qemu-binfmt/aarch64-binfmt-P来执行arm64架构二进制文件,而这个文件其实是一个软链,实际指向是:/usr/bin/qemu-aarch64.../main.go进行编译,并将编译出来fake-runner拷贝/usr/local/bin目录下。...执行这条命令会修改/usr/libexec/qemu-binfmt/aarch64-binfmt-P文件软链/usr/bin/qemu-aarch64-static。...可以看出,qemu-aarch64-static是没有动态库依赖,也就是说,docker必须使用静态编译qemu才能工作。通过这种方式,可以实现在x86_64机器编译跨架构镜像目的。...0x06 在Linux运行Windows可执行文件 使用binfmt-misc机制可以支持直接在Linux运行Windowsexe文件,这是通过wine来实现

    77610

    使用Zig在arm64引导Uber基础设施

    在进行交叉编译时,主机和目标是不同平台(例如, macOS arm64 (M1) 编译成 x86_64 Linux)。有时候,目标机器可能无法编译代码,但可以运行。...基础镜像包含许多 Go 代码库编译出来内部工具。因此,我们遇到了一个先有鸡还是先有蛋问题:如何为我们第一个 arm64 构建主机编译工具?...例如: 当开发人员在 Go 代码库中定义了 Docker 镜像(使用 rules_docker,它相当于 Dockerfile,只是是在 Bazel 中使用),CI 将编译 x86_64 和 arm64...目前不可能在我们 Go 代码库中声明一个不能编译 arm64 Debian 包。 在能够将程序编译为 arm64 之后,我们开始采用所有可以存储、下载和执行原生二进制文件系统。...虽然可以在 arm64 硬件运行我们核心基础设施,但我们还没有准备好运行面向客户应用程序。我们下一步是在 arm64 试验面向客户应用程序,这样就可以测试它性能并决定未来方向。

    31730

    hypervisor kvm_docker vmware

    5. hypervisor组成元素 因此,虚拟机管理程序(无论类型如何)只是一个分层应用程序,它将机器硬件来宾中抽象出来。 通过这种方式,每个客户看到是一个虚拟机,而不是真正硬件。...中断必须由管理程序唯一处理,以处理实际中断或将虚拟设备中断路由客户操作系统。管理程序还必须处理来宾中发生陷阱或异常。 (毕竟,来宾故障应该停止来宾而不是管理程序或其他来宾。)...I/O 请求通过主机内核映射到在主机(管理程序)执行 QEMU 进程。 KVM 在 Linux 环境中作为主机运行,但支持大量客户操作系统,提供底层硬件虚拟化支持。...Lguest 方法还简化了整体代码要求,只需要在来宾主机操作系统中都有一个薄层。现在让我们探索这些变化并回顾 Lguest 环境高级架构。...还有一个抽象层(通过 paravirt_ops 实现)通过超级调用将特权操作路由主机操作系统。例如,来宾不能禁用中断,因此这些请求在主机操作系统中执行。

    63410

    反作弊如何检测系统仿真(2)

    由于许多开源项目无法正确处理LBR信息存储/加载,因此反欺诈可能会通过使用无条件退出指令(如)来强制VM退出CPUID。执行之后,他们将需要在恢复来宾操作之后检查LBR堆栈中获取最后一个分支。...但是,在虚拟化环境中,读取未实现地址可能会产生不确定结果。例如,在VMwareMSR地址25进行读取将提供随机数据,并且不会产生异常。...CRn访问正在退出| VMware错误 CRn Mask和VMX可用性 对于与CRx来宾/主机掩码中一位清除位相对应每个位置,目标操作数将加载CRx中相应位值。...TL; DR:在来宾/主机掩码中设置了一位地方,出现了阴影位。来宾/主机掩码中没有位时,将显示实际位。当来宾试图修改来宾/主机掩码中设置任何位时,会发生VM退出。...您还需要确定VM转换所需平均周期数,然后模拟计数器中减去该平均周期数。在现代处理器,典型平均周期为1.2k-2k。

    18.6K420

    虚拟机逃逸--QEMU案例学习

    去年,来自CrowdStrikeJason Geffner报告了一个严重漏洞,QEMU影响虚拟软盘驱动器代码,允许攻击者VM逃到主机。...在本文中,我们对CVE-2015-5165(内存泄漏漏洞)和CVE-2015-7504(基于堆溢出漏洞)以及工作漏洞进行了深入分析。这两种利用组合允许VM中跳出来,在目标主机上执行代码。...我们讨论了利用QEMU网卡设备模拟漏洞技术细节,并提供了可重用通用技术,以利用QEMU中未来漏洞。例如,利用共享内存区域和共享代码交互式bindshell。 2.什么是QEMU/KVM?...Memory Layout 为来宾分配物理内存实际QEMU虚拟地址空间中一个mmapp'ed私有区域。...在我们exploit中,我们需要配置需要DMA访问网卡设备。例如,我们需要提供Tx/Rx缓冲区物理地址来正确配置网卡设备. --- 客户物理地址QEMU虚拟地址空间。

    2K30

    Qemu 简述

    本质看,虚拟出每个虚拟机对应 host 一个 Qemu 进程,而虚拟机执行线程(如 CPU 线程、I/O 线程等)对应 Qemu 进程一个线程。...for (;;) { ioctl(KVM_RUN) switch (exit_reason) { case KVM_EXIT_IO: /* ... */ case KVM_EXIT_HLT...: /* ... */ } } // 这里退出并不一定是虚拟机关机, // 虚拟机如果遇到 I/O 操作,访问硬件设备,缺页中断等都会退出执行, // 退出执行可以理解为将 CPU 执行上下文返回到...所以,宏观看,源码结构主要包含以下几个部分: /vl.c:最主要模拟循环,虚拟机环境初始化,和 CPU 执行。.../tcg/arch/tcg-target.c:将 TCG 代码转化生成主机代码。 /cpu-exec.c:主要寻找下一个二进制翻译代码块,如果没有找到就请求得到下一个代码块,并且操作生成代码块。

    3.5K61

    使用 Docker Buildx 构建多种系统架构镜像

    您可以使用 Buildx 和 Dockerfiles 支持三种不同策略构建多平台镜像: 1 在内核中使用 QEMU 仿真支持 2 使用相同构建器实例在多个本机节点构建 3 使用 Dockerfile...中一个阶段交叉编译不同架构 如果您节点已经支持 QEMU,那么 QEMU 是最简单入门方式(例如,如果您使用是 Docker Desktop)。...要使binfmt_misc在主机操作系统注册 QEMU 二进制文件在容器内透明地工作,它们必须使用该fix_binary 标志进行注册。...( v20.10 版本开始,Docker CLI 所有实验特性命令均默认开启,无需再进行配置或设置系统环境变量。) buildx 命令属于实验特性,因此首先需要开启该特性。...(riscv64 目前还用不,但是已经支持)。

    1.3K20

    如何用10分钟生成多平台docker镜像?

    工作中需要在一台x86服务器写好golang程序源码生成linux/amd64、linux/arm64 docker镜像,查阅了下资料,这里记录一下操作过程。...x86可以运行arm64docker镜像,这里需要安装qemu-user-static,过程如下: 1 $ docker run --rm --privileged multiarch/qemu-user-static...oh dear/app # uname -mx86_64/app # exit# 运行下linux/arm64docker镜像,检查镜像cpu架构$ docker run --rm -ti go-mul-arch-build...oh dear/app # uname -maarch64/app # exit 本操作指引中涉及示例代码、脚本见github项目。...●Ceph Bulestore磁盘空间分配初探 ●搬运基础服务kubernetes,遇这3类大坑怎么破? · END · 记得文末点个好看鸭~ ---- 点就完事儿了! ?

    1.3K20

    这本书助你迎接万物互联浪潮

    该书作者团队将实验代码汇集并在 GitHub 发布,命名为 BenOS,方便读者学习交流。 在之前嵌入式开发工作中,我曾遇到过硬盘传输瓶颈问题。... 32 位 64 位跨越,也使得 ARM 处理器不再是低功耗、低性能代名词,支持 64 位运算,意味着它也能从事高性能计算工作。...再来体验一下 ARM64 “Hello, World”实现过程。 (1)将开发板与主机用串口线连接,并在主机上使用串口终端程序查看是否有信号。...(3) github上下载 BenOS 源码,并在 Linux 主机上配置交叉编译环境。编译得到 BenOS.bin 文件,复制 MicroSD 卡 boot 分区。...最近,美国商务部工业安全局宣布,8月15日开始正式对中国 EDA 软件断供。 这起事件影响,就是中国企业在芯片与传感器设计能力。

    1.2K40

    掌握GDB调试工具,轻松排除bug

    list(l): 列出源代码 quit(q): 退出 gdb 调试模式 进入 gdb 之后,输入 help 可以查看所有命令使用说明 2.1查看源码 list [函数名][行数] 2.2打断点调试 (...(gdb) l <-------------------- l命令相当于list,第一行开始例出原码。...此时敲入record后continue下一断点getbuf(),GDB就会记录main()getbuf()运行时信息。现在用rn就可以逆向地getbuf()调试main()。...这种方式适合bug处反向去找引起bug代码,实用性因情况而异。当然,它也是有局限性。像程序假如有I/O输出等外部条件改变时,GDB是没法“逆转”。...miDebuggerPath:gdb路径, 这里需要注意是,由于我们是arm64内核,因此需要用gdb-multiarch来进行调试 miDebuggerServerAddress:对端地址,qemu

    68800
    领券