PTRACE
系统调用更强大,更通用的功能。 PTRACE
的问题在于它只能在您自己的系统和体系结构上运行。一个想法是运行具有不同操作系统和(可能是)一个虚拟机(或更优的模拟器)的虚拟机。 )上的不同体系结构。
在寻找理想的候选对象时,我发现了QEmu监视器界面和一些使用QEmu作为OS /体系结构模拟器来收集跟踪的项目: br />头像
DECAF(TEMU的前身)
PANDA
S2E(似乎是Avatar的子组件?)
TEMU(Bitblaze)
我想要的功能类似于
PTRACE
接口(冻结执行,逐步运行,内存和寄存器读写)等,都具有多个OS和多个建筑。 我的问题:
我忘了列表中的一些类似项目吗?
QEmu监视器接口可以提供与系统/体系结构无关的
PTRACE
接口吗?就是我想要的?而且,如果没有,我在QEmu中实现它时可能遇到的主要问题是什么?#1 楼
PANDA开发人员在这里。我认为实际上,您想要的大多数东西都由QEMU的本机gdbstub支持。如果使用-s -S
选项启动QEMU,它将在端口1234上侦听传入连接,并提供所需的功能,包括:使用
si
命令的单步操作使用
info reg
和(例如)set $edi = 0x40c8c39
注册获取/设置用
x
命令读取存储器内容使用
set *(char *) 0x1a5f2c0 = 0xd9
修改存储器使用(例如)
break *0x826e2671
的断点因此,使用一些gdb脚本,我认为您应该能够使用普通的gdb和QEMU获得所需的功能。
target remote :1234
命令使用Windows 7 32位VM和gdb。评论
此设置可以告诉我一条指令是读取还是修改内存(以及读/写的值?)。我想PANDA可以做到,对吧?
– gogo_gorilla
16 Mar 15 '16 at 19:51
您可以像通常使用gdb一样设置内存或指令断点。您将无法使用这种方法观看每个内存的读取,但是可以使用PANDA。
–布伦丹·多兰·加维特(Brendan Dolan-Gavitt)
16年3月15日在20:21
我在这里发布了一个有关PANDA的相关问题:reverseengineering.stackexchange.com/questions/12313/…
– gogo_gorilla
16年4月1日在8:35
#2 楼
过去的TEMU用户。也许您应该尝试更多地了解TEMU(我不是),以防止重复已经完成的工作。 PTRACE仅记录系统调用转换,但是如果您使用QEMU,则更好的粒度是基本块。不确定TEMU是否有能力执行此操作,其思想是每个基本块都可以唯一地标识所采用路径的一部分,而无需在寄存器/值级别上进入较低级别的详细信息。即,比syscall更少的噪音,但更精致。知道基本块的每个入口和出口点处的寄存器的完整状态,几乎可以确定性地确定整个执行跟踪的路径是什么,减去所有中间寄存器的值,如果需要可以导出这些值。 (“几乎”,因为可能发生诸如中断的异步事件)。更新:
还有另一个选项:QEmu + Lttng,但是由于默认情况下Qemu不提供该功能,您必须下载QEMU源代码并进行编译以启用lttn-ust跟踪。
http://linuxmogeb.blogspot.sg/2014/08/how-to-trace-qemu- using-lttng-ust.html
评论
你实现了吗?您可以以此来更新您的经历吗?