【问题标题】:Interaction of QEMU and KVM from a perspective of Instruction Replacement从指令替换看QEMU和KVM的交互
【发布时间】:2017-06-17 02:02:52
【问题描述】:

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

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

一些指令(我自己的代码分析)在内部调度到

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) 已分块(据我所知),我可以扩展缓冲区以注入指令吗?
  4. 是否有任何内置工具可以进行指令分析

我用我拥有的搜索词彻底搜索了。任何类型的提示、提示或建议都会非常有帮助和赞赏。

最好的问候。

【问题讨论】:

    标签: x86 qemu kvm fedora-25


    【解决方案1】:

    TCG 和 KVM 是 QEMU 完全独立的操作模式。如果您使用 KVM(通过命令行上的 -enable-kvm),那么所有来宾指令要么由主机 CPU 本机执行,要么(对于一些主要对模拟设备执行 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...

    【讨论】:

    • 首先非常感谢您的详细解释。我实际上知道基于 TCG 和基于 KVM 的执行之间的区别是什么。但我不确定确切的线路在哪里。到目前为止。关于访客二进制解释/执行。我假设(因为调用者是 gen_nop_modrm(env, s, modrm))此类指令将与 NOP 匹配。所以最后,子程序将确保对齐对于下一条指令(指向 insn 等)是准确的。我假设根据您的意见,我将不得不深入研究监督执行之类的内容。
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2014-05-08
    • 1970-01-01
    • 2012-05-05
    相关资源
    最近更新 更多