軽く弄って闇鍋に突っ込もうと思ってたんですけど、軽く弄れなかったので別記事で書くことになった次第です。自分で解釈したこと、弄ってみたこと中心に書いていきます。
やりたいこと
既存のELF実行ファイルに共有ライブラリ参照を追加し、そのライブラリの関数を実行する。まずELFって?
Executable and Linkable Format(実行可能でリンク可能なフォーマット)の略。LinuxだけでなくBSDとかにも使われてるらしい。Linuxの実行ファイルや共有オブジェクト(.so)の形式はこれ。構造
図1 ELFファイルの構造(簡略)
プログラムヘッダはセグメント毎、セクションヘッダはセクション毎に構造体を持っていて、それの塊がテーブルです。構造体の定義はLinuxの場合/usr/include/linux/elf.hにあるはずです。
セクションはそれぞれ役割があります。 またセクションは増えたり減ったりするためセクションヘッダを見ないとだめそうです。
セクションはそれぞれ役割があります。 またセクションは増えたり減ったりするためセクションヘッダを見ないとだめそうです。
かせつ
以下のように考えています。.interp、.shstrtab以外をうまく弄ればできそう?
.dynstrに読み込みたいライブラリ名と関数の文字列を書き込んで、.hashと.dynsymをそれに合わせてうまく描き替える
PLT→GOTもうまくやれるようにして.textから呼び出す
最後にヘッダ類を修正する
その他の参考サイト
http://warabanshi.hatenablog.com/archive/category/ELFhttps://web.archive.org/web/20170607001117/http://www.hyuki.com:80/yukiwiki/wiki.cgi?WhirlwindTutorialOnCreatingReallyTeensyElfExecutablesForLinux
ツイート
0 件のコメント:
コメントを投稿