intel 핀을 사용하여 함수의 인수 값을 얻으려고합니다. 단일 인수 함수는 예제 인 ManualExamples/malloctrace.cpp를 사용하여 충분히 간단합니다. 그러나 여러 인수를 사용하여 인수 값을 얻으려고하면 문제가 발생합니다.인텔 핀 RTN_InsertCall 여러 함수 인수
예 : 다음 함수의 인수 값을 캡처하려고 :
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 코드로
void funcA(int a, int b, int c) {
printf("Actual: %i %i %i\n", a,b,c);
}
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에 대해 알고 있지만 명령 수준 계측이 필요하므로 jit 모드에서 핀을 사용해야합니다.