2009-11-23 55 views
12

我需要做一個相當不尋常的事情:手動執行一個elf可執行文件。即加載所有部分到正確的位置,查詢main()並調用它(然後清理)。可執行文件將靜態鏈接,因此不需要鏈接庫。我也控制基地址,所以不用擔心可能的衝突。Linux用戶空間ELF加載程序

那麼,是否有任何圖書館呢?

我發現的OSKit及其liboskit_exec,但項目好像是死了自2002年以來

我與服用的部分項目(尊重許可證,當然),並將其剪裁到我的需要確定,但我在Linux世界裏,我相當不習慣,我什至不知道在哪裏找到那些部分! :)

PS。我需要ARM平臺。那麼,裝載精靈的問題似乎需要一些關於它的知識(嘆氣),所以我出去讀一些規格和手冊。我想我會堅持仿生/鏈接器和libelfsh。多謝你們!

總結髮現:

+0

* bump *我有這個完全相同的問題(也在ARM上),但是我也需要做重定位。 – 2009-12-11 06:45:56

回答

2

快速apt-cache search表明libelf1libelfg0和/或libelfsh0。我認爲elfsh程序(在同名軟件包中)可能是一個有趣的實例,說明如何使用libelfsh0

我還沒有嘗試過自己,但我希望它們可能會有所幫助。祝你好運:-)

0

看看libelf閱讀可執行格式。我認爲你會遇到麻煩。

聽起來像,因爲你不需要庫的任何東西,爲什麼不只是mmap你的可執行文件,設置關於各種內存區域和jmp/b的數據?

我不知道ARM是否有NX-bit等效值,但值得檢查。

1

谷歌的Android,它是一款「仿生」libc實現,具有完全重新實現的ELF加載器。它相當乾淨,如果你想要簡單的東西,可能比gilbc更好。

0

該工具包含一個ELF裝載機:http://bitwagon.com/rtldi/rtldi.html

我重用從rtldi代碼爲另一個項目中ELF鏈式加載。代碼在這裏:http://svn.gna.org/viewcvs/plash/trunk/chroot-jail/elf-chainloader/?rev=877,這裏有一些背景:http://plash.beasts.org/wiki/Story16。 (顯然我必須打破這些鏈接,因爲stackoverflow不會讓我post> 1鏈接!)