写入内存时QEMU / QMP警报

时间:2017-03-21 05:45:21

标签: qemu xilinx

我正在使用QEMU为个人项目测试某些软件,我想知道程序何时写入内存。我提出的最佳解决方案是在负责写入内存的文件中手动添加print语句。如果我是正确的,这将需要重建文件的对象和构建QEMU。但我遇到了QMP,它使用JSON命令来操作QEMU,QEMU有一整套命令,可在此处找到:https://raw.githubusercontent.com/Xilinx/qemu/master/qmp-commands.hx
但看了之后我并没有真正看到任何可以做我想要的东西。我是一个新的程序员,并不是那么先进。并且想知道是否有人知道如何更好地解决这个问题。

2 个答案:

答案 0 :(得分:1)

历史上,QEMU中没有任何支持跟踪所有访客内存访问,因为在QEMU中没有任何一个地方可以轻松添加print语句来跟踪它们。这是因为更多的访客内存访问通过“快速路径”,我们直接生成本机主机指令,在数据结构(QEMU的TLB)中查找主机RAM地址并执行加载或存储。只有当这条快速路径在TLB中没有找到命中时,我们才会回到用C语言编写的慢速路径。

最近的trace-events事件'tcg guest_mem_before'可用于跟踪虚拟内存访问,但请注意它不会告诉您:

  1. 访问是成功还是出现故障
  2. 正在加载或存储的数据是
  3. 访问的物理地址
  4. 您还需要重建QEMU才能启用它(与大多数跟踪事件不同,默认情况下会编译到QEMU中,并且可以在运行时启用。)

答案 1 :(得分:1)

最近(2016年6月9日),主线QEMU增加了强大的跟踪功能。 请参阅 qemu / docs / tracing.txt 文件作为手册。

可以跟踪很多事件,请参阅 qemu / trace_events 文件列表。

我可以理解代码,“guest_mem_before”事件是您需要查看访客内存写入。

<强>详细信息: 在以下功能中放置了跟踪钩子:

  • qemu / tcg / tcg-op.c:tcg_gen_qemu_st *所有访客存储指令tcg-generation
  • qemu / include / exec / cpu_ldst_template.h 所有非tcg内存访问(获取/翻译时间,帮助程序,设备)