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