2010-11-14 41 views
25

我想盡可能地剝離可執行文件 - 在Linux上:ELF。我只想在那裏運行它。如何徹底剝離可執行文件

我嘗試使用strip

strip --strip-all elf 

但它似乎並沒有做好:nm仍然顯示很多東西,和二進制仍然是很大的。

我該怎麼辦?

+1

你是如何構建它的? – 2010-11-14 18:52:16

+0

我意識到這個問題很久以前就被問過了。我假設你已經將它構建爲一個動態鏈接的二進制文件。如果創建一個靜態鏈接的ELF文件,然後將其剝離,則可能會獲得更滿意的結果。 – 2014-07-20 10:24:10

回答

28

如果一切都失敗了,你可以閱讀文檔,從man strip開始。

說真的,也許你的應用程序有很多符號和代碼。在一個極端的情況下,最大的尺寸減少將是rm elf,但那時你的程序將不再運行。這一切都取決於您的程序以及您編碼的內容。

作爲一個具體的例子,我最近使用了一個大型C++庫,其中strip沒有進一步的參數將大小從400 + mb減小到大約28 mb。但是,那麼你不能再與它鏈接(在其他共享庫的環境中),使它變得毫無用處。

但是,當使用strip --strip-unneeded時,它將大小從400+ mb更改爲55 mb,這仍然相當可觀,但允許從其他共享庫訪問該庫。

總之,我相信strip。也許你的應用程序不能在沒有代碼改變的情況下進一步減少

12

使用-R選項去除,可以去除不需要的所有部分。關於最小ELF可執行文件,請看this

0
strip -R .comment 
gcc -Os elf.c 

這兩個可能有幫助。