Windows环境下Pin(二进制动态插桩引擎)搭建
生活随笔
收集整理的這篇文章主要介紹了
Windows环境下Pin(二进制动态插桩引擎)搭建
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 安裝包下載鏈接:
- 環(huán)境配置
- 編譯Pintool
- 報錯1(無法打開包括文件:"xed-iclass-enum.h":No such file or directory):
- 報錯2(若編譯時產(chǎn)生“XX模塊對SAFESEH映像是不安全的”報錯):
- 報錯3(若報錯“無法解析的外部符號__fltused”):
- 報錯4(NO STACK TRACE ACAILABLE):
- Pintool使用
- Pintool基本框架
安裝包下載鏈接:
https://software.intel.com/en-us/articles/pintool-downloads
環(huán)境配置
編譯Pintool
在source\tools\MyPintool目錄下有Intel提供的樣例代碼,需要用VS。打開MyPinTool.vcxproj,進行生成解決方案:
報錯1(無法打開包括文件:“xed-iclass-enum.h”:No such file or directory):
報錯2(若編譯時產(chǎn)生“XX模塊對SAFESEH映像是不安全的”報錯):
報錯3(若報錯“無法解析的外部符號__fltused”):
報錯4(NO STACK TRACE ACAILABLE):
Pintool使用
pin32 -t .\MyPinTool.dll -o log.log -- cmd /c echo 123
log.log其中記錄了程序執(zhí)行的基本塊數(shù)目和指令數(shù)目。
附加到現(xiàn)有的程序
Pintool基本框架
int main(int argc,char *argv[]){//初始化PIN運行庫//若是有參數(shù)-h,則輸出幫助信息,即調(diào)用Usage函數(shù)if(PIN_Init(argc,argv)){return Usage();}string filename=KnobOutputFile.Value();if(!filename.empty()){out=new std::ofstream(fileName.c_str());}if(KnobCount){TRACE_AddInstrumentFunction(Trace,0);// 注冊在執(zhí)行指令trace時會執(zhí)行的函數(shù)PIN_AddThreadStartFunction(ThreadStart,0);//注冊每個線程啟動時會執(zhí)行的函數(shù)PIN_AddFiniFunction(Fini,0);//注冊程序結(jié)束時會執(zhí)行的函數(shù)}PIN_StartProgram(); //啟動程序,該函數(shù)不會返回return 0;}Pintool會先執(zhí)行Pin_Init對Pin運行庫進行初始化,若是參數(shù)有-h或者初始化失敗報錯,則會輸出工具的幫助信息,即調(diào)用Usage.
隨后Pintool根據(jù)命令行輸入的參數(shù)初始化filaName變量,KnobOutputFile和KnobCount的定義如下:
KNOB<string> KnobOutputFile(KNOB_MODE_WRITEONCE,"pintool","o","","specity file name for MyPinTool output");KNOB<BOOL> KnobCount(KNOB_MODE_WRITEONCE,"pintool","count","1","count instructions,basic blocks and threads in the application");;參數(shù)為o時,會設(shè)置KnobOutputFile的值,默認為空,參數(shù)為count時,會設(shè)置KnobCount的值,默認值為1。在KnobCount被設(shè)置的情況下,會注冊為3個插樁函數(shù),隨后調(diào)用PIN_StartProgram運行被插樁的程序(PIN_StartProgram不會返回)
| 指令級插樁(instruction) | INS_AddInstrumentFunction | 執(zhí)行一條新指令 |
| 軌跡級插樁(trace) | TRACE_AddInstrumentFunction | 執(zhí)行一個新trace |
| 鏡像級插樁(image) | IMG_AddInstrumentFunction | 加載新鏡像時 |
| 函數(shù)級插樁(routine) | RTN_AddInstrumentFunction | 執(zhí)行一個函數(shù)時 |
總結(jié)
以上是生活随笔為你收集整理的Windows环境下Pin(二进制动态插桩引擎)搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDA反编译失败总结
- 下一篇: Androidstudio如何正确导入和