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_NOTE 的 SHF_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 将发出错误或静默忽略它们。
- --allow-broken-links¶
允许 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>。