Pinplay リプレイ フレームワークで Intel の Pin API を使用していますが、リプレイの実行時に以下を実行するのに問題があります。
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 です。