我正在使用英特爾PIN工具對C程序的彙編指令進行一些分析。我有一個簡單的C程序打印出「Hello World」,我編譯並生成了一個可執行文件。我從GDB生成的彙編指令跟蹤喜歡這個 -跟蹤英特爾PIN中的本機指令
Dump of assembler code for function main:
0x0000000000400526 <+0>: push %rbp
0x0000000000400527 <+1>: mov %rsp,%rbp
=> 0x000000000040052a <+4>: mov $0x4005c4,%edi
0x000000000040052f <+9>: mov $0x0,%eax
0x0000000000400534 <+14>: callq 0x400400 <[email protected]>
0x0000000000400539 <+19>: mov $0x0,%eax
0x000000000040053e <+24>: pop %rbp
0x000000000040053f <+25>: retq
End of assembler dump.
我跑了pintool,我給了可執行文件的輸入,而且我現在乾的指令跟蹤和打印的指令數。我希望跟蹤來自我的C程序的指令,可能會得到機器操作碼並做一些分析。我使用的是C++ PIN工具當我跑我的Hello World程序用這個工具來算的指示中
#include "pin.H"
#include <iostream>
#include <stdio.h>
UINT64 icount = 0;
using namespace std;
//====================================================================
// Analysis Routines
//====================================================================
void docount(THREADID tid) {
icount++;
}
//====================================================================
// Instrumentation Routines
//====================================================================
VOID Instruction(INS ins, void *v) {
INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)docount, IARG_THREAD_ID, IARG_END);
}
VOID Fini(INT32 code, VOID *v) {
printf("count = %ld\n",(long)icount);
}
INT32 Usage() {
PIN_ERROR("This Pintool failed\n"
+ KNOB_BASE::StringKnobSummary() + "\n");
return -1;
}
int main(int argc, char *argv[]) {
if (PIN_Init(argc, argv)) return Usage();
PIN_InitSymbols();
PIN_AddInternalExceptionHandler(ExceptionHandler,NULL);
INS_AddInstrumentFunction(Instruction, 0);
PIN_AddFiniFunction(Fini, 0);
PIN_StartProgram();
return 0;
}
數,我得到ICOUNT = 81563.據我所知,PIN添加自己的指令進行分析,但我不明白它是如何增加如此多的指令,而我的C程序中沒有超過10條指令。還有一種方法可以識別來自我的代碼和PIN生成的彙編指令。我似乎無法區分由PIN生成的指令和來自我的程序的指令。請幫忙!
我對PIN不熟悉,但大概也是在計算C庫中的指令。 – Jester
嘗試製作一個靜態可執行文件,它直接進行一個'exit'系統調用。 (例如從我的[mov消除microbenchmark]取出循環(https://stackoverflow.com/questions/44169342/can-x86s-mov-really-be-free-why-cant-i-reproduce-this-at-所有/ 44193770#44193770))。 –
@PeterCordes無論是我的C程序的內容,icount總是在80k以上。我不知道是否有辦法區分機器指令和PIN生成的指令。 –