2012-04-11 69 views
6

我想向ELF文件添加一些信息,但理想情況下需要按照程序輕鬆讀取此信息而不理解ELF或使用正常標準語言庫之外的工具的方式完成。我正在考慮簡單地將這些數據附加到ELF文件的末尾(通過某種標記來指示數據的開始,以便閱讀程序可以只向後向前哨),但是我想確保它不會發生這種情況,首先違反ELF規範。我對一個特定的加載器是否可以很好地處理這些附加數據並不感興趣;我想知道ELF規範本身是否能保證任何東西,以便我可以知道不同的符合ELF標準的裝載機會滿意。是否將任意數據附加到ELF文件違反了ELF規範?

我看到這樣的問題已經被問過,但無論哪種假設這追加是好的,也沒有直接回應:

至於我可以告訴,ELF規範在這裏:

我無法確定與幾個搜索是否我想要的屬性明確允許由該規範。

回答

7

該規範並沒有真正地說出任何關於它的內容,所以人們可能會爭辯說「這是未定義的行爲,有後續的數據」。另一方面,ELF規範對其預期相當明確:「部分和分段沒有指定順序。只有ELF頭文件中有一個固定的位置。「,它提供了足夠的空間來以某種方式嵌入數據,使用一個部分,或者沒有一個[這是未引用的數據!]。

這個「數據自由」至少在20世紀80年代末就已經被利用;考慮「自解壓檔案」,其中通用拆包代碼存根被放在尾部數據部分上。

事實上,即使在不可執行的數據格式(如RIFF和PNG)中,也可以找到這種隱式功能。當然,並非所有格式都允許這樣做。尤其是那些數據被定義爲運行到EOF而不是存儲在某個頭部的固定長度的數據。 (考慮ZIP:附加數據是不可能的,但前面加上是,這是什麼導致了EXE-呼嘯而過的(未修改)是可讀解壓縮程序操作系統。)

只有一個缺點是使用這樣的未引用數據:讀取和保存文件時,可能會丟失這些數據。

0

將額外的數據添加到ELF文件中可能沒問題(因爲您可以向ELF添加新的段和新的段),但是您應該有(或改進)工具來處理「改進」的ELF,而且可能是一個重要的負擔。並且不要忘記記錄得很好(如果可能,請在免費閱讀的文檔中)記錄你正在做的事情。