2

Intel Pin を使用して C++ 実行可能バイナリを計測し、興味深いイベント (関数呼び出し、スレッドの作成/終了など) を報告するマルチプロセッサ アーキテクチャ シミュレータに取り組んでいます。基本的には、イメージが読み込まれるときにすべての命令の命令デコード キャッシュを構築し、後で命令の実行を分析します。そのため、イメージ読み込み時の命令アドレスが実行時の命令アドレスと同じである (または少なくとも同期して更新される) ことが重要です。

Intel Pin API (IMG_AddInstrumentFunction など) を使用すると、エントリ ポイント、下位/上位アドレスなど、読み込まれたイメージ (実行可能ファイルと共有ライブラリ) に関する情報を取得できます。

しかし、インストルメント化されたプログラムが、ロードされたどのイメージにも属さないアドレスで命令を実行していることに気付きました。調べてみると、ダイナミック ローダー (イメージ /lib64/ld-linux-x86-64.so.2 on 64-bit Centos 6.3 ) がルーチン_dl_relocate_objectを呼び出してメモリ内のメインの実行可能ファイルを再配置していると思われます。

再配置可能なコードとそのすべての必要性を理解しています。これらの再配置がどのように/いつ発生する可能性があるか (ロード時および実行時) についての適切なドキュメント (または簡単な説明/アドバイス) へのポインタが必要なだけで、アーキテクチャ シミュレータでそれらを考慮することができます。言い換えれば、それを達成するために使用されるメカニズム(インストルメント化する必要があるライブラリ関数、条件、または存在する場合はランダム化、再配置を抑制するために使用できる g++ コンパイラ スイッチなど)。PS: x86/x86_64 アーキテクチャのみをターゲットにしています

4

1 に答える 1

4

再配置はプロセッサ固有であるため、ARM と x86-64 および x86 では再配置が異なります (命令セットが異なるため)。

再配置もオペレーティング システム固有ですが、関連する一部の OS は同じ再配置を試みます (x86-64 の Solaris や Linux など)。

これらは、 ABI (アプリケーション バイナリ インターフェイス) 仕様「System V Application Binary Interface AMD64 Architecture Processor Supplement」で詳しく説明されています。元の x86-64 ABI はhttp://www.x86-64.org/documentation.htmlにありまし たが、そのサイトは数週間応答していません。古いコピーはこのリンクにあり、新しいコピーはここにあります

X32 ABIもあります

この質問も参照してください。

于 2013-03-18T06:41:37.563 に答える