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)