反汇编:把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思,常用于软件破解(例如找到它是如何注册的,从而解出它的注册码或者编写注册机)、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、OS的内核原理及理解高级语言代码都有相当大的帮助,在此过程中我们可以领悟到软件作者的编程思想。总之一句话:软件一切神秘的运行机制全在反汇编代码里面。
#include<stdio.h>
void swap(int *x, int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int main(void)
{
int x=5, y=6;
swap(&x, &y);
printf("x = %d, y = %d\n", x, y);
return 0;
}
[walter@RAS-Dev c-lan]$ objdump -d swap.o swap.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <swap>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 48 89 7d e8 mov %rdi,-0x18(%rbp) 8: 48 89 75 e0 mov %rsi,-0x20(%rbp) c: 48 8b 45 e8 mov -0x18(%rbp),%rax 10: 8b 00 mov (%rax),%eax 12: 89 45 fc mov %eax,-0x4(%rbp) 15: 48 8b 45 e0 mov -0x20(%rbp),%rax 19: 8b 10 mov (%rax),%edx 1b: 48 8b 45 e8 mov -0x18(%rbp),%rax 1f: 89 10 mov %edx,(%rax) 21: 48 8b 45 e0 mov -0x20(%rbp),%rax 25: 8b 55 fc mov -0x4(%rbp),%edx 28: 89 10 mov %edx,(%rax) 2a: c9 leaveq 2b: c3 retq 000000000000002c <main>: 2c: 55 push %rbp 2d: 48 89 e5 mov %rsp,%rbp 30: 48 83 ec 10 sub $0x10,%rsp 34: c7 45 fc 05 00 00 00 movl $0x5,-0x4(%rbp) 3b: c7 45 f8 06 00 00 00 movl $0x6,-0x8(%rbp) 42: 48 8d 55 f8 lea -0x8(%rbp),%rdx 46: 48 8d 45 fc lea -0x4(%rbp),%rax 4a: 48 89 d6 mov %rdx,%rsi 4d: 48 89 c7 mov %rax,%rdi 50: e8 00 00 00 00 callq 55 <main+0x29> 55: 8b 55 f8 mov -0x8(%rbp),%edx 58: 8b 4d fc mov -0x4(%rbp),%ecx 5b: b8 00 00 00 00 mov $0x0,%eax 60: 89 ce mov %ecx,%esi 62: 48 89 c7 mov %rax,%rdi 65: b8 00 00 00 00 mov $0x0,%eax 6a: e8 00 00 00 00 callq 6f <main+0x43> 6f: b8 00 00 00 00 mov $0x0,%eax 74: c9 leaveq 75: c3 retq
int x=5, y=6; swap(&x, &y); printf("x = %d, y = %d\n", x, y); return 0;}