温馨提示×

如何在centos使用反汇编指令

小樊
38
2026-10-26 16:50:05
栏目: 智能运维

在 CentOS 上进行“反汇编”(disassembly),通常是指把可执行文件、目标文件或内存中的机器码转换成汇编指令。下面从常用工具和具体用法两方面说明。


一、常用反汇编工具(CentOS 可用)

1. objdump(最常用)

属于 binutils,CentOS 默认或很容易安装。

sudo yum install binutils

2. gdb(调试 + 反汇编)

sudo yum install gdb

3. objconv / ndisasm(可选)

  • ndisasm(来自 nasm)
sudo yum install nasm

二、使用 objdump 反汇编(推荐)

1. 反汇编整个可执行文件

objdump -d ./a.out

2. 反汇编指定段(如 .text)

objdump -d -j .text ./a.out

3. 显示源代码 + 汇编(需要 -g 编译)

gcc -g test.c -o test
objdump -S test

4. 显示符号表

objdump -t ./a.out

5. Intel 语法(默认是 AT&T)

objdump -d -M intel ./a.out

三、使用 gdb 反汇编

1. 启动 gdb

gdb ./a.out

2. 反汇编当前函数

disassemble

3. 反汇编指定函数

disassemble main

4. 使用 Intel 语法

set disassembly-flavor intel
disassemble main

5. 反汇编指定地址

disassemble 0x400500, 0x400600

四、反汇编 shellcode / 原始机器码

使用 ndisasm

echo -ne "\x90\x90\xc3" > code.bin
ndisasm -b 64 code.bin

五、常见问题

1. 看不到函数名?

  • 没符号表 → 用 strip 过的程序
  • 解决:编译时加 -g

2. 汇编语法看不懂?

  • CentOS 默认 AT&T
  • 加 -M intel 或 gdb 里 set disassembly-flavor intel

3. 只想看某函数?

objdump -d ./a.out | grep -A 20 "<main>:"

六、典型示例(完整流程)

gcc -g test.c -o test
objdump -d -M intel test
# 或
gdb ./test
(gdb) set disassembly-flavor intel
(gdb) disassemble main

如果你有具体场景(如:内核模块、shellcode、CVE 分析、二进制 CTF),我可以给你更针对性的命令。

0 踩