2012-06-08 34 views
0

我正在使用Libelf和Elfio嘗試向ELF文件添加新節。我希望它可以執行,就像.text使用Libelf/Elfio庫時遇到問題:ELF不可執行

這是我的問題:與libelf函數,只要我加載(elf_begin()),更新(elf_update())和釋放(elf_end())我的小精靈,它會停止可執行(賽格故障時發射)。 readelf -S顯示部分,但也返回錯誤:readelf:警告:.dynamic部分不包含在動態段內。我沒有在Libelf中找到任何功能將動態部分「添加」到DYNAMIC部分。

但我可以用Elfio做到這一點(使用segment-> add_section_index()函數),但是我必須手動將每一個其他段添加到其他段,因爲Elfio似乎在加載ELF時覆蓋它們。

有沒有人有這些庫的經驗?

我的最終目標是能夠在ELF中創建一個新的可執行部分,並修改其入口點以跳轉並直接執行該新部分以創建一個打包器。

任何建議表示讚賞!

謝謝你的回答!

回答

0

Libelf不管理可執行ELF文件的段(即,程序頭條目)。但是,它確實在您調用elf_update()時默認重新佈局這些部分。

重新佈局後,程序標題條目最有可能包含過時的偏移量。 然後加載程序將嘗試(或拒絕)從編輯前正確的文件偏移量加載部分。

因此,錯誤消息:.dynamic節現在位於文件中的另一個偏移處,並且加載程序注意到它不再位於DYNAMIC段中。

您可以通過調用elf_flagelf(elf,ELF_C_SET,ELF_F_LAYOUT)來告訴Libelf您負責部分佈局。

但是,再次增加一個新的部分將不再那麼容易了...

+0

謝謝你的回答。所以我能夠「手工」地重新佈置這些部分,它應該工作嗎? – user1443996

+0

是的。雖然我沒有嘗試過。 – TallOne