3

Intel Pin 3.0 バージョン 76887 の最新バージョンを使用しています。

MPX 対応のおもちゃの例があります。

#include <stdio.h>
int g[10];
int main(int argc, char **argv) {
  int x = g[11];
  printf("%d\n", x);
  return 0;
}

gcc + MPX でコンパイルすると、逆アセンブリで MPX 命令が表示されobjdump、例では境界違反が正しく書き込まれます。

Saw a #BR! status 0 at 0x401798

ここで、Intel Pin を使用して特定の MPX 命令の総数を数えたいと思いBNDLDXますBNDMK

私の最初の試みは、付属のツールを使用することでしたsource/tools/SimpleExamples/trace.cpp。このツールはNOPs、MPX 命令の場所を示してくれました。

2 回目の試行では、次のスニペットを使用して独自のツールを作成しました。

xed_iclass_enum_t iclass = (xed_iclass_enum_t)INS_Opcode(ins);
if (iclass == XED_ICLASS_BNDMK)
    INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)countBndmk, IARG_END);

これは機能しません。countBndmk は呼び出されません。コードを他の命令 iclasses で再確認したところ、それらは機能しました。明らかに、Pin (または XED?) が MPX 命令を認識しないという問題があります。


ドキュメントを閲覧していると、興味深いノブに気付きました

KNOB<BOOL> knob_mpx_mode(KNOB_MODE_WRITEONCE,"supported:xed","xed_mpx_mode","0","Enable Intel(R) MPX instruction decoding")

このノブは MPX デコードを有効に0しているようで、デフォルトで有効になっています。コマンドラインまたはツールで有効にする方法がわかりません。コードまたはインターネットでこの問題に関する他の参照は見つかりませんでした。


インテル SDE を使用して、MPX 命令を含むデバッグ トレースをダンプできることはわかっています。Intel Pin で MPX を有効にする方法はあるのだろうか。それとも、オペコードを自分でデコードするしか解決策はありませんか?

4

1 に答える 1