2012-02-22 57 views
4

在Linux上,我試圖剝離一個靜態鏈接的ELF文件到最基本的要領。當我運行:ELF .notes部分是否真的需要?

strip --strip-unneeded foo 

strip --strip-all foo 

生成的文件仍然有似乎是充滿時髦的字符串的脂肪.notes部分。

.notes部分真的需要嗎?或者我可以用--remove-section安全地強制它?

感謝您的任何幫助。

回答

5

從以往的經驗,並從該名男子頁尋找strip,它看起來像strip應該擺脫任何和不需要的各個部分,並串;只是符號。答曰手冊頁:

GNU strip discards all symbols from object files objfile. 

話雖這麼說,從經驗,strip,即使沒有--strip-all,刪除部分不需要的加載,如.symtab.strtab,你可以像你注意,刪除你想要的部分與--remove-section

作爲.notes部的一個例子,我把/bin/ls從我的Ubuntu 11.10 64位框:

$ readelf -Wn /bin/ls 

Notes at offset 0x00000254 with length 0x00000020: 
    Owner     Data size Description 
    GNU     0x00000010 NT_GNU_ABI_TAG (ABI version tag) 
    OS: Linux, ABI: 2.6.15 

Notes at offset 0x00000274 with length 0x00000024: 
    Owner     Data size Description 
    GNU     0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) 
    Build ID: 3e6f3159144281f709c3c5ffd41e376f53b47952 

涵蓋了.note.ABI-tag部分和.note.gnu.build-id部分。看起來他們包含的數據不是加載程序所必需的,但也不是標準的,並且不被strip所知,對於程序的正確運行不是必需的,因爲ELF可以具有任意數量的額外的「未知」部分是不安全的刪除。因此,寧願使用虛擬白名單(這會導致失敗),它會使用它知道可以擺脫的部分的黑名單,並且這樣做。

簡版:這些部分似乎並不標準,可用於各種事情,所以strip不知道它是安全的刪除它們。但是根據我上面提到的信息,如果它是你自己的程序,那麼刪除它幾乎肯定是安全的。

+0

謝謝丹。我感覺合理。 – srking 2012-02-24 03:58:58

+0

對.note.gnu.build-id的一些引用是:https://fedoraproject.org/wiki/Releases/FeatureBuildId以及人們對此做了什麼:https://lkml.org/lkml/2011/12/ 15/162 – pfalcon 2012-09-22 17:09:55

+1

strip --remove-section = .note.gnu.build-id 2014-10-30 16:29:54

相關問題