当前位置:首页>Linux>Linux 命令篇:objdump 查看与分析二进制文件

Linux 命令篇:objdump 查看与分析二进制文件

  • 2026-09-09 00:14:57
Linux 命令篇:objdump 查看与分析二进制文件
大家好!我是大虫子🐛!
这篇文章给那些在 Linux 开发的小伙伴们介绍一个强大的显示二进制文件信息的命令行工具:objdump。
一、objdump 概念
用途:objdump 是 GNU Binary Utilities (binutils) 工具链中的一员,用于 显示二进制文件的各种信息,常用于程序调试、逆向分析、底层学习等场景。
作用:
  • 反汇编(将机器码转换为汇编代码)
  • 查看目标文件/可执行文件的段信息
  • 查看符号表、重定位信息
  • 查看文件头、调试信息等
简单理解:objdump 就是二进制文件的 “显微镜”,帮你看清可执行文件内部的构造。
二、基本语法
objdump [选项] [文件]
文件:目标文件、可执行文件、库文件(.o、.elf、.a、.so 等)
三、常用选项
3.1 反汇编相关
选项
含义
-d,--disassemble
反汇编可执行代码段(仅 .text 段)
-D, --disassemble-all
反汇编所有段(包括 .data、.rodata 等)
-S,--source
源码与汇编混合显示(需用 -g 编译)
-l,--line-numbers
显示行号和文件名
-M intel
使用 Intel 汇编语法(默认 AT&T)
-C,--demangle
还原 C++ 修饰过的符号名
3.2 信息查看相关
选项
含义
-f,--file-headers
显示文件头信息
-h, --headers
显示段表(所有段的头信息)
-t, --syms
显示符号表
-r, --reloc
显示重定位信息
-x, --all-headers
显示所有头信息(等价于 -a -f -h -p -r -t)
-s,--full-contents
显示段的完整内容
3.3 其他常用选项
选项
含义
-j name,--section=name
只显示指定段(如 -j .text)
-p,--private-headers
显示特定格式的私有头信息
-g, --debugging
显示调试信息
-i,--info
显示支持的硬件架构和目标文件格式
-w,--wide
宽行输出,适合显示长行
四、常见示例
示例 1:查看文件头信息
objdump -f main
输出示例:
main:     file format elf64-x86-64architecture: i386:x86-64, flags 0x00000112:EXEC_P, HAS_SYMS, D_PAGEDstart address 0x0000000000401000
示例 2:查看所有段信息
objdump -h main
输出示例:
main:     file format elf64-x86-64Sections:Idx Name          Size      VMA               LMA               File off  Algn0 .interp       0x00001c  0x00000000004003180x00000000004003180x000003182**0                  CONTENTS, ALLOC, LOAD, READONLY, DATA1 .note.ABI-tag 0x0000200x00000000004003340x00000000004003380x000003342**2                  CONTENTS, ALLOC, LOAD, READONLY  ...13 .text         0x0005a20x00000000004010000x00000000004010000x000010002**4                  CONTENTS, ALLOC, LOAD, READONLY, CODE14 .data         0x0000080x00000000004020000x00000000004020000x000020002**3                  CONTENTS, ALLOC, LOAD, DATA15 .bss          0x0000040x00000000004020080x00000000004020080x000020082**0                  ALLOC
示例 3:反汇编可执行代码段
objdump -d main
输出示例:
main:     file format elf64-x86-64Disassembly of section .text:0000000000401000 <_start>:401000:    f3 0f 1e fa           endbr64 401004:    31 ed                 xor%ebp,%ebp401006:    4989 d1              mov    %rdx,%r9401009:    5e                    pop%rsi    ...0000000000401136 <main>:401136:    f3 0f 1e fa           endbr64     40113a:    55push%rbp    40113b:    4889 e5              mov    %rsp,%rbp    ...
示例 4:反汇编所有段(包含数据段)
objdump -D main
示例 5:源码与汇编混合显示
# 先用 -g 编译gcc -g -o main main.c# 混合显示objdump -S main
输出示例:
0000000000401136 <main>:#include <stdio.h>int main() {401136:    f3 0f 1e fa           endbr64 40113a:    55                    push   %rbp40113b:    4889 e5              mov    %rsp,%rbpprintf("Hello\n");40113f:    488d 3d 10000000  lea    0x10(%rip),%rdi401146:    e8 e5 fe ff ff        call   401030 <puts@plt>return0;40114b:    b8 00000000        mov    \$0x0,%eax401150:    5d                    pop    %rbp401151:    c3                    ret    
示例 6:使用 Intel 汇编语法
objdump -d -M intel main
输出示例:
0000000000401136 <main>:401136:    f3 0f 1e fa           endbr64 40113a:    55                    push   rbp40113b:    4889 e5              mov    rbp, rsp40113f:    488d 3d 10000000  lea    rdi, [rip + 0x10]401146:    e8 e5 fe ff ff        call   401030 <puts@plt>
示例 7:查看符号表
objdump -t main | head -30
输出示例:
main:     file format elf64-x86-64SYMBOL TABLE:0000000000000000 l    df *ABS*  0000000000000000              main.c0000000000000000 l    d  .text  0000000000000000              .text0000000000000000 l    d  .data  0000000000000000              .data0000000000401000 l    F .text  0000000000000000              _start0000000000401136 g    F .text  000000000000000c              main0000000000401050 g    F .text  0000000000000025              func1
示例 8:查看重定位信息
objdump -r main
示例 9:只查看特定段(如 .text)
objdump -d -j .text main
示例 10:查看所有头信息
objdump -x main
五、常见应用场景
1. 学习底层原理
# 查看函数汇编实现objdump -d -M intel main | grep -A 20 "<main>"
2. 调试程序
# 查看是否有调试信息objdump -g main
3. 分析二进制文件结构
# 查看所有段信息objdump -h main
4. 提取特定数据
# 查看只读数据段objdump -s -j .rodata main
5. 逆向分析
# 完整反汇编 + C++ 符号还原objdump -d -C -M intel main
六、常用命令速查表
需求
命令
查看文件格式
objdump -f main
查看所有段
objdump -h main
反汇编代码段
objdump -d main
源码+汇编混合
objdump -S main
Intel 语法
objdump -d -M intel main
查看符号表
objdump -t main
查看重定位
objdump -r main
查看所有信息
objdump -x main
只看某段
objdump -d -j .text main
objdump 是一个功能强大的二进制文件分析工具,它提供了丰富的选项来提取二进制文件的各种信息,可以更好地帮助小伙伴们理解程序的内部结构和执行流程,提高软件开发和系统分析的能力。

最新文章

随机文章