在 CentOS 上“反汇编指令”通常指把二进制程序(可执行文件、目标文件、库)反汇编成汇编代码,或者查看某条机器指令对应的汇编。下面按常见场景给你说明。
objdump(最常用,binutils 自带)sudo yum install -y binutils
基本用法:
objdump -d ./test
反汇编某一段:
objdump -d -M intel ./test
-M intel:使用 Intel 语法(默认是 AT&T)
只看 main 函数:
objdump -d -M intel ./test | grep -A 30 "<main>:"
gdb(调试 + 反汇编)sudo yum install -y gdb
进入 GDB:
gdb ./test
反汇编当前函数:
disassemble
反汇编指定函数:
disassemble main
使用 Intel 语法:
set disassembly-flavor intel
disassemble main
反汇编指定地址:
disassemble 0x400526, 0x400540
ndisasm(针对裸机器码)sudo yum install -y nasm
反汇编一段机器码:
echo -n "\x55\x48\x89\xe5" | ndisasm -b 64 -
objdump 反汇编单个指令(从机器码)例如机器码:
55 48 89 e5
写入文件:
printf '\x55\x48\x89\xe5' > code.bin
objdump -D -b binary -m i386:x86-64 -M intel code.bin
gdb ./test
(gdb) break main
(gdb) run
(gdb) disassemble
(gdb) x/10i $pc
-m i386:x86-64:64 位-m i386:32 位strip 过的程序:函数名可能丢失objdump -d -M intel ./a.out
objdump -d -M intel mydriver.ko
// test.c
int main() {
return 0;
}
gcc test.c -o test
objdump -d -M intel ./test
你会看到类似:
<main>:
push rbp
mov rbp, rsp
mov eax, 0
pop rbp
ret
如果你是想:
可以告诉我具体场景,我可以给你更针对性的命令。