首页
论坛
课程
招聘
[原创]调试pintools之libdft64动态污点追踪
2022-5-9 02:46 5657

[原创]调试pintools之libdft64动态污点追踪

2022-5-9 02:46
5657

intel pin的官方手册中并没有给出调试pintools的方法,只列出了调试待插桩程序的方法。后来俺又找了好久的资料终于找到调试pintools的方法了,本文以track.cpp(libdft的一个示例程序)为例。
trak.cpp其实是一个pintools。为了调试pintools我们需要在pin启动的时候加一个参数
以前我们启动pintools是这样启动的

1
../../../pin -t ./obj-intel64/trace.so -logfile trace.out -- ../../../bin/mytest

mytest是你需要插桩的进程,trace.so是intel pin给的简单例子。
调试pintools我们需要在启动pintools的时候加一个参数 -pause_tool
等等,如果要调试,编译的pintool必须是-g选项的,make编译的时候需要加入debug选项
DEBUG=1

1
../../..pin -pause_tool 25 -t obj-intel64/track.so  -- obj-intel64/mini_test.exe cur_input

25是需要暂停的秒数,意思是在pin启动以后暂停多少秒等待gdb连接,cur_input是mini_test.exe需要打开的文件,同学们如果说调试其他pintool没有需要打开的文件就不需要加这个
因为libdft64是污点追踪程序。当mini_test.exe打开文件的时候就会激发hook
我们启动一下试试

1
2
3
4
5
6
7
  Pausing for 25 seconds to attach to process with pid 4961
  To load the debug info to gdb use:
*****************************************************************
  set sysroot /not/existing/dir
  file
  add-symbol-file /root/libdft64/tools/obj-intel64/track.so 0x7f0d92a34430 -s .data 0x7f0d92e458c0 -s .bss 0x7f0d92e4cf40
  *****************************************************************

我们看到屏幕上输出了这样的信息
我们在另外一个端口中打开gdb
再输入attach 4961

1
2
3
4
5
6
7
(gdb) attach 4961
Attaching to process 4961
Reading symbols from /root/libdft64/tools/obj-intel64/mini_test.exe...done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.27.so...done.
done.
0x00007f0d96ef4a57 in ?? ()
(gdb)

再输入set sysroot /not/existing/dir

1
2
3
4
5
(gdb) set sysroot /not/existing/dir
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
(gdb)

再输入add-symbol-file /root/libdft64/tools/obj-intel64/track.so 0x7f0d92a34430 -s .data 0x7f0d92e458c0 -s .bss 0x7f0d92e4cf40

1
2
3
4
5
6
7
8
(gdb)  add-symbol-file /root/libdft64/tools/obj-intel64/track.so 0x7f0d92a34430 -s .data 0x7f0d92e458c0 -s .bss 0x7f0d92e4cf40
  add symbol table from file "/root/libdft64/tools/obj-intel64/track.so" at
          .text_addr = 0x7f0d92a34430
          .data_addr = 0x7f0d92e458c0
          .bss_addr = 0x7f0d92e4cf40
  (y or n) y
  Reading symbols from /root/libdft64/tools/obj-intel64/track.so...done.
  (gdb)

现在调试信息已经被加载进来了,我们打个断点,然后c执行

 

gdb即便是-tui我也用不习惯,还是想给他套个界面,vscode+gdb并不支持attach类型的调试。。。。呃,其实还是支持的,不过launch.json文件中必须加入待调试程序的二进制文件,但是这里并没有(这里是gdb启动以后再attach,最后加载.so),所以vscode+gdb这个还是用不了。
欢迎感兴趣的同学加入秋秋裙一起研究~ 375678777


[2022冬季班]《安卓高级研修班(网课)》月薪两万班招生中~

最后于 2022-9-5 00:20 被北美老徐编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回