EXEファイルの構造
MZヘッダー、PEヘッダー、セクションヘッダー からなる。- MZヘッダー:DOSヘッダー
- MZヘッダー:MS-DOS用スタブ
- PEヘッダー:シグネチャ
- PEヘッダー:ファイルヘッダー
- PEヘッダー:オプションヘッダー
- セクションデータ:セクションヘッダー1
- セクションデータ:セクションヘッダー2
- セクションデータ:…
- セクションデータ:セクション1
- セクションデータ:セクション2
- セクションデータ:…
DOSヘッダー
先頭はMZ。
MS-DOS用スタブ
This program cannot be run in DOS mode. を表示するプログラム
PEヘッダー
PEという2文字と2byte分の0からなるシグネチャが先頭。
セクションデータ
Windowsプログラム本体。いくつかのコード(命令)やデータのまとまり(セクション)に分けられている。
各セクションヘッダーの並びの後に、セクション本体が並ぶ。
EXEファイルの内容をダンプする
ダンプツール:dumpbin.exe → MZヘッダーを読み飛ばす。
以下のダンプ出力コードで、exeを作成すれば、すべて閲覧できる。
%02Xは16進数を表す%xに02: 最低2文字出力し、足りなければ 0 で埋める。と X: 大文字で表記を追加した書き方。
%08Xであれば、最低8文字で足りなければ0で、大文字表記。
上記をコンパイル&リンクすれば、良い。
cl dump.c上記で作成した dump.exe でMZ(4D 5A)ヘッダも確認できる。 50 45 00 00 はPEヘッダー。
このダンププログラムは exe だけに使えるわけではなく、txt ファイルなどにももちろん使える。
たとえばある文字列が exe のヘッダに含まれていることを確認したければ、txt ファイルに文字列を
記述して dump した文字列が、exe のdump結果に含まれているか見ればよい。
PEヘッダーとセクションデータの内容
dumpbin /[オプション] EXEファイル名
FILE HEADER VALUES の number of sections の個数分、section ヘッダー があることを確認できる。
プログラム中に分散したコードやデータは、コードのセクションとデータのセクションにまとめれていることも確認できる。
セクションの内容を見る
dumpbin /rawdata EXEファイル名RAW DATAのナンバーが、セクションナンバーの数だけある。
逆アセンブル
コマンド: dissmdumpbin /disasm EXEファイル名
push や mov、call などから、callが関数、pushがそれに渡す引数のように使われていることがわかる。
簡単なプログラムを書いて、コンパイラがどのようにコードを整理するのか確認してみると
おもしろい
次は メモリーロード。
0 件のコメント:
コメントを投稿