0

大きなピンツールを作成していますが、2 つの質問があります。


ツール (関連部分のみを以下に要約) は、特定の実行された命令のイメージ/ルーチンを識別できない場合があります。いつ/なぜそれが起こるか知っていますか?


このツール (Barnes-Hut ベンチマークをインストルメント化する場合) は、しばらく実行すると常にメモリ不足 (OOM) エラーで終了します (ただし、ベンチマークをスタンドアロンで実行すると、正常に完了します)。ピンを装備したアプリケーションの OOM エラーをデバッグ/追跡するには、どのツールを使用すればよいですか?

int main(int argc, char *argv[])
{
    PIN_InitSymbols();
    if( PIN_Init(argc, argv) )
    {
    return 0;
    }

    INS_AddInstrumentFunction(Instruction, 0);

    PIN_StartProgram();

    return 0;
}

VOID Instruction(INS ins, VOID *v)
{
    INS_InsertPredicatedCall( ins,
    IPOINT_BEFORE, 
    (AFUNPTR) handle_ins_execution,
    IARG_INST_PTR,
    .....);
}


VOID handle_ins_execution (ADDRINT   addr, ...)
{
    PIN_LockClient();
    IMG img = IMG_FindByAddress(addr);
    RTN rtn = RTN_FindByAddress(addr);
    PIN_UnlockClient();
    if( IMG_Valid(img) ) {
    std::cerr << "From Image  : " << IMG_Name( img ) << std::endl;
    } else {
    std::cerr << "From Image  : " << "(UKNOWN)" << std::endl;
    }
    if( RTN_Valid(rtn) ) {
    std::cerr << "From Routine  : " << RTN_Name(rtn) << std::endl;
    } else {
    std::cerr << "From Routine  : " << "(UKNOWN)" << std::endl;
    }
}
4

1 に答える 1

0

私は最近、PinHeads フォーラムでこれを尋ねました。回答を待っています。私がドキュメントで読んだことは、IMG_FindByAddress 関数が「各画像について、アドレスがそのセグメントの 1 つのマップされたメモリ領域内にあるかどうかを確認する」ことによって動作することです。有効な範囲外の命令が実行される可能性があります。

このような場合にどのような画像であるかを知る最善の方法は、コンテキストを確認することです。ピンツール (DebugTrace に基づく) は、それがどのイメージに含まれているかを知らなくても実行され続けます。これが発生する前後のログ エントリを確認できます。これは、OSX の dydl で常に見られます。

于 2013-11-04T16:41:29.417 に答える