Linux中objdump的使用方法


objdump 是 Linux 中一个强大的二进制文件分析工具,主要用于反汇编目标文件、可执行文件或库文件,并显示其中的详细信息。以下是它的常见用法和选项说明:


1. 基本语法

objdump [选项] <文件名>

2. 常用选项和功能

(1)反汇编代码

  • 反汇编特定节区(如 .text

    objdump -d <文件名>
    

    示例:

    objdump -d /bin/ls
    
  • 反汇编所有节区(包括数据段)

    objdump -D <文件名>
    
  • 指定架构(如交叉编译时需明确目标架构):

    objdump -d -m i386 <文件名>      # 32位 x86
    objdump -d -m arm <文件名>       # ARM
    

(2)显示文件头信息

objdump -f <文件名>

显示文件的魔数、架构、入口地址等。

(3)显示节区头信息

objdump -h <文件名>

列出所有节区(Section)的名称、大小、地址等。

(4)显示符号表

objdump -t <文件名>

查看文件中的符号(函数、全局变量等)。

(5)显示动态符号表(用于动态库)

objdump -T <文件名>

(6)显示重定位信息

objdump -r <文件名>

(7)混合显示源代码和汇编(需编译时加 -g 调试信息)

objdump -S <文件名>

(8)以 Intel 语法显示汇编(默认是 AT&T 语法)

objdump -d -M intel <文件名>

(9)控制输出范围

  • 反汇编指定函数:
    objdump -d <文件名> | grep -A20 "<函数名>"
    
  • 反汇编指定地址范围:
    objdump -d --start-address=0x400000 --stop-address=0x400100 <文件名>
    

3. 实际示例

示例1:反汇编可执行文件

objdump -d /bin/ls | less

示例2:查看目标文件结构

objdump -h main.o

示例3:分析动态库的符号

objdump -T libc.so.6

示例4:显示完整文件信息(包含头、节区、符号、代码)

objdump -x -d a.out

4. 常见问题

  • 权限问题:若文件无读权限,需使用 sudo
  • 架构不匹配:尝试通过 -m 指定架构,或使用交叉编译工具链中的 objdump(如 aarch64-linux-gnu-objdump)。
  • ** stripped 文件**:如果文件被剥离符号表(strip 过),部分信息可能无法显示。

5. 结合其他工具

  • 查找特定函数objdump -d <文件> | grep <函数名>
  • 统计代码大小objdump -h <文件> | grep .text
  • 调试崩溃问题:通过反汇编定位崩溃地址(结合 gdb)。

通过灵活组合这些选项,objdump 可以帮助你深入分析二进制文件的内部结构。

posted @ 2025-08-05 14:51  guanyubo  阅读(265)  评论(0)    收藏  举报