Linuxユーザースペースエルフローダー
質問
私はかなり珍しいことをする必要があります:ELF実行可能ファイルを手動で実行します。つまり、すべてのセクションを適切な場所にロードし、main()を照会して呼び出します(およびクリーンアップ)。実行可能は静的にリンクされるため、ライブラリをリンクする必要はありません。また、ベースアドレスも制御するため、競合の可能性について心配する必要はありません。
それで、そのためのライブラリはありますか?
Oskitとそのliboskit_execを見つけましたが、プロジェクトは2002年以来死んでいるようです。
プロジェクトの一部(もちろん、ライセンスを尊重します)を採用して、自分のニーズに合わせて調整しても大丈夫ですが、Linuxの世界ではかなりnoobなので、それらの部分をどこにあるかさえ知りません! :)
詩アームプラットフォームにはそれが必要です。
upd まあ、ELFをロードする問題は、それについての良い知識を必要とするようです(ため息)ので、私はいくつかの仕様とマニュアルを読みに出かけています。そして、私はバイオニック/リンカーとlibelfshに固執すると思います。みんなありがとう!
要約された調査結果:
- libelf: http://directory.fsf.org/project/libelf/
- エルフシュとリバルフシュ (現在はエレシの一部です): http://www.eresi-project.org/
- エルフィオ (別のELFライブラリ): http://sourceforge.net/projects/elfio/
- Oskitおよびliboskit_exec (時代遅れ): http://www.cs.utah.edu/flux/oskit/
- バイオニック/リンカー: https://android.googleSource.com/platform/bionic
解決
クイック apt-cache search
提案します libelf1
, libelfg0
および/または libelfsh0
. 。私は思います elfsh
プログラム(同名のパッケージ)は、使用方法の興味深い実用的な例かもしれません libelfsh0
.
私は自分で試したことはありませんが、彼らが助けになることを願っています。幸運を :-)
他のヒント
GoogleのAndroidは、「バイオニック」LIBC実装では、完全に再実装されたELFローダーがあります。簡単にきれいで、おそらくシンプルなものを探しているなら、Gilbcよりも優れたソースです。
を見てみましょう libelf 実行可能な形式を読むため。あなたはこれに問題があると思います。
何にもライブラリを必要としないので、実行可能ファイルをmmapするだけで、さまざまなメモリ領域に関するデータを設定し、JMP/Bを設定してはいけませんか?
ARMにNXビットに相当するものがあるかどうかはわかりませんが、チェックする価値があります。
このツールには、エルフローダーが含まれています。 http://bitwagon.com/rtldi/rtldi.html
別のプロジェクトでELFチェーンローダーのRTLDIのコードを再利用しました。コードはこちらです: http://svn.gna.org/viewcvs/plash/trunk/chroot-jail/elf-chainloader/?rev=877
そして、ここにはいくつかの背景があります: http://plash.beasts.org/wiki/Story16
. 。 (Stackoverflowが> 1リンクを投稿させないので、どうやらこれらのリンクを破らなければなりません!)