linux obj dump 用法
Linux objdump 用法详解
Linux objdump 是一个非常强大的命令行工具,用于分析目标文件或可执行文件,可以显示文件的各个节(section)的详细信息,如代码段、数据段等。本篇文章将详细介绍 objdump 命令的使用方法,从基础到高级逐步回答。
第一步:安装 objdump
在 Linux 系统上,objdump 命令通常属于 binutils 软件包的一部分。大多数常见的 Linux 发行版都默认安装了 binutils,所以无需额外安装。如果你的系统中没有安装 binutils,则可以使用以下命令来安装:
bash
sudo apt-get install binutils
根据你使用的 Linux 发行版可能不同,安装命令也会有所不同。请根据你的系统选择正确的安
装命令。
第二步:基本语法和用法
objdump 命令的基本语法如下:
bash
objdump [options]
其中 objfile 是指定要分析的目标文件或可执行文件的文件名。options 表示 objdump 命令的选项参数,我们将在后面的内容中详细介绍。
以下是一些常用的选项参数:
- `-d` 或 `disassemble`:显示反汇编代码。
- `-s` 或 `full-contents`:显示所有节的内容。
- `-t` 或 `syms`:显示符号表信息。
- `-h` 或 `section-headers`:显示所有节的头信息。
- `-r` 或 `reloc`:显示重定位表。
- `-x` 或 `all-headers`:显示所有头信息。
- `-l` 或 `line-numbers`:显示源代码行号信息。
下面我们将逐个选项参数进行详细讲解。
- 反汇编代码(-d 或 disassemble)
使用 `-d` 或 `disassemble` 选项参数可以将目标文件或可执行文件中的机器码反汇编为可读的汇编代码。例如,要将一个名为 `test.o` 的目标文件反汇编,可以执行以下命令:
bash
objdump -d test.o
该命令将会输出 test.o 中所有节的反汇编代码。输出内容类似于以下示例:
asm
0000000000000000 <main>:
  0:  55                      push  %rbp
  1:  48 89 e5                mov    %rsp,%rbp
  4:  48 83 ec 10            sub    0x10,%rsp
  8:  c7 45 fc 00 00 00 00    movl  0x0,-0x4(%rbp)
printf输出格式linux
  f:  e9 0a 00 00 00          jmp    1e <main+0x1e>
  14:  8b 45 fc                mov    -0x4(%rbp),%eax
  17:  01 45 fc                add    %eax,-0x4(%rbp)
  1a:  83 45 fc 01            addl  0x1,-0x4(%rbp)
  1e:  83 7d fc 0f            cmpl  0xf,-0x4(%rbp)
  22:  7e f0                  jle    14 <main+0x14>
  24:  90                      nop
  25:  c9                      leaveq
  26:  c3                      retq 
这个示例显示了一个 `main` 函数的反汇编代码。每一行显示了一个指令的机器码和对应的汇编指令。
- 所有节的内容(-s 或 full-contents)
使用 `-s` 或 `full-contents` 选项参数可以显示目标文件或可执行文件中所有节的内容。例如,要显示一个名为 `test.o` 的目标文件中的所有节的内容,可以执行以下命令:
bash
objdump -s test.o
该命令将会输出 test.o 中所有节的内容。输出内容类似于以下示例:
console
Contents of section .text:
0000 554889e5 4883ec10 c745fc00 000000e9  UH..H...E.......
0010 0a000000 008b45fc 0145fc83 45fc0183  ......E.E..E..E..
0020 7dfc0f7e f090c9c3 00000000 00000000  }..~............
Contents of section .data:
0000 00000000                            ....
Contents of section .bss:
0000 00000000                            ....
这个示例显示了目标文件 test.o 中所有节(.text、.data、.bss)的内容。
- 符号表信息(-t 或 syms)
使用 `-t` 或 `syms` 选项参数可以显示目标文件或可执行文件中的符号表信息。符号表包含了文件中定义的全局和局部符号的信息,如函数、变量等。例如,要显示一个名为 `test.o` 的目标文件的符号表信息,可以执行以下命令:
bash
objdump -t test.o
该命令将会输出 test.o 中的符号表信息。输出内容类似于以下示例:
console
test.o:    file format elf64-x86-64
SYMBOL TABLE:
0000000000000000 l    df *ABS*    0000000000000000 test.c
0000000000000000 l    d  .text    0000000000000000 .text