llvm-nm - 列出 LLVM 位码和目标文件的符号表¶
概要¶
llvm-nm [选项] [文件名…]
描述¶
实用程序 llvm-nm 列出 LLVM 位码文件、目标文件和档案中的符号名称。每个符号都与关于其来源的一些简单信息一起列出。如果未指定文件名,则使用 a.out 作为输入。如果使用 - 作为文件名,则 llvm-nm 将从其标准输入流读取文件。
llvm-nm 的默认输出格式是传统的 BSD nm 输出格式。每个此类输出记录都包含一个(可选的)8 位十六进制地址,后跟一个类型代码字符,后跟一个名称,用于每个符号。每行打印一条记录;字段用空格分隔。当省略地址时,它将替换为 8 个空格。
支持的类型代码字符如下所示。当为相同含义列出大小写字符时,小写字符表示局部符号,而大写字符表示全局(外部)符号
a, A
绝对符号。
b, B
未初始化数据 (bss) 对象。
C
公共符号。多个定义链接在一起形成一个定义。
d, D
可写数据对象。
i, I
COFF:.idata 符号或在 IMAGE_SCN_LNK_INFO 设置的节中的符号。
n
ELF:来自非分配节的局部符号。
COFF:调试符号。
N
ELF:调试节符号,或来自非分配节的全局符号。
s, S
COFF:节符号。
Mach-O:绝对符号或来自 __TEXT_EXEC __text、__TEXT __text、__DATA __data 或 __DATA __bss 以外的节的符号。
r, R
只读数据对象。
t, T
代码 (text) 对象。
u
ELF:GNU 唯一符号。
U
命名对象在此文件中未定义。
v
ELF:未定义的弱对象。如果未定义对象,则不会链接失败。
V
ELF:已定义的弱对象符号。仅当链接中不存在常规定义时,才会使用此定义。如果存在多个弱定义且不存在常规定义,则将使用其中一个弱定义。
w
除 ELF 对象符号以外的未定义弱符号。如果未定义符号,则不会链接失败。
W
除 ELF 对象符号以外的已定义弱符号。仅当链接中不存在常规定义时,才会使用此定义。如果存在多个弱定义且不存在常规定义,则将使用其中一个弱定义。
-
Mach-O:N_STAB 符号。
?
无法识别的内容。
由于 LLVM 位码文件通常包含在链接到可执行映像或动态编译“即时”之前不被视为具有地址的对象,因此 llvm-nm 不会为 LLVM 位码文件中的任何符号打印地址,即使是位码文件中定义的符号。
选项¶
- -B¶
使用 BSD 输出格式。是
--format=bsd
的别名。
- -X¶
从命令行或从 llvm-nm 应检查的档案文件中指定 XCOFF 对象文件、ELF 对象文件或 IR 对象文件的类型。模式必须是以下之一
- 32
仅处理 32 位对象文件。
- 64
仅处理 64 位对象文件。
- 32_64
处理 32 位和 64 位对象文件。
- any
处理所有支持的对象文件。
在 AIX OS 上,默认情况下仅处理 32 位对象文件并忽略 64 位对象。可以通过设置 OBJECT_MODE 环境变量来更改此设置。例如,OBJECT_MODE=64 会导致 llvm-nm 处理 64 位对象并忽略 32 位对象。-X 标志会覆盖 OBJECT_MODE 变量。
在其他操作系统上,默认情况下会处理所有对象文件:不支持 OBJECT_MODE 环境变量。
- --debug-syms, -a¶
显示所有符号,即使是通常被抑制的符号。
- --defined-only, -U¶
仅打印在此文件中定义的符号。
- --demangle, -C¶
反汇编符号名称。
- --dynamic, -D¶
显示动态符号而不是普通符号。
- --export-symbols¶
打印已排序的符号及其可见性(如果适用),并删除重复项。
- --extern-only, -g¶
仅打印其定义为外部的符号;也就是说,可以从其他文件访问。
- --format=<format>, -f¶
选择输出格式;format 可以是 sysv、posix、darwin、bsd 或 just-symbols。默认值为 bsd。
- --help, -h¶
打印命令行选项及其含义的摘要。
- -j¶
仅打印符号名称。是 –format=just-symbols` 的别名。
- --line-numbers, -l¶
使用调试信息打印定义符号的文件名和行号。未定义符号会打印其第一个重定位的位置。
- -m¶
使用 Darwin 格式。是
--format=darwin
的别名。
- --no-demangle¶
不要反汇编符号名称。这是默认值。
- --no-llvm-bc¶
禁用 LLVM 位码读取器。
- --no-sort, -p¶
按遇到的顺序显示符号。
- --no-weak, -W¶
不打印弱符号。
- --numeric-sort, -n, -v¶
按地址对符号进行排序。
- --portability, -P¶
使用 POSIX.2 输出格式。是
--format=posix
的别名。
- --print-armap¶
除了符号之外,还打印档案符号表。
- --print-file-name, -A, -o¶
在每个符号前加上其所属的文件。
- --print-size, -S¶
除了地址外,还显示符号大小(对于 Mach-O 不适用)。
- --quiet¶
抑制“没有符号”诊断信息。
- --radix=<RADIX>, -t¶
指定符号地址的基数。可接受的值为 d(十进制)、x(十六进制)和 o(八进制)。
- --reverse-sort, -r¶
以相反的顺序排序符号。
- --size-sort¶
按大小对符号进行排序。
- --special-syms¶
不要从输出中过滤特殊符号。
- --undefined-only, -u¶
仅打印未定义的符号。
- --version, -V¶
显示 llvm-nm 可执行文件的版本,然后退出。不与其他命令一起使用。
- @<FILE>¶
从响应文件 <FILE> 中读取命令行选项。
MACH-O 特定选项¶
- --add-dyldinfo¶
添加来自 dyldinfo 的符号(如果符号表中还没有)。这是默认设置。
- --add-inlinedinfo¶
添加来自内联库的符号,仅限 TBD 文件输入。
- --arch=<arch1[,arch2,...]>¶
转储指定架构的符号。
- --dyldinfo-only¶
仅转储来自 dyldinfo 的符号。
- --no-dyldinfo¶
不要添加来自 dyldinfo 的任何符号。
- -s <segment> <section>¶
仅转储来自此段和节名称的符号。
- -x¶
以十六进制打印符号条目。
XCOFF 特定选项¶
- --no-rsrc¶
从导出符号列表中排除资源文件符号(
__rsrc
)。
错误¶
llvm-nm 不支持 GNU nm 的所有参数。
退出状态¶
llvm-nm 以退出代码 0 退出。
另请参阅¶
llvm-ar(1), llvm-objdump(1), llvm-readelf(1), llvm-readobj(1)