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 可以是 sysvposixdarwinbsdjust-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)