Pin學習筆記--安裝及一些基本知識


具體請見用戶手冊Pin 3.2 User Guide https://software.intel.com/sites/landingpage/pintool/docs/81205/Pin/html/index.html

一、在windows下安裝過程:
1、安裝Cygwin
Cygwin安裝的時候,默認不安裝make工具。可以只選擇make的那個安裝包,測試發現只安裝這個包是沒有問題的。也可以使All后面的字變為install,安裝所有組件(當然需要的時間也稍長一些)。
2、下載pin,解壓
3、把cygwin64\bin 和 pin.exe所在的目錄 添加到環境變量
4、編譯pin提供的例子:

   啟動cmd,執行vcvars64.bat,進入pin下的source\tools\ManualExamples目錄,make all TARGET=intel64,編譯64位dll。
   啟動cmd,執行vsvars32.bat,進入pin下的source\tools\ManualExamples目錄,make all TARGET=ia32,編譯32位dll。

二、三種級別的跟蹤
INS_AddInstrumentFunction指令級跟蹤INS_InsertCall
TRACE_AddInstrumentFunction 基本快跟蹤,可以用來跟蹤BBL BBL_InsertCall
IMG_AddInstrumentFunction IMG_AddUnloadFunction 映像跟蹤

三、一些函數
RTN_AddInstrumentFunction 函數跟蹤 RTN_InsertCall
PIN_AddThreadStartFunction 線程開始
PIN_AddThreadFiniFunction 線程結束
PIN_SafeCopy用於將指定數量的字節從源存儲器區域復制到目標存儲器區域。 即使源或目標區域無法訪問(完全或部分),此功能也可確保安全返回到調用者。
PIN_AddFollowChildProcessFunction()  注冊回調函數,回調函數在子進程開始執行前執行 Windows/Linux
PIN_AddForkFunction()  注冊回調函數,跟蹤父進程或子進程  Linux

四、其他

1、字符串

KNOB<string> KnobOutputFile(KNOB_MODE_WRITEONCE,  "string_family","o", "default_string", "description");
"o"表示命令行參數
pin -t obj-intel64/inscount0.so -o inscount0.log -- /bin/ls

表示把inscount0.log參數傳遞給KnobOutputFile

2、
IPOINT_BEFORE 指令之前,或者函數開始的地方
IPOINT_AFTER 指令之后,或者函數ret的地方

3、實驗中發現,在Windows上,如果在一個多線程應用程序中使用的pin工具,在回調函數中打開文件可能發生死鎖,有些函數在回調中使用可能造成程序莫名崩潰。

4、Pin有兩種模式,一種是JIT(Just In Time),個人理解為實時編譯;另一種是Probe,個人理解為Hook。Probe更快,但是可以使用的Pin相關功能更少。

5、修改程序執行流程INS_InsertDirectJump INS_InsertIndirectJump INS_Delete

6、調試

pin -pause_tool 20 … 開始的時候暫停20秒,這時可以attach


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM