readelf命令用法介绍(Linux命令学习手册)

readelf是一个Linux下的反汇编工具,可以查看二进制文件(ELF)的内部结构和执行文件的信息,包括符号表、重定位表、段、节等。在Linux环境下,调试二进制文件时,readelf常常是必不可少的工具。在本文中,我们将从多个方面详细阐述readelf命令的使用。

一、readelf命令的基本用法

1、作用:readelf命令用来显示目标文件的头信息,节表信息、符号表信息、重定位表信息等。

2、格式:readelf [选项] 文件名

3、选项:

-a, --all           列出文件的所有信息
-h, --file-header       列出文件头信息
-S, --section-header    列出节表信息
-s, --symbols           列出符号表信息
-r, --relocs            列出重定位表信息
-d, --dynamic           列出动态段信息
-V, --version-info      列出版本段信息
-m,--arch-specific, --disassemble,--hex-dump等选项还可以解析 ELF 文件的内部结构

二、readelf命令的常见用途

1、查看目标文件头信息

ELF文件头是ELF文件的第一个部分, 它的类型、版本、机器、程序头的大小和数量、段头的大小和数量、入口点、标志等等信息都被记录在其中。使用readelf命令的-h选项即可查看。

$ readelf -h test.elf

2、查看目标文件节信息

ELF文件包含各种类型的节。节是用来描述ELF文件组织和属性的显式元素。使用readelf命令的-S选项即可查看目标文件的节信息。

$ readelf -S test.elf

3、查看目标文件符号表

ELF文件符号表是所有符号定义和引用的一个中心位置,包含函数名、变量名等,利用readelf命令的-s选项查看符号表信息,-a选项则输出所有信息。

$ readelf -s test.elf

4、查看目标文件重定位表

用于描述需要在链接时进行修补的引用,一般用于动态链接时使用。利用readelf命令的-r选项查看重定位表信息。

$ readelf -r test.elf

三、readelf命令的高级用法

1、解析.c文件生成的ELF二进制文件

编译.c文件时生成的ELF二进制文件包含了文件的元数据信息,利用readelf命令的-d选项可以查看这些信息(注意需要在编译时加-g参数以保留调试符号信息)。

$ gcc -g test.c -o test
$ readelf -d test

2、查看.got、plt、.init、.fini节

.got节是系统动态库的全局变量和函数引用表;.plt节用来实现共享库中的函数重定位。.init和.fini节为程序的初始化和结束代码段,使用readelf命令的-S选项可以查看这些节信息。

$ readelf -S test

3、利用扩展信息查看版本信息

当一个程序引用了一个动态链接的共享库时,它通常是从多个版本中选择一个。这个过程要求每个库都记录着进行版本选型所需的信息。在 ELF 格式中,库的这些信息包含在特殊的、版本相关的段中。使用readelf命令的-V选项即可查看。

$ readelf -V test

四、readelf命令用例

1、查看动态链接库的导入表

使用readelf命令的导入选项,可以查看动态链接库中被使用的函数库的名字。其中,<plt>是指过程链接表,<got>是全局偏移表。

$ readelf -d libtest.so

2、查看可执行文件的依赖关系

通过readelf命令,我们可以查看可执行文件所依赖的动态链接库或者静态链接库。

$ readelf -d test

3、查看指定符号的地址

使用readelf命令的-s选项可以查看符号表信息。通过查找特定符号的名称,即可找到该符号在文件中的地址,同时读取该地址的内容,以确认符号地址是否正确。

$ readelf -s test | grep my_func

4、查看ELF的全局类型

使用readelf命令的–file-header选项,可以查看ELF文件的类型,是否为可执行文件、动态链接库、静态链接库等。

$ readelf -h test

五、总结

本文详细介绍了readelf命令的多个方面,包括基本用法、常见用途、高级用法等,并提供了多个不同场景下的使用案例。在Linux环境下,readelf命令是一个非常实用的反汇编工具,通过深入了解和熟练运用,可以帮助开发人员更好地进行二进制文件调试和应用优化。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平