【发布时间】:2011-12-15 08:16:11
【问题描述】:
我正在尝试使用 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,但我需要在 jit 模式下使用 pin,因为我需要指令级检测。
【问题讨论】: