温馨提示×

怎样使用linux反汇编命令

小樊
45
2026-09-27 14:52:16
栏目: 智能运维

在 Linux 下“反汇编”通常指把可执行文件 / 目标文件 / 内存中的机器码转换为汇编代码。下面按常见场景给你一个实用指南。


一、常用反汇编工具

1️⃣ objdump(最常用)

适合 ELF 可执行文件、.o 文件。

objdump -d ./a.out

常用选项:

objdump -d -M intel ./a.out     # Intel 语法(推荐)
objdump -D ./a.out              # 反汇编所有段
objdump -d -S ./a.out           # 汇编+源码(需 -g 编译)

示例:

gcc -g -o test test.c
objdump -d -M intel -S test

2️⃣ gdb(调试时反汇编)

适合运行中的程序或函数级分析。

gdb ./a.out

GDB 中:

disassemble main
disassemble 0x401000
disassemble /m main   # 汇编+源码

设置 Intel 语法:

set disassembly-flavor intel

3️⃣ ndisasm(裸机器码)

适合 shellcode / 二进制片段。

ndisasm -b 32 shellcode.bin
ndisasm -b 64 shellcode.bin

4️⃣ readelf(辅助分析)

查看段、符号、入口地址。

readelf -h a.out
readelf -S a.out
readelf -s a.out

二、反汇编指定函数

objdump

objdump -d -M intel ./a.out | grep -A 30 "<main>:"

gdb

disassemble main

三、反汇编原始机器码

例如:

echo -n "\x55\x48\x89\xe5" > code.bin
ndisasm -b 64 code.bin

或用 Python:

import dis

(Python 是字节码反汇编,不是 x86)


四、反汇编正在运行的进程

gdb -p <pid>

然后:

info proc mappings
disassemble 0x地址

五、反汇编整个二进制(静态分析)

objdump -D -M intel ./a.out > disasm.txt

六、推荐组合(实战)

gcc -g -o test test.c
objdump -d -M intel -S test | less

或:

gdb ./test
(gdb) set disassembly-flavor intel
(gdb) disassemble main

七、常见坑

  • ❌ stripped 文件:函数名消失
  • ✅ 用 objdump -d + 地址分析
  • ❌ 没加 -g:看不到源码
  • ✅ 用 gdb + 反汇编更直观

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

  • 是 C / C++ / 汇编 / shellcode
  • 想分析 函数 / 病毒 / 漏洞 / 内核

我可以给你更针对性的命令示例。

0 踩