繼續介紹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
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 ()
add-symbol-file /home/lovesunshine/pin/source/tools/ManualExamples/obj-ia32/itrace.so 0xb712ffe0 -s .data 0xb7458240 -s .bss 0xb7458cc0
運行:.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.
到這裏對pin能提供的功能都有了一些基本瞭解,我覺得我可以看論文了