gpt4 book ai didi

x86 - 从指令替换的角度看QEMU与KVM的交互

转载 作者:行者123 更新时间:2023-12-05 05:21:51 30 4
gpt4 key购买 nike

目前我正在研究 x86 指令集架构 (ISA) 的动态指令替换。到目前为止,我只针对基于 RISC-V 的处理器架构这样做。由于没有可以合成到 FPGA 的公共(public)域 x86 实现,我现在必须坚持使用可视化。

我的实验设置如下: guest 应用程序(使用 gcc 编译,无外部库)在 qemu-user-mode 下运行。 (我发现这篇文章确实很有帮助:QEMU - Code Flow [ Instruction cache and TCG])整个系统在 Fedora 25 Linux 操作系统上运行,并从最新的 git 源构建。

一些指令是(我自己的代码分析)内部派发给

static AddressParts gen_lea_modrm_0(CPUX86State *env, DisasContext *s, int modrm)

从那里,我无法判断此类指令发生了什么。

gen_nop_modrm(env, s, modrm); (translate.c:8108)

是调用方法。

我的主要目标是在指令被识别后添加指令,以延迟再次连续执行同一指令。

我了解了基于 KVM 的 QEMU 执行是如何工作的。显然,某种超监督是可能的(即使是 USB 交易:https://www.blackhat.com/docs/eu-14/materials/eu-14-Schumilo-Dont-Trust-Your-USB-How-To-Find-Bugs-In-USB-Device-Drivers-wp.pdf)架构(虽然非常复杂)到目前为止是直截了当的。

我感兴趣的是:

  1. 这些 gen_lea_modrm 方法捕获的指令是如何处理的。
  2. 可以观察到通过 KVM 简单传递的指令吗?
  3. 翻译缓冲区 (tb) 是分块的(据我所知),我可以扩展缓冲区以注入(inject)指令吗?
  4. 是否有任何内置工具可以进行指令分析

我用我的搜索词进行了如此彻底的搜索。任何类型的提示、提示或建议都会非常有帮助和感激。

最好的问候。

最佳答案

TCG 和 KVM 是 QEMU 完全独立的操作模式。如果您正在使用 KVM(通过命令行上的 -enable-kvm),那么所有 guest 指令要么由主机 CPU native 执行,要么(对于一些主要对模拟设备执行 I/O 的指令)在主机内核中模拟; QEMU 的 TCG 指令仿真(这是您在上面提到的代码)根本没有被使用过。相反,如果您在 TCG 模式(默认)下使用 QEMU,那么我们就是用户空间中的纯模拟器,不会使用主机 CPU 的管理程序功能。 qemu-user-mode 始终是 TCG 仿真,而不是 KVM。

为了回答您关于 TCG 代码的问题,gen_lea_modrm_0() 并未完全处理特定类别的指令。它只是处理这种形式的指令的解码部分——它查看指令的 modrm 字节,从指令流中加载一些其他字节,并返回一个结构,指示指令正在使用的寻址模式的详细信息.它还确保 PC 已在包括该立即数据在内的整个指令中前进。调用 gen_lea_modrm_0() 的代码然后使用寻址模式信息作为发射 TCG IR 操作的一部分来完成工作。 gen_nop_modrm() 是一种特殊情况,因为它是针对一种或另一种形式的 NOP 指令调用的。所以没有“真正的工作”要做,调用 gen_lea_modrm_0() 的唯一目的是确保我们已经将 PC 推进到 insn 编码的任何中间数据。我们不发出 TCG IR 操作,然后当生成的代码运行时,什么也没有发生,这正是您想要的 NOP...

关于x86 - 从指令替换的角度看QEMU与KVM的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41960895/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com