1

実行可能ファイルとそれに関連する共有ライブラリに対して簡単なインストルメンテーション タスクを実行し、実行されたすべての命令をメイン ファイルと共有ライブラリに記録しています。

ただし、Pin必ず投げる

Pin is out of memory: MmapChecked 

計装中。私は 32 ビット システムで作業しているため、約 3G のメモリ消費量に達するたびに、インストルメンテーション プロセスがクラッシュします。

このプラットフォームには非常に多くの共有ライブラリがあるため、この 32 ビット システムで作業したいと考えています。一方、実際には1つの共有ライブラリにしか興味がないため、メインの実行可能ファイルとその特別なライブラリ内で実行された命令のみを記録する方法を見つけようと考えています.

ただし、それを行うかどうか/どのように行うかはわかりません。インストルメンテーションの前の今、私の設定は次のとおりです。

PIN_LockClient();
IMG img = IMG_FindByAddress(INS_Address(ins));
PIN_UnlockClient();

// if (IMG_Valid(img) && IMG_IsMainExecutable(img)){
if (IMG_Valid(img)) {           <--------------------- this line
    INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)insCallBack,
                   IARG_BOOL,
                   IARG_ADDRINT, INS_Address(ins),
                   IARG_PTR, new string(INS_Disassemble(ins)),
                   IARG_CONTEXT,
                   IARG_ADDRINT, INS_NextAddress(ins),
                   IARG_END);

}

ご覧のとおり、メインの実行可能ファイルを計測しているかどうかを確認していません。つまり、すべてのライブラリを計測できるはずです。

私のテスト プラットフォームは 32 ビット x86 Ubuntu 14.04 です。また、テスト対象は 32 ビット ELF バイナリ コードです。

私の質問は次のとおりです。私の状況では、メモリ例外を克服するために、関心のあるライブラリのみをインストルメント化するように構成する必要がありますか? もしそうなら、どうすればそれを行うことができますか?

4

1 に答える 1

1

IMG_Name を使用して、pin が参照するファイル名を取得し、対象の共有オブジェクトと比較します。InstLib はこれのドロップイン実装を提供しますが、自分で簡単に実装できます。

于 2016-09-07T07:19:12.797 に答える