readelf工具常用于查看ELF文件的信息。常见的ELF文件有Linux中的可执行文件、动态库(*.so)或者静态库(*.a)等。readelf工具的常用选项如表3.2所示。
表3.2 readelf工具的常用选项
readelf工具的示例如下:
(1)利用readelf-s获取共享库中函数的地址偏移量。共享库中的函数和全局变量都有一个对应的符号,因此需要使用-s选项。命令为:
(2)利用readelf获取.bss节的地址。命令为:
(3)利用readelf-r获取函数在.got表中地址。命令为:
GDB(The GNU Debugger)的功能非常强大,是UNIX/Linux系统下调试程序的常用工具。用户可以利用GDB提供的基本命令完成类似图形化调试器环境下常见的调试功能,如设置断点、单步调试等。
在某些情况下,基本的二进制代码分析工具可能不够用,还需要使用高级的二进制代码分析工具对程序进行更深层次的数据流模型、数据类型以及控制路径分析。
GDB支持自定义脚本文件,以实现辅助调试。自定义脚本文件的语法比较老,目前Python语言比较流行,自GDB 7起其内部开始支持Python解释器。在Python脚本文件中,使用GDB Python API,可以实现对GDB的控制。因此,用户还可以根据实际需要,通过GDB中的Python API来定制一些命令。