llvm-strip - 物件剝離工具

概要

llvm-strip [選項] 輸入…

描述

llvm-strip 是一個從物件檔案中剝離區段和符號的工具。如果沒有指定其他剝離或移除選項,將啟用 --strip-all

預設情況下,輸入檔案會就地修改。如果為輸入檔案指定 “-”,則會從程式的標準輸入流讀取輸入。

如果輸入是封存檔,任何請求的操作都將個別應用於每個封存檔成員。

此工具仍在積極開發中,但在大多數情況下,它可以作為 GNU strip 的直接替代品。

通用和跨平台選項

以下選項與檔案格式無關,或適用於多種檔案格式。

--disable-deterministic-archives, -U

更新封存檔成員標頭時,使用 UID、GID 和時間戳記的真實值。

--discard-all, -x

從輸出中移除大多數本地符號。不同的檔案格式可能會將此限制為本地符號的子集。例如,ELF 物件中的檔案和區段符號將不會被捨棄。此外,移除所有除錯區段。

--enable-deterministic-archives, -D

剝離封存檔時啟用確定性模式,即針對封存檔成員標頭 UID、GID 和時間戳記欄位使用 0。預設為啟用。

--help, -h

印出命令列選項的摘要。

--no-strip-all

停用 --strip-all

-o <file>

將輸出寫入 <file>。多個輸入檔案不能與 -o 組合使用。

--only-keep-debug

產生一個除錯檔案作為輸出,該檔案僅保留對除錯目的有用的區段內容。

對於 ELF 物件,這會移除不是 SHT_NOTESHF_ALLOC 區段的內容,方法是將它們設為 SHT_NOBITS 並在可能的情況下縮減程式標頭。

--regex

如果指定,其他開關指定的符號和區段名稱將被視為擴展的 POSIX 正則表達式模式。

--remove-section <section>, -R

從輸出中移除指定的區段。可以多次指定以同時移除多個區段。

--strip-all-gnu

從輸出中移除所有符號、除錯區段和重定位。此選項等效於 GNU strip--strip-all 開關。

--strip-all, -s

對於 ELF 物件,從輸出中移除所有符號和不在區段中的非分配區段,除了 .gnu.warning、.ARM.attribute 區段和區段名稱表。

對於 COFF 物件,從輸出中移除所有符號、除錯區段和重定位。

--strip-debug, -d, -g, -S

從輸出中移除所有除錯區段。

--strip-symbol <symbol>, -N

從輸出中移除所有名為 <symbol> 的符號。可以多次指定以移除多個符號。

--strip-unneeded

從輸出中移除重定位不需要的所有本地或未定義符號。同時移除所有除錯區段。

--version, -V

顯示 llvm-strip 可執行檔的版本。

--wildcard, -w

允許用於符號相關標誌的萬用字元語法。區段相關標誌預設為啟用。與 –regex 不相容。

萬用字元語法允許以下特殊符號

字元

含義

等效項

*

*

.*

?

?

.

\

\

\

[a-z]

字元類別

[a-z]

[!a-z], [^a-z]

否定字元類別

[^a-z]

此外,以 ‘!’ 開頭的萬用字元將阻止匹配,即使另一個標誌匹配。例如 -w -N '*' -N '!x' 將剝離除 x 以外的所有符號。

萬用字元的順序無關緊要。例如,-w -N '*' -N '!x'-w -N '!x' -N '*' 相同。

@<FILE>

從回應檔案 <FILE> 讀取命令列選項和命令。

ELF 特定選項

以下選項僅針對 ELF 物件實作。如果與其他物件一起使用,llvm-strip 將發出錯誤或靜默忽略它們。

允許 llvm-strip 移除區段,即使這會留下無效的區段引用。任何無效的 sh_link 欄位都將設為零。

--discard-locals, -X

從輸出中移除以 “.L” 開頭的本地符號。

--keep-file-symbols

保留 STT_FILE 類型的符號,即使它們原本會被剝離。

--keep-section <section>

從輸出中移除區段時,不要移除名為 <section> 的區段。可以多次指定以保留多個區段。

--keep-symbol <symbol>, -K

從輸出中移除符號時,不要移除名為 <symbol> 的符號。可以多次指定以保留多個符號。

--preserve-dates, -p

在輸出中保留存取和修改時間戳記。

--strip-sections

從輸出中移除所有區段標頭和所有不在區段中的區段資料。請注意,許多工具將無法使用沒有區段標頭的物件。

-T

移除 Swift 符號。

結束狀態

如果發生錯誤,llvm-strip 會以非零結束代碼結束。否則,它會以代碼 0 結束。

錯誤

要報告錯誤,請訪問 <https://github.com/llvm/llvm-project/labels/tools:llvm-objcopy%2Fstrip>。

參見

llvm-objcopy(1)