温馨提示×

linux反汇编指令怎么选

小樊
35
2026-07-21 13:01:41
栏目: 智能运维

在 Linux 下进行反汇编(disassembly),选什么指令主要取决于目标文件类型、架构、分析深度。下面给你一个实用选型指南,从“用什么工具”到“常用命令示例”都覆盖。


一、先搞清楚 3 件事

  1. 目标是什么?

    • 可执行文件(ELF)
    • 共享库(.so
    • 内核模块(.ko
    • 裸二进制(firmware / shellcode)
    • 正在运行的进程
  2. CPU 架构?

    • x86 / x86-64(最常见)
    • ARM / AArch64
    • MIPS / RISC-V 等
  3. 分析目的?

    • 看汇编代码
    • 做逆向分析
    • 调试
    • 漏洞分析

二、最常用反汇编工具对比

工具 适合场景 推荐指数
objdump 静态反汇编 ELF 文件 ⭐⭐⭐⭐⭐
gdb 调试 + 动态反汇编 ⭐⭐⭐⭐⭐
ndisasm 裸二进制文件 ⭐⭐⭐
radare2 / r2 逆向分析 ⭐⭐⭐⭐
IDA Pro 专业逆向 ⭐⭐⭐⭐⭐
Ghidra 免费逆向 ⭐⭐⭐⭐
llvm-objdump LLVM 工具链 ⭐⭐⭐

三、最常用:objdump(首选)

1️⃣ 查看整个程序的汇编

objdump -d a.out

2️⃣ 反汇编指定段(如 .text

objdump -d -j .text a.out

3️⃣ 显示源码 + 汇编(如果有调试信息)

objdump -S a.out

4️⃣ Intel 语法(更直观)

objdump -M intel -d a.out

5️⃣ 反汇编共享库

objdump -d libfoo.so

适合:ELF 可执行文件 / 库文件


四、调试场景:gdb(动态反汇编)

1️⃣ 启动程序

gdb ./a.out

2️⃣ 反汇编当前函数

disassemble

3️⃣ 指定函数

disassemble main

4️⃣ Intel 语法

set disassembly-flavor intel
disassemble main

5️⃣ 反汇编指定地址

disassemble 0x4005f0,0x400620

适合:断点调试、动态分析


五、裸二进制文件(无 ELF 头)

使用 ndisasm

ndisasm -b 32 shellcode.bin

或 64 位:

ndisasm -b 64 shellcode.bin

适合:shellcode / firmware / bootloader


六、专业逆向:radare2

r2 ./a.out

常用命令:

aaa        # 自动分析
pd 20      # 反汇编 20 条
pdf        # 反汇编当前函数

适合:逆向工程、漏洞分析


七、架构选择速查表

CPU 工具 选项
x86 objdump -M intel
x86-64 objdump -M intel
ARM objdump -b elf32-littlearm
AArch64 objdump -M aarch64

示例:

objdump -d -M intel aarch64_binary

八、推荐组合(实战)

✅ 新手 / 学习汇编

objdump -M intel -d a.out

✅ 调试程序

gdb ./a.out
disassemble main

✅ 逆向分析

r2 ./a.out
aaa
pdf

九、一句话总结

静态分析用 objdump,动态调试用 gdb,专业逆向用 radare2 / IDA / Ghidra

如果你愿意,可以告诉我:

  • x86 还是 ARM
  • ELF / so / bin
  • 学习汇编还是做逆向

我可以直接给你“最合适的一条命令”。

0