PE勉強会#2 参加メモ

はじめに

少し前になりますがPE勉強会#2に参加してきたので、メモを残しておきます。

参考

メモ

PEとは

PEとはPortable Executable。Windowsで使用される実行ファイル(EXE, DLLなど)のフォーマットのことです。


勉強会に参加するまで「PEって何?」と思っていたのはここだけの話。

MSYS+MinGW環境のエディタ

ATNDのページで指定されている「MSYS+MinGW」環境を構築したネットブックを持参しました。

MSYSにはvimが同梱されているようです。

% vim

で実行できます。

当日は気づかずにWindowsのメモ帳をエディタとして使っていました。MinGWシェルとWindowを切り替えながら使わなければならず面倒でした。

注意.「MSYS vim」でググったところ、MSYSのバージョンによっては、vimが別パッケージになっているようです。

実際に目で見て確認できた

以下のことを目視で確認しました。どちらも知っていた話ですが、実際に目で見たのは初めてでした。


目で見て確認できたことで、色々な場面でこれらの意識を強く持てそうです。

知っているだけのことって忘れやすいんですよね。

DLLを作るのって思っていたより簡単だった

gccに-shareオプションをつけるだけでDLLが作れました。ソースコードも普通にCで関数を書いただけですし。

DLLを作るのはもっと大変だと思っていました。

また、DLLを組み込んだコンパイルを行ったことでDLLを使ったexeファイルの構成も(完全ではないですが)理解できました。

DOSスタブ

ユーザ(人)レベルでは気づかないところで、互換のために余計なもの(?)が入っていることが確認できました。

バイナリを読み解いた
  1. ソースコードコンパイル
  2. バイナリエディタで表示
  3. 仕様書などで仕様を確認(今回はヘッダの定義を確認した)
  4. 型情報からバイナリファイルを読み解く


バイナリを読み解く術を知りました。PE以外のものを読み解くときも大きな流れは変わらないはずです。

objdump便利

objdumpというツール(コマンド?)を初めて知りましたが、とても便利です。

フォーマットによっては仕様書に目を通さなくても、気軽に情報を見ることができます。

先日のLions本読書メモで早速使ってみました。

OSとのリンク

EXEファイルとメモリの対応関係やメモリのセクションなど、最近勉強しているOSとリンクするような話があったのも興味深かったです。

総括

手を動かし、そして実際に目で見て確認できたのがいい経験でした。

このような積み重ねが「知っているだけ知識」を「使える知恵」に変えていくのだと思います。

終わりに

次回のPE勉強会#3にも参加予定です。

この勉強会は講義形式なのですが、教わるだけでなく興味のある点は自分から率先して調べていきたいと思っています。

さらに、ここで得た経験を基に何か作れればとも思っています。