继续介绍pin未介绍的功能,包括在linux下的特殊功能:
功能介绍续:
1、在windows下通过名称查找函数:w_malloctrace查找RtlAllocateHeap(改函数从堆分配一个内存块)函数,并返回其输入参数和输出,替换RtlAllocateHeap即可对其他函数进行监测。
2、监测多线程程序: pintool中使用用ThreadStart()和ThreadFini()函数可以对对多线程函数进行监测
3、对缓存区的数据进行处理:pin提供了一个针对缓存区的应用程序接口 Faster Buffering APIs,如果有参数是存在缓存区的,可以用 其进行处理
4、静态监测:pin提供了静态监测工具,可以对程序进行静态监测,如staticcount。
5、将pin从应用程序中分离:pintool使用PIN_Detach函数可以使pin放弃对程序的控制。
6、对子进程进行监测:pin提供的Pin_AddFollowChildProcessFunction()可以定义一个在程序
调试在pin中运行的程序:
在linux环境下使用gdb:
将目录更改为pintool所在目录,用管理员权限启动gdb:sudo gdb,否则会不能连接,用gdb调试的时候,不能使用"run"命令,使用run命令会使gdb回到原程序进行调试,得不到pintool的数据。
在另一个窗口中启动pin,这时需要加入命令行参数 pause_tool n,n为数字表示暂停n秒,
运行:
lovesunshine@ubuntu:~/pin$ pin -injection child -pause_tool 10 -t /home/lovesunshine/pin/source/tools/ManualExamples/obj-ia32/itrace.so -- /home/lovesunshine/sample/gdb_sample
显示:
Pausing to attach to pid 3137
To load the tool's debug info to gdb use:
add-symbol-file /home/lovesunshine/pin/source/tools/ManualExamples/obj-ia32/itrace.so 0xb712ffe0 -s .data 0xb7458240 -s .bss 0xb7458cc0
这时在gdb窗口中输入:
attach 3137
运行后:
Attaching to process 3137
Reading symbols from /home/lovesunshine/sample/gdb_sample...done.
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/ld-linux.so.2
0xb779c424 in __kernel_vsyscall ()
再将pin窗口的命令复制到gdb窗口:
add-symbol-file /home/lovesunshine/pin/source/tools/ManualExamples/obj-ia32/itrace.so 0xb712ffe0 -s .data 0xb7458240 -s .bss 0xb7458cc0 运行:
add symbol table from file "/home/lovesunshine/pin/source/tools/ManualExamples/obj-ia32/itrace.so" at
.text_addr = 0xb712ffe0
.data_addr = 0xb7458240
.bss_addr = 0xb7458cc0
(y or n) y
Reading symbols from /home/lovesunshine/pin/source/tools/ManualExamples/obj-ia32/itrace.so...(no debugging symbols found)...done.
若要推出,在gdb窗口中输入detach
windows下用visual studio调试:pin的输入不变,然后启用vs的Debug ->Attach to Process菜单选项
到这里对pin能提供的功能都有了一些基本了解,我觉得我可以看论文了