ILDasm (.NET Framework SDK の一部) を使用すると、対応するコード バイトが表示されます。
それらを表示するには、メソッドを表示する前に、View -> Show Bytes を選択する必要があります。これをテストするために小さなサンプル アプリケーションを作成したところ、次の結果が得られました。
このデータを使用するには、「|」の左側のバイトが .dll/.exe では順番に表示され、右側はリトルエンディアンでエンコードされています。これを念頭に置いて、次の .exe を検索しました (リトルエンディアン順のバイトを強調表示していることに注意してください)。
00 02 7b 03 00 00 04 0a 2b 00 06 2a
私の (小さいながらも) テスト実行可能ファイルでは、この一連のバイトは 1 回しか発生しませんでした。
上のスクリーンショットでは、メソッド RVA (相対仮想アドレス) も示されていることに注意してください。これをファイルの場所に変換するには、実行可能ファイルのレイアウトを決定する必要があります。利用可能な PE ツールは多数ありますが、私dumpbin
は Visual Studio に付属するものを使用して PE ヘッダーを表示しました ( dumpbin /headers <your exe name>
)。この実行可能ファイルの関連データ:
セクション ヘッダー #1
.テキスト名
1824 仮想サイズ
2000 仮想アドレス (00402000 ~ 00403823)
1A00 サイズの生データ
200 生データへのファイルポインタ (00000200 ~ 00001BFF)
0 再配置テーブルへのファイル ポインタ
0 行番号へのファイルポインタ
移転回数0回
0 行番号
60000020 フラグ
コード
読み取り実行
ここで、.text
セクションの仮想アドレスは 0x2000 として示され、仮想サイズは 0x1824 バイトです。メソッドには 0x2464 の RVA があるため、このセクション内に存在する必要があります。からの出力の「生データへのファイル ポインター」は、dumpbin
メソッドを含むセクションが実行可能ファイルの 0x200 で始まることを示しているため、実行可能ファイルのメソッドのオフセットを次のように計算できます。
(メソッド RVA - セクション RVA) + ファイルの場所
= (0x2464 - 0x2000) + 0x200
= 0x664
テスト実行可能ファイルの位置 0x664 に移動すると、探していたバイトが実際にそこに表示されます (正確にはこの位置ではありませんが、IL バイトの前に小さなメソッド ヘッダーがあるため、その数バイト後にあります)。