📌  相关文章
📜  linux中nm命令输出中的T是什么-Shell-Bash(1)

📅  最后修改于: 2023-12-03 15:17:23.761000             🧑  作者: Mango

Linux中nm命令输出中的T是什么

介绍

在Linux中使用nm命令可以查看编译器生成的二进制目标文件中的符号表信息,包括函数名、变量名等等。输出结果的第三列通常是一个字母,表示该符号的类型,其中T就是表示函数类型的符号。

T代表函数类型符号

在Linux下,可执行文件、静态库和动态库都具有符号表信息,选项-T可以在符号表中只显示类型为函数的符号。这就是输出结果中出现了T,并代表function type(函数类型)的原因。

举例来说,比如编写了一个名为test的C语言程序,其中包含了一个名为func的函数。使用gcc编译并链接该程序,生成可执行文件test。使用nm命令查看该可执行文件的符号表信息:

nm -C test

输出结果类似于:

080482e0 t __libc_csu_fini
08048340 t __libc_csu_init
08048404 t _start
08048440 T func
08048520 t main
080485b8 T __libc_csu_init
080485c4 T __libc_csu_fini

可以看到,符号表中包含了函数func,它的类型为T(Function),是一个可执行函数。

其他类型符号

除了函数类型符号T,nm命令的输出结果中还有其它一些类型符号,它们分别表示不同类型的符号。下面是一些常见的类型符号及其含义:

  • U (undefined type) 未定义类型,表示该符号没有在当前可执行文件或库中定义,在程序执行时需要从外部引用。
  • w (weak type) 弱类型,表示该符号是一个弱符号,在链接时可以被其他符号覆盖。
  • B (initialized data section, or BSS) 初始化数据段(.data)或BSS段(.bss),表示该符号包含在程序的数据段中,可以被初始化(.data)或未初始化(.bss)。
  • D (initialized data section) 初始化数据段,表示该符号是一个初始化的全局变量,它在程序执行前已经被初始化。
  • G (initialized or non-initialized data section) 数据段(.data)或BSS段(.bss),表示该符号包含在可执行文件或库的数据段中,但无法确定它是否被初始化。
总结

在Linux中使用nm命令可以查看编译器生成的二进制目标文件中的符号表信息,包括函数名、变量名等等。输出结果的第三列通常是一个字母,表示该符号的类型,其中T就是表示函数类型的符号。同时,输出结果中还包含了其它一些类型符号,它们分别表示不同类型的符号。了解这些类型符号的含义可以帮助我们更好地理解符号表信息。