0

我正在尝试在 QEMU / VFIO 环境下对某些 PCI 设备进行逆向工程,并且我想跟踪该卡对物理内存的所有 I/O 操作。该卡利用 PCI 总线主控并将内容写入其他设备,并且很可能从主机 RAM 读取驱动程序预处理的一些数据。至于现在,我只能跟踪对卡 MMIO 空间的所有读写(从主机到设备的数据传输),遗憾的是我错过了 R/W 操作的第二个方向(设备从主机获取数据)。

是否有可能跟踪 PCI 设备在物理内存上执行的 I/O 操作,即 QEMU / VFIO 环境下的直接 I/O 和/或 DMA 传输?我已启用对以下事件的跟踪:

vfio_pci_read_config vfio_pci_write_config vfio_region_write vfio_region_read vfio_intx_interrupt vfio_intx_eoi vfio_intx_update vfio_intx_enable vfio_intx_disable vfio_msi_interrupt vfio_populate_device_config vfio_region_mmap

是否有任何事件允许做可以在 QEMU 中注册的事情?先感谢您。

4

1 回答 1

0

PCI 设备被视为外围设备,这意味着它有自己的处理单元并运行自己的固件。对 mmio 区域的访问发生在外围设备中,因此无法使用 QEMU 进行跟踪。

可以在 QEMU VM 中跟踪对 mmio 的读/写,因为执行的内存指令会调用回调函数来处理 VFIO 中的 mmio 访问。

由于 PCI 设备在其固件中读/写 mmio 区域(由设备的处理单元执行),因此您无法跟踪主机端的事件。

我认为您可以做的是在逆向工程期间将 mmio_read 值与 mmio_write 值进行比较。

于 2020-06-03T16:01:31.270 回答