SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows実行ファイル「EXE」の謎に迫る

EXEファイルの内部構造(PEヘッダ)

Windows実行ファイル「EXE」の謎に迫る 第2回


データディクショナリ

 次は、データディクショナリであるIMAGE_DATA_DIRECTORY構造体について解説します。IMAGE_DATA_DIRECTORY構造体の定義内容は次のとおりです。

IMAGE_DATA_DIRECTORY構造体
typedef struct _IMAGE_DATA_DIRECTORY {
    DWORD   RVA;
    DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

 RVAにはデータの場所をRVA(イメージベースからのオフセット)で指定します。Sizeにはデータのサイズをバイト単位で指定します。

 データディクショナリは、一般的に次の16個の要素からなります(使用されていない要素もあります)。

表4 データディクショナリ
IMAGE_DATA_DIRECTORY DataDirectory[16]Export Tableエクスポート テーブルのアドレスとサイズ
Import Tableインポート テーブルのアドレスとサイズ
Resource Tableリソース テーブルのアドレスとサイズ
Exception Table例外テーブルのアドレスとサイズ
Certificate Table属性認証テーブルのアドレスとサイズ
Base Relocation Tableベース再配置テーブルのアドレスとサイズ
Debugデバッグデータの開始アドレスとサイズ
Architectureアーキテクチャ固有データのアドレスとサイズ
Global Ptrグローバルポインタレジスタの相対仮想アドレス。この構造体のサイズメンバは0にセットされます
TLS Tableスレッドローカルストレージ(TLS)テーブルのアドレスとサイズ
Load Config Tableロードコンフィグレーションテーブルのアドレスとサイズ
Bound Importバウンドインポートテーブルのアドレスとサイズ
IATインポートアドレステーブルのアドレスとサイズ
Delay Import Descriptor遅延インポート記述子のアドレスとサイズ
Reserved 

おわりに

 PEヘッダには、ターゲットマシン、アライメント情報、セクション管理情報、メモリサイズ情報などが格納されており、OSがプログラムをメモリにロードしてEXEファイルを実行する際には、必要なデータがこれらの情報に随時書き込まれています

 PEヘッダ自体はIMAGE_NT_HEADERS32構造体によって定義されます。今回は、その詳細について一歩踏み込み、IMAGE_NT_HEADERS32構造体に定義されている、IMAGE_FILE_HEADER構造体、およびIMAGE_OPTIONAL_HEADER32構造体についての解説を行いました。少々、冗長的な解説になってしまいましたが、各メンバにどのような情報を定義すればよいか、確認できたでしょうか。

 次回は、PEヘッダの後に配置されているセクションについて解説します。

修正履歴

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Windows実行ファイル「EXE」の謎に迫る連載記事一覧

もっと読む

この記事の著者

山本 大祐(ヤマモト ダイスケ)

普段はActiveBasicと周辺ツールの開発を行っています。最近は諸先輩方を見習いながら勉強中の身。AB開発日記

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/412 2006/09/20 13:36

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー