1. 核心功能:反汇编 (Disassembly)

最常用的就是 -d-D 参数,用于将机器码翻译成汇编指令。

命令参数描述场景
-d反汇编所有可执行代码段 (.text, .init 等)。Bomb Lab 主要用这个。
-D反汇编所有段(包括数据段),即使它们不是可执行代码。更深入的逆向工程,用于查看数据段中的 ROP Gadgets 等。
-S交错显示源码和汇编仅当编译时使用了 -g 调试符号时可用。
-M <style>指定汇编风格。objdump -d -M intel <file>:切换到 Intel 语法(更易读)。
-j <section>仅反汇编/显示特定段。用于隔离分析 .plt, .got 等特殊段。

Bomb Lab 常用指令:

# 反汇编整个炸弹程序,使用 Intel 语法
objdump -d -M intel bomb

2. 查看文件结构 (ELF Format Inspection)

理解 objdump 的输出结构,有助于定位关键代码和数据。

命令参数描述战略意义
-f显示文件头信息查看文件格式、架构 (elf64-x86-64)。
-h显示段头 (Section Headers)查看 .text, .data, .rodata 等段的名称、大小、加载地址。
-t显示符号表 (Symbol Table)查找函数名 (phase_1, explode_bomb)、全局变量名等。
-r显示重定位记录 (Relocations)分析动态链接的符号。

3. 定位关键数据

Bomb Lab 的关键字符串和常量通常存储在只读数据段(.rodata)中。

命令参数描述场景
-s显示所有段的完整内容 (Raw bytes)用于查找硬编码的字符串、密码、数组等关键数据。

查找字符串的战术流程:

  1. 找到 .rodata 段的 起始地址大小 (使用 objdump -h)。

  2. 使用 objdump -s -j .rodata bomb 打印该段的原始字节。

  3. 在原始字节中搜索可读的字符串(例如“You win!”,“Good job!”)。

4. 战术配合:GDB 与 objdump

  • objdump 的作用: 提供程序的静态地图。它告诉你每个函数从哪个地址开始,有哪些指令。

  • GDB 的作用: 提供程序的动态视图。它让你在特定的指令地址设置断点,暂停执行,观察寄存器和内存状态。

联动步骤:

  1. objdump: 找到 phase_2 的起始地址,例如 0x401120

  2. GDB: b *0x401120 (在函数入口设置断点)。

  3. GDB: 运行时使用 layout asm 窗口,对照 objdump 的输出进行单步跟踪。


你的 Bomb Lab 行动项 (Action Item):

  1. 第一发试探: 对你的 bomb 程序运行 objdump -t bomb

  2. 任务: 找出 main 函数的起始地址。

  3. 任务: 找出所有 phase_ 开头的函数名称,并将它们的地址记下来。这是你进行定向爆破(Defusing)的战术地图