在终端输入:
gdb ~/bitblaze/temu-1.0/tracecap/temu
或者直接设置好参数
gdb --args ~/bitblaze/temu-1.0/tracecap/temu ~/vm/winxp_sp2_by_qemu.img -monitor stdio -snapshot -m 512 -load-plugin ~/bitblaze/temu-1.0/sample_plugin/plugin.so
进入gdb后:
设置temu运行参数
(gdb) set args ~/vm/winxp_sp2_by_qemu.img -monitor stdio -snapshot -m 512 -load-plugin ~/bitblaze/temu-1.0/sample_plugin/plugin.so
遇到信号SIGUSR2不输出不停止
(gdb) handle SIGUSR2 noprint
设置断点(可以用命令l边查看源码边对感兴趣的地方设置断点,也可以像下面一样直接对源代码某行设置断点)
(gdb) b ~/bitblaze/temu-1.0/sample_plugin/main.c:156
运行
(gdb) r
用到的gdb命令
------------
r --运行
c --继续运行
b 行号或函数名 --设置断点
info b --查看断点
delete 断点号 --删除断点
disable 断点号 --使断点失效
l --查看源代码,直接按enter键执行上一条命令
n --单步(不进入)
s --单步(进入)
info source --查看当前文件路径
bt --查看当前函数栈
help 命令 --查看命令的帮助
------------
用l查看源代码首先显示的是文件vl.c,值得注意的是8985行调用的函数TEMU_init(),该函数位于文件TEMU_main.c,调用了插件源码sample_plugin/main.c里面的函数init_plugin().
接着可以对函数init_plugin()里面调用的其他函数设置断点以便追踪查看。
跟踪插件里面函数的执行很有用处,可以了解插件的编写,可尝试对如下函数下断点:
my_taint_propagate()
my_block_begin()
my_insn_begin()
temu 运行之后,终端界面会切换到qemu,当命中断点时又会切回gdb。