私は、実行ファイルとその関連共有ライブラリで簡単な計測タスクを実行し、実行されたすべての命令をメインファイルと共有ライブラリに記録しています。ピン:指定された共有ライブラリを計測する
しかし、Pin
は常に計測中は
Pin is out of memory: MmapChecked
を投げます。私は32ビットシステムで作業しているので、3Gメモリ消費に達するたびに、計測プロセスがクラッシュします。
このプラットフォームにはかなりの共有ライブラリがあるので、この32ビットシステムで作業したいと思います。一方、実際には私は共有ライブラリにしか関心がないので、実行可能な命令とその特別なライブラリの中に実行された命令だけを記録する方法を見つけることを考えています。
しかし、私はそれを行うかどうかは分かりません。今計測する前に、私の設定です:あなたが見ることができるように
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バイナリコードです。
私の状況では、メモリ例外を克服するために興味のあるライブラリのみを計測するように設定する必要がありますか?もしそうなら、どうしたらいいですか?
IIRCの32ビットプロセスでは、64ビットカーネルで動作している場合、完全な4GiBの仮想アドレス空間を使用できます。 32ビットのユーザースペースを持つ64ビットカーネルを使用することができます。 (具体的には、カーネルを64ビットカーネルに置き換えると、Ubuntuの32ビットインストールがまだ起動するはずですが、Ubuntuはおそらく1つもパッケージしていますが、忘れてしまいます。 –