我正在使用英特尔的Pin API和Pinplay重播框架,并且在执行重播时无法执行以下操作:
VOID Arg1Before(char *name, ADDRINT arg1) {
tracefile << name << "(" << arg1 << ")" << endl;
}
VOID Routine(RTN rtn, VOID *v) {
RTN_Open(rtn);
if (RTN_Name(rtn) == "malloc") {
RTN_InsertCall(rtn, IPOINT_BEFORE, (AFUNPTR)Arg1Before,
IARG_ADDRINT, "malloc",
IARG_FUNCARG_ENTRYPOINT_VALUE, 0,
IARG_END);
}
RTN_Close(rtn);
}
这在功能上类似于Pin的SimpleExamples / malloctrace.cpp示例程序。
正在重播的弹球是用:
创建的$PIN_ROOT/pin -t $PIN_ROOT/extras/pinplay/bin/intel64/pinplay-malloctracer.so \
-log -log:basename pinball/foo -- /usr/bin/ls
使用以下方式重播:
$PIN_ROOT/pin -xyzzy -reserve_memory pinball/foo.address \
-t $PIN_ROOT/extras/pinplay/bin/intel64/pinplay-malloctracer.so \
-replay -replay:basename pinball/foo \
-- ../pin-2.14/extras/pinplay/bin/intel64/nullapp
调试显示正在调用Routine()
,但插入的调用永远不会被执行。
我的操作系统是RHEL。
答案 0 :(得分:0)
我遇到了同样的问题,得到了答案here,如果你使用python脚本来记录程序,你只需要为它提供-log:image_ops选项。这就像是
$pinpoints.py --cfg test.cfg --log_options="-log:image_ops" -l
另外请检查您的日常仪器功能。我认为应该是
RTN_Name(rtn) == "__libc_malloc"