在Linux环境下,反汇编指令通常使用objdump
工具
objdump -d <binary_file>
其中,<binary_file>
是你要反汇编的二进制文件。
以下是一个简单的示例:
hello.c
):#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
gcc
编译该程序:gcc -o hello hello.c
这将生成一个名为hello
的可执行文件。
objdump
反汇编该程序:objdump -d hello
输出可能类似于以下内容:
hello: file format elf64-x86-64
Disassembly of section .text:
0000000000401136 <main>:
401136: 55 push %rbp
401137: 48 89 e5 mov %rsp,%rbp
40113a: 48 83 ec 10 sub $0x10,%rsp
40113e: 48 8d 3d 9a fe ff ff lea -0x166(%rip),%rdi # 400ff8 <_IO_stdin_used+0x8>
401145: e8 c5 fe ff ff callq 401010 <puts@plt>
40114a: b8 00 00 00 00 mov $0x0,%eax
40114f: c9 leaveq
401150: c3 retq
这个输出显示了main
函数的汇编代码。每一行表示一个汇编指令,左侧是内存地址,右侧是指令本身及其操作数。例如:
55
:push %rbp
,将基址指针压入栈。48 89 e5
:mov %rsp,%rbp
,将栈指针移动到基址指针寄存器。48 83 ec 10
:sub $0x10,%rsp
,从栈指针中减去16字节,为局部变量分配空间。请注意,这个示例是针对x86-64架构的。如果你使用的是其他架构(例如ARM),则需要使用相应的工具和指令。