linux 显示二进制目标文件的符号表 命令:nm

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
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容