Executable為什麼
為什麼 strip
不從 ELF 執行檔中刪除節頭?
最小的 ELF 執行檔只需要 ELF 標頭和至少一個程序標頭即可正常執行。但是,當我在一個簡短的執行檔上執行 strip 時,它決定不丟棄節頭表或節字元串節,儘管它們對程序的執行沒有任何目的(據我所知),但仍保留它們。
有沒有理由為什麼這些不被剝離?是否有另一個實用程序可以刪除執行檔執行不需要的所有內容?我已經嘗試手動編輯我正在製作的程式碼高爾夫執行檔以刪除部分標題,它似乎工作正常,而且要小得多。
GNU binutils**
strip
** 的文件暗示了原因,但沒有明確說明,在描述中--only-keep-debug
提到注意 - 被剝離部分的部分標題被保留,包括它們的大小,但部分的內容被丟棄。保留部分標題,以便其他工具可以將 debuginfo 文件與實際執行檔匹配,即使該執行檔已被重定位到不同的地址空間。
也就是說,除非通過
-R
選項明確告知,否則strip
將保留節標題以幫助其他程序(包括gdb
)完成工作。頁面*正確使用 strip 命令(使用 Linux 作業系統進行逆向工程的*一部分)說明
在執行檔上執行
strip
命令是最常見的程序保護方法。在其預設操作中,該strip
命令從執行檔中刪除符號表和任何調試資訊。這就是它通常的使用方式。但是,仍然有一些有用的資訊沒有被刪除。並繼續列舉可能留下的一些有用的東西——用於分析“剝離”的執行檔。
在Learning Linux Binary Analysis中重申了這一點,並評論說節標題通常只有在有人故意刪除它們時才會失去,並且沒有節標題,
gdb
並且objdump
幾乎沒用。