[.NET]実行ファイルをダンプする | Assertion Failed!

[.NET]実行ファイルをダンプする

バイナリ情報をダンプする


ちょっと組込を思い出して楽しかった。


マイクロアドBTパートナーはブログやサイトに貼るだけ。お小遣いをゲットしよう!


[テスト環境]

Visual Studio 2008 StandardEdition


実行ファイルのダンプを行ってみる。

ダンプのためには、VisualStudio付属の dumpbin.exe を使用する。


先ず、ダンプする実行ファイルとして以下の簡単なソースを作成してみた。

(フォームLoad時にメッセージボックスを表示するだけ)


[テストコード]

using System;
using System.Windows.Forms;


namespace HelloWorld
{
  public partial class HelloWolrdForm : Form
  {
    public HelloWolrdForm()
    {
      InitializeComponent();
    }

    private void HelloWolrdForm_Load(object sender, EventArgs e)
    {
      MessageBox.Show("Hello World");
    }
  }
}

ダンプするために以下を実行。


「ツール」→「Visual Studio 2008 Command Prompt」


コマンドプロンプトから、上記プロジェクトのexeファイルのあるディレクトリに移動し、プロンプトから以下を実行する。


>dumpbin /headers HelloWorld.exe


得られた結果は以下のような感じ。


--------------------------------------------------------------------------------------

Dump of file HelloWorld.exe


PE signature found


File Type: EXECUTABLE IMAGE


FILE HEADER VALUES

(中略)


OPTIONAL HEADER VALUES
       10B magic # (PE32)
      8.00 linker version
      1400 size of code
       800 size of initialized data
        0 size of uninitialized data
      32AE entry point (004032AE)
      2000 base of code
      4000 base of data
     400000 image base (00400000 to 00407FFF)
      2000 section alignment

(中略)


SECTION HEADER #1
  .text name
  12B4 virtual size
  2000 virtual address (00402000 to 004032B3)
  1400 size of raw data
   200 file pointer to raw data (00000200 to 000015FF)
    0 file pointer to relocation table
    0 file pointer to line numbers

(以下略)

--------------------------------------------------------------------------------------


青字で示した部分の説明


entry point

最初の実行される命令が格納された場所


virtual address

メモリに読み込みまれる仮想アドレス


file pointer to raw data

実行ファイルのの読み込まれるアドレス


つまり、上記の情報から

(0x004032AE - 0x00402000 + 0x200) = 0x14AE


のアドレスが最初に実行される。


実際のexeファイルをバイナリエディタで開き、0x14AEのアドレスを確認すると、


FF 25 00 20 40 00


と続いていた。


上記は、アセンブリでは


jmp 0x00402000


ということらしい。


ということで、仮想アドレスの最初にジャンプするということになる。


今回のdumpbinには「/headers」オプションのほかにも多数のオプションがあるので、いろいろ試してみるべし。