2013年12月12日一覧

セクションヘッダがない場合の関数フック(elf編)

前回は共有ライブラリ(.so)での関数フックの話でした。そしてこれはセクションヘッダがある前提で rel.plt セクションを見つけました。今回はセクションヘッダを参照しないでPLTの場所を特定し、関数フックを実現する案を記載してみようと思います。

そもそも elf実行体がメモリにロードされて実行されている状況では、elf実行体そのものにセクションヘッダがあったとしてもメモリにロードされていません。実行体そのもののファイルを読み込んでセクションヘッダを解析して特定する方法もあるかと思います。前回のsoの場合においては、そのようにして手元ではサンプルを組んでいました。しかし、メモリにロードされている情報からうまく特定できるのであれば無駄なメモリを使うことなく、ディスクIOも減らせて何かと都合がよいです。またストリップ化されているsoについてはセクションヘッダなしで何とか特定しなければなりません。

つまり、セクションヘッダなしで前回と同じようなことを実現するのを目的としたいと思います。今回は下記のような呼び出しをフックする方向を考えています。
elf-hook1

elf実行体からある共有ライブラリの関数を呼び出しており、その関数のフック先は別に自分自身の内部に用意してあるというものです。フック処理を適用して呼び出し先を変更します。

続きを読む