2010-05-24 77 views
7

我目前正在尋找一種將數據添加到已編譯的ELF可執行文件的方式,即將文件嵌入到可執行文件中而無需重新編譯它。將文件打包成ELF可執行文件

我可以很容易地通過使用cat myexe mydata > myexe_with_mydata來做到這一點,但我無法從可執行文件訪問數據,因爲我不知道原始可執行文件的大小。

有沒有人有我如何能實現這個想法?我想爲可執行文件添加一段或使用特殊標記(例如,0xBADBEEFC0FFEE)來檢測可執行文件中數據的開頭,但我不知道是否有更美觀的方法來執行此操作。

在此先感謝。

回答

5

您可以將文件作爲objcopy把(1)一個特殊的部分添加到ELF文件:

objcopy --addsection sname=file oldelf newelf 

將添加文件oldelf並將結果寫入到newelf(oldelf不會修改) 然後,您可以使用libbfd來讀取elf文件並按名稱提取該部分,或者只是滾動自己的代碼來讀取部分表並找到部分。確保使用不與系統期望的任何內容相沖突的部分名稱 - 只要您的名字不是以.開頭,那麼您應該沒問題。

+0

我不知道objcopy可以做到這一點!謝謝。 – 2010-06-03 22:55:13

1

我創建了一個名爲elfdataembed的小型庫,它提供了一個簡單的界面,用於使用objcopy提取/引用嵌入的部分。這允許您將偏移量/大小傳遞給另一個工具,或者使用文件描述符直接從運行時引用它。希望這將有助於未來的人。

值得一提的是,這種方法比編譯符號更有效,因爲它允許外部工具引用數據而不需要提取數據,也不需要整個二進制文件按順序裝入內存提取/參考它。

相關問題