GCC objdump

反汇编:把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思,常用于软件破解(例如找到它是如何注册的,从而解出它的注册码或者编写注册机)、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、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;}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值