
Linux 显示二进制目标文件的符号表:nm 命令
在Linux中,二进制文件的符号表(Symbol Table)是链接器(Linker)在编译目标文件(Object File)过程中创建的一张表,它记录着程序中用到的符号及其对应的地址、大小等信息。这些符号可以是变量、函数、数据段、代码段等等。
nm命令用于显示目标文件中的符号表信息,从而了解程序内部的各种信息,例如函数入口地址、变量定义等等。以下是使用nm命令显示符号表信息的步骤。
1. 安装nm命令
nm命令通常是作为binutils集合的一部分提供的,因此如果系统中没有安装binutils,需要先安装binutils。
sudo apt-get install binutils
2. 使用nm命令
假设目标文件名为example.o,使用nm命令来查看符号表信息:
nm example.o
上面的命令会输出类似下面的结果:
0000000000000870 T main
U printf
0000000000000000 T _start
U __libc_start_main@@GLIBC_2.2.5
0000000000000000 T __x86.get_pc_thunk.bx
0000000000000000 T _init
00000000000009e4 R __do_global_dtors_aux_fini_array_entry
U __gcc_personality_v0
00000000000009f0 R __do_global_dtors_aux_init_array_entry
00000000000009b0 r __FRAME_END__
00000000000009c0 r __GNU_EH_FRAME_HDR
0000000000000840 T _fini
00000000000009d0 r __do_global_ctors_aux_fini_array_entry
0000000000000890 T foo
0000000000000820 T _start
上面的结果输出了目标文件中的各种符号,包括函数(T)、未定义的函数符号(U)、只读数据(R)和只读常量(r)等等。其中,每一行的第一列是符号的地址、大小和属性,T表示该符号是一种类型,如函数。
3. 过滤符号表信息
nm命令可以使用一些选项来过滤符号表信息,例如:
-A
:显示所有符号,包括未导出的符号。-C
:显示C++符号,包括命名空间。-o
:按照名称排序。-r
:反向输出。
例如,以下命令可以按照名称排序并显示所有符号:
nm -o -A example.o
以下命令可以按照名称排序并显示C++符号(如果有的话):
nm -o -C example.o
4. 结论
通过使用nm命令,我们可以查看目标文件中的符号表信息,包括函数入口地址、变量定义等等。nm命令也支持多种选项来过滤符号表信息,从而让我们更容易地了解程序内部的各种信息。如果你是一名Linux开发人员,掌握nm命令是非常有用的。

© 版权声明
THE END
暂无评论内容