Как остановить пинтоул искусственно - PullRequest
0 голосов
/ 05 марта 2019

Я хочу использовать пин-код для отслеживания адреса первых 256 * 256 инструкций, но я не знаю, как остановить пин-код после достижения номера.Я знаю, что есть метод PIN_ExitProcess () , но make вызовет ошибку после его добавления.Есть ли другой способ?

#include <stdio.h>
#include "pin.H"

FILE * trace;

VOID printip(VOID *ip) { 
    fprintf(trace, "%p\n", ip); 
}

VOID Instruction(INS ins, VOID *v)
{
    if(0x70000000>INS_Address(ins))
        INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)printip, IARG_INST_PTR, IARG_END);
}

VOID Fini(INT32 code, VOID *v)
{
    fprintf(trace, "#eof\n");
    fclose(trace);
}

INT32 Usage()
{
    PIN_ERROR("This Pintool prints the IPs of every instruction executed\n" 
              + KNOB_BASE::StringKnobSummary() + "\n");
    return -1;
}

int main(int argc, char * argv[])
{
    trace = fopen("itrace.out", "w");

    if (PIN_Init(argc, argv)) return Usage();

    INS_AddInstrumentFunction(Instruction, 0);

    PIN_AddFiniFunction(Fini, 0);

    PIN_StartProgram();

    return 0;
}

1 Ответ

0 голосов
/ 07 марта 2019

У вас есть две опции:

  1. Просто подсчитайте количество отслеживаемых инструкций и остановите fprintfing, когда вы достигнете порога, используя инструкцию if.
  2. Вызовите PIN_Detach (), когда инструкцияпорог достигнут.Подробнее здесь: https://software.intel.com/sites/landingpage/pintool/docs/97503/Pin/html/group__PIN__CONTROL.html#ga6277d16bf33ede39685a26a92fc3cbef
...