読者です 読者をやめる 読者になる 読者になる

【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

PEの.idataを図解

以前PE勉強会を開催したとき、.idataの構造をうまく説明できませんでした。最近また説明する機会があったので、改めて図を描いてみました。バイナリと並べて構造をフラットに描きました。

f:id:n7shi:20120806223521p:plain

この描き方は、Excel VBAで作成したコンパイラで使っていたものです。構造とバイナリの両方が確認できるので、これが一番分かりやすいかもしれません。

【追記】ILTなしでも起動することが分かったので、図解しました。

使い方

ILTとIATの中身は同じですが、EXE起動時にWindowsがIATを書き換えるので、値を取って来ればDLLの関数を呼ぶことができます。

ImageBaseが0x00400000の場合
call [0x00402054]  # call foo
call [0x00402058]  # call bar
call [0x00402060]  # call hoge
call [0x00402064]  # call fuga

IATの中の書き換えられる部分をサンクと呼びます。

参考

.idataの構造は文字列配列に毛が生えたようなものです。よく分からなければ以下を参考すると良いかもしれません。