剛開始看的時候囫圇吞棗,其實好多都不懂呢,補充一下:
pin能檢測的層次:instruction,bbl(basic block),trace,routine,image
instruction是最低層次的,instruction指的是彙編指令,如mov ,inc,loop,etc。
bbl指一個入口一個出口的語句
trace是一個入口多個出口的語句,如if
routine 相當於一個函數
image是exe,dll(windows下),之類的映像文件。
下面我們比較分析幾個pintool文件
下面分別來自inscount0.cpp、inscount1.cpp、proccount.cpp的三個語句
INS_InsertCall(ins,IPOINT_BEFORE, (AFUNPTR)printip, IARG_INST_PTR, IARG_END);
BBL_InsertCall(bbl, IPOINT_BEFORE, (AFUNPTR)docount, IARG_UINT32, BBL_NumIns(bbl);
RTN_InsertCall(rtn,IPOINT_BEFORE, (AFUNPTR)docount,IARG_PTR, &(rc->_rtnCount), IARG_END);
通過對比我們發現,***_InsertCall()函數,表示在什麼情況(針對不同的***由IPOINT_決定在***的前中後還是任意位置)下調用(AFUNPTR)函數進行相應的操作,如輸出地址,計數等等。
.....