在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),则需要使用相应的工具和指令。