在 QEMU 中记录动态指令跟踪或直方图?

nou*_*-as 5 linux assembly trace qemu riscv

  1. 我编写并编译了一个RISC-V Linux 应用程序

  2. 我想转储在运行时执行的所有指令(静态分析无法实现)。

是否可以从 QEMU(或其他工具)获取动态汇编指令执行直方图?

小智 5

对于指令跟踪,我使用-singlestep -d nochain,cpu,结合一些awk. 根据您运行的代码,这可能会变得非常缓慢和庞大。

至于你想获得统计数据,委托它来R/ numpy/ pandas/无论提取程序计数器之后。

用户“yvr18”关于该主题的演示视频可能涵盖 QEMU 跟踪在各个层面的某些方面(以及一些有趣的热图可视化)。


Pet*_*ell 4

QEMU 目前不支持对所有已执行指令进行此类跟踪。

  1. 我们今天拥有的最接近的是-d 开关下有各种调试日志记录,您可以将“从客户翻译到本机的指令”的跟踪与“执行的已翻译代码块”翻译结合起来,以找出是什么执行了,但这很尴尬。

  2. 或者,您可以尝试编写 gdbstub 接口脚本来执行“PC 上的反汇编指令;单步”之类的操作,这将(​​缓慢地!)为您提供所有已执行的指令。

注意:正在进行的工作是提高 QEMU 内省来宾执行的能力,以便您可以编写一个简单的“插件”,其中包含在来宾指令执行等事件上回调的函数;这样,编写已执行的客户指令的转储(或进行更有趣的处理)将相当容易,但这仍在进行中,因此尚不可用