プログラマのつれづれなるままにプログラマのつれづれなるままに音宮志久が思ったことなどをネタにします。プログラムネタ・数学ネタがメインです。Windowsの実行ファイル形式(1)Windowsの実行ファイル形式(1)コメントを残す復活記念連載、ということでWindowsの実行ファイルの形式やらそれにまつわるお話をしようかと思います。DLLの乗っ取りなども実はこの技術を使ってやっているのと、意外とこれにまつわる話が少ないのでおもしろ半分ですが。そもそも、Windowsの実行ファイルとはどのような形式になっているのでしょうか?これに関してはほかのページにもそれなりの解説がありますが、こっちでも少々話してみましょう。だいたい、以下のような構造になっています。WindowsになってからはIMAGE_DOS_HEADERとMS-DOS用のスタブプログラム(MS-DOS上で間違えて実行しないようにする領域)は必要ありません。なくても動作しますがつけるのが慣例になってしまっているっぽいです。64bitのexeを生成しても設定をすれば勝手についてきます。必要なら適当な実行ファイルから引っこ抜いてくればそれで終わりだったりします。ちなみに、x86とx64の実行ファイル違いは上の説明にもあるとおり、IMAGE_NT_HEADERSが32か64かの差です。(PE32とPE32+の形式の時)一応ある部分の定義が32bitの定義か64bitの定義かで分かれているわけですが、その割には相対のアドレスなどを示す部分は32bitのままなのでイメージサイズ(メモリにロードされるデータサイズ)が2^32byte以上になることはできなかったりします。そんなサイズのイメージが現段階で必要とも思えませんが。実行ファイルの形式で重要になるのはIMAGE_NT_HEADERSとIMAGE_SECTION_HEADERがまず初めに出てきます。これらの意味がわかれば自分で実行ファイルを作れたりもします。簡単な説明が第一段階ですね。それ以降はまた次回に。コメントをキャンセルメールアドレスが公開されることはありません。気になるプログラムネタや数学ネタがあったら書き込みたいのだが残業が長すぎて眠気が全くとれず体調があまりよくない。過労などでぶっ倒れるかもしれない。あと、さすがに独り身が寂しいのでなんとかしたいと考えてはいるのだが...。アクセスカウンタアクセス数:スポンサーリンクモバイルバージョンに。