1

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 です。

4

1 に答える 1

0

私は同じ問題に直面しました。ここで答えを得ました。Pythonスクリプトを使用してプログラムをログに記録している場合は、 -log:image_ops オプションを指定するだけです。それは次のようなものになります

$pinpoints.py --cfg test.cfg --log_options="-log:image_ops" -l 

また、日常の計測機能もチェックしてください。そうあるべきだと思う

RTN_Name(rtn) == "__libc_malloc"
于 2016-01-24T00:44:38.100 に答える