llvm-strip - 对象剥离工具

概要

llvm-strip [选项] 输入…

描述

llvm-strip 是一个从目标文件中剥离 section 和符号的工具。如果未指定其他剥离或移除选项,将启用 --strip-all

默认情况下,输入文件会被就地修改。如果为输入文件指定 “-”,则从程序的标准输入流读取输入。

如果输入是归档文件,则任何请求的操作将单独应用于每个归档成员。

该工具仍在积极开发中,但在大多数情况下,它可以作为 GNU strip 的直接替代品。

通用和跨平台选项

以下选项要么与文件格式无关,要么适用于多种文件格式。

--disable-deterministic-archives, -U

更新归档成员标头时,使用 UID、GID 和时间戳的真实值。

--discard-all, -x

从输出中删除大多数本地符号。不同的文件格式可能会将此限制为本地符号的子集。例如,ELF 对象中的文件和 section 符号将不会被丢弃。此外,删除所有调试 section。

--enable-deterministic-archives, -D

在剥离归档文件时启用确定性模式,即对归档成员标头 UID、GID 和时间戳字段使用 0。默认启用。

--help, -h

打印命令行选项的摘要。

--no-strip-all

禁用 --strip-all

-o <file>

将输出写入 <file>。多个输入文件不能与 -o 结合使用。

--only-keep-debug

生成一个调试文件作为输出,该文件仅保留对调试目的有用的 section 的内容。

对于 ELF 对象,这通过将非 SHT_NOTESHF_ALLOC section 的内容变为 SHT_NOBITS,并在可能的情况下缩小程序头,来移除这些内容。

--regex

如果指定,则其他开关指定的符号和 section 名称将被视为扩展的 POSIX 正则表达式模式。

--remove-section <section>, -R

从输出中删除指定的 section。可以多次指定以同时删除多个 section。

--strip-all-gnu

从输出中删除所有符号、调试 section 和重定位。此选项等效于 GNU strip--strip-all 开关。

--strip-all, -s

对于 ELF 对象,从输出中删除所有符号和不在段内的非 alloc section,但 .gnu.warning、.ARM.attribute section 和 section 名称表除外。

对于 COFF 对象,从输出中删除所有符号、调试 section 和重定位。

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

从输出中删除所有调试 section。

--strip-symbol <symbol>, -N

从输出中删除所有名为 <symbol> 的符号。可以多次指定以删除多个符号。

--strip-unneeded

从输出中删除重定位不需要的所有本地或未定义的符号。同时删除所有调试 section。

--version, -V

显示 llvm-strip 可执行文件的版本。

--wildcard, -w

允许用于符号相关标志的通配符语法。section 相关标志默认启用。与 –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 删除 section,即使这会导致无效的 section 引用。任何无效的 sh_link 字段都将设置为零。

--discard-locals, -X

从输出中删除以 “.L” 开头的本地符号。

--keep-file-symbols

保留 STT_FILE 类型的符号,即使它们本来会被剥离。

--keep-section <section>

当从输出中删除 section 时,不要删除名为 <section> 的 section。可以多次指定以保留多个 section。

--keep-symbol <symbol>, -K

当从输出中删除符号时,不要删除名为 <symbol> 的符号。可以多次指定以保留多个符号。

--preserve-dates, -p

在输出中保留访问和修改时间戳。

--strip-sections

从输出中删除所有 section 标头和所有不在段内的 section 数据。请注意,许多工具将无法使用没有 section 标头的对象。

-T

删除 Swift 符号。

退出状态

如果发生错误,llvm-strip 将以非零退出代码退出。否则,它以代码 0 退出。

BUG

要报告 bug,请访问 <https://github.com/llvm/llvm-project/labels/tools:llvm-objcopy%2Fstrip>。

另请参阅

llvm-objcopy(1)