Опитвам се да получа стойностите на аргументите на функция, използвайки intel pin. Функциите с един аргумент са достатъчно прости, като се използва примерът ManualExamples/malloctrace.cpp. Въпреки това, когато се опитвам да получа стойностите на аргумента с множество аргументи, срещам проблеми.
напр. Опитвам се да уловя стойностите на аргумента на следната функция:
void funcA(int a, int b, int c) {
printf("Actual: %i %i %i\n", a,b,c);
}
Със следния пин код
VOID funcHandler(CHAR* name, int a, int b, int c) {
printf("Pin: %s %i %i %i\n", name, a, b, c);
}
VOID Image(IMG img, VOID *v) {
RTN funcRtn = RTN_FindByName(img, "funcA");
if (RTN_Valid(funcRtn)) {
RTN_Open(funcRtn);
RTN_InsertCall(funcRtn, IPOINT_BEFORE, (AFUNPTR)funcHandler,
IARG_ADDRINT, "funcA", IARG_FUNCARG_ENTRYPOINT_VALUE,
0, IARG_END);
RTN_Close(funcRtn);
}
}
Получавам следния изход
Pin: funcA 0 -656937200 -10
Actual: 0 -10 0
Pin: funcA 1 -656937200 -9
Actual: 1 -9 20
Pin: funcA 2 -656937200 -8
Actual: 2 -8 40
Виждам, че съм близо, но нещо не е подравнено правилно. Знам за RTN_ReplaceProbed, но трябва да използвам pin в режим jit, тъй като имам нужда от инструменти на ниво инструкции.