使用gdb调试temu插件

    temu是一款基于QEMU仿真器的动态二进制分析平台,temu允许用户自己编写插件,通过命令加载插件,实现自己的功能。temu的插件实际上是一个共享库,在用户输入load_plugin命令后,temu通过dlopen加载共享库,并且找到共享库中的init_plugin函数,获取用户提供的回调函数的地址,存放在一个结构体中,当特定的事件,比如:基本块、指令、内存和寄存器读写等事件发生时,调用相应的处理函数,temu插件可以根据几个例子和函数手册编写,但如果插件有错误,还是需要进行调试。
    环境:Ununtu 12.04 LTS,temu 1.0, gdb
    插件生成的时候要包含调试信息和符号信息。
    第一步:运行gdb,具体命令如下:
    gdb --directory=/home/jiao/temu-1.0/plugin_test5 --args temu -monitor stdio ./winxp.qcow2 -loadvm 3 -load-plugin /home/jiao/temu-1.0/plugin_test5/bin/Release/libplugin_test5.so
    说明:--directory用于指定插件的源代码所在的路径
          --args指定gdb的启动参数
          -load-plugin用于指定在temu启动时加载的插件
    第二步:忽略temu信号,默认情况下,gdb会处理信号,如果不调试信号可以将其忽略,命令如下:
    handle all noprint nostop
          这样gdb遇到的所有信号都直接传递给程序进行处理并且不打印信息
    第三步:设置断点
          在设置断点之前,可以先用l命令看一下gdb是否找到源文件路径。具体的断点设置方法参考gdb调试程序方法。
    第四步:运行r。

你可能感兴趣的:(temu,调试,平台)