anjutaを使用して、lubuntu 12.10で次のCプログラムをコンパイルします
int main()
{
return 0;
}
ファイル名はfoobarです
次に、ターミナルを開いてコマンドを書き込みます
ndisasm foobar -b 32 1>asm.txt
(32 ビット命令オプションで foobar を逆アセンブルし、逆アセンブル結果を asm.txt に保存します)
asm.txt を開くと、0x0000 とわかりにくいコードがたくさんあります。
命令jg 0x47(0x7F45) on 0x00000000 and dec esp(0x4C) on 0x00000002
はELFファイル形式の署名のようです。(16 進コード 0x454c46 は ascii で「ELF」であるため)
Linux はこのコードをメモリにロードする可能性があり、実行可能なコードがないため 0x00000000 にジャンプしません。
ここで質問があります。
- 開始アドレスのアドレスを知るにはどうすればよいですか?
- 無視してもよいコードはどれですか? (おそらく、多くの 0x0000 は無視してもよいでしょうが、それ以外には何がありますか?)