PEファイルについての覚書
PEヘッダーのセクションについてはコチラ
オフセット 0x3Cからの4バイトはPEヘッダの開始位置を表している
Windowsの電卓プログラムのcalc.exe(32ビット・バージョン)を例に確認してみる。
0x3Cの値は"D8 00 00 00"となっている。このバイトオーダーはリトルエンディアンなので、実際には"00 00 00 D8"となる。
つまり 0xD8
オフセット 0xD8を見てみるとPEヘッダ(0x5045)が確認できる。
PEファイルを正しく実行するには0x3Cで示されているPEヘッダの開始位置と実際のPEヘッダの開始位置がマッチしている必要がある。
以下は一見するとランダムなファイルだが、よく見ると0x3Cの値が"D8 00 00 00"となっており、オフセット 0xD8を見てみるとPEヘッダが確認できる。
なので、先頭バイトをMZ (0x4D5A)に書き換えればPEファイルとして実行可能になる。
PEヘッダの開始位置+0x28はファイルのエントリーポイントを表している
Windowsの電卓プログラムのcalc.exe(32ビット・バージョン)を例に確認してみる。
オフセット 0x100の値は"6C 2D"となっている。このバイトオーダーはリトルエンディアンなので、実際には"2D 6C"となる。
OllyDbgにcalc.exeをロードし、F9キーを押してデバッグを実行すると、00962D6Cに移動した。
参考
https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
https://blog.kowalczyk.info/articles/pefileformat.html
https://en.wikibooks.org/wiki/X86_Disassembly/Windows_Executable_Files