phase_4:递归调用和栈

首先查看phase_4的反汇编代码段:

00001623 <phase_4>:1623:   55                      push   %ebp1624:    89 e5                   mov    %esp,%ebp1626:   53                      push   %ebx1627:    83 ec 14                sub    $0x14,%esp162a:  e8 e1 fb ff ff          call   1210 <__x86.get_pc_thunk.bx>162f:  81 c3 d1 39 00 00       add    $0x39d1,%ebx1635:    8d 45 f0                lea    -0x10(%ebp),%eax  #这里应该是输入的第二个参数位置1638:  50                      push   %eax1639:    8d 45 f4                lea    -0xc(%ebp),%eax   #这里应该是输入的第二个参数位置163c:  50                      push   %eax163d:    8d 83 ad e3 ff ff       lea    -0x1c53(%ebx),%eax1643:  50                      push   %eax1644:    ff 75 08                pushl  0x8(%ebp)1647:   e8 d4 fa ff ff          call   1120 <__isoc99_sscanf@plt>164c:   83 c4 10                add    $0x10,%esp164f:  83 f8 02                cmp    $0x2,%eax    #输入的数的个数不等于2就会爆炸1652:   75 06                   jne    165a <phase_4+0x37>1654:  83 7d f4 0e             cmpl   $0xe,-0xc(%ebp)  #第一个数大于14就会爆炸1658:  76 05                   jbe    165f <phase_4+0x3c>165a:  e8 10 05 00 00          call   1b6f <explode_bomb>165f:   83 ec 04                sub    $0x4,%esp1662:   6a 0e                   push   $0xe1664:    6a 00                   push   $0x01666:    ff 75 f4                pushl  -0xc(%ebp)1669:  e8 5a ff ff ff          call   15c8 <func4>166e:  83 c4 10                add    $0x10,%esp   1671:   83 f8 01                cmp    $0x1,%eax    调用func4函数后,若eax不等于1,就会爆炸1674: 75 06                   jne    167c <phase_4+0x59>1676:  83 7d f0 01             cmpl   $0x1,-0x10(%ebp)         #第二个数不等于2就会爆炸167a:  74 05                   je     1681 <phase_4+0x5e>167c:  e8 ee 04 00 00          call   1b6f <explode_bomb>1681:   8b 5d fc                mov    -0x4(%ebp),%ebx1684: c9                      leave  1685:    c3                      ret

从上面的代码中可以推测出,要输入两个数,第二个数必须是1,第一个数不能大于14。在func4函数中进行了一堆操作,反映在eax的值上,然后检测eax中的值是否为1,不等于1就会爆炸。func4函数有点长,我就没有细究其过程,现在,可以在explode_bomb处设置断点,然后输入x 1, x的值从0试到14,就能得出结果。下面是通关操作:

很幸运,我的推测是对的,输入的值为8 1时,通过了第四关。

拆弹实验-phase_4相关推荐

  1. 计算机系统基础实验:二进制拆弹实验

    一.实验目的: 学习并熟练使用 gdb 调试器和 objdump 理解汇编语言代码的行为或作用 提高阅读和理解汇编代码的能力 二.实验要求 实验共包括七个阶段,每个阶段考察机器级语言程序的不同方面,难 ...

  2. 二进制拆弹实验详解_Population Count算法-求二进制数中1的个数

    所谓Population Count算法,即是指计算一个二进制数中1的个数的算法.具体来说,就是任意给定一个无符号整数N,求N的二进制表示中1的个数,比如N = 5(0101)时,返回2:N = 15 ...

  3. 二进制拆弹实验详解linux,拆解二进制炸弹

    拆解二进制炸弹 一.实验目的 1.理解C语言程序的机器级表示. 2.初步掌握GDB调试器的用法. 3.阅读C编译器生成的x86-64机器代码,理解不同控制结构生成的基本指令模式,过程的实现. 二. 实 ...

  4. 计算机系统ARM64拆除炸弹

    一.内容简介 1.1 拆弹实验 拆弹实验是csapp课程的一个经典实验,实验共有六关(phase_1 ... phase_6),还有一个隐藏关卡(secret_phase).该实验与x86架构下的拆弹 ...

  5. 记ICS的lab2--bomb实验

    (我真的是瞎tm投机取巧解开的bomb,我并不能保证帮上你什么忙,兄弟!) 实验总结: 首先这个实验真的是花了很多很多的时间了,逻辑硬伤,解得很慢.如果不是等到全部解完已经过去一周之后才写报告,我想我 ...

  6. CSAPP Lab2 实验记录 ---- Bomb Lab(Phase 1 - Phase 6详细解答 + Secret Phase彩蛋解析)

    文章目录 Lab 总结博客链接 实验前提引子 实验需要指令及准备 Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6 Phase Secret(彩蛋Phas ...

  7. 国外计算机课程lab,计算机系统实验之bomblab

    今天刚刚验收CSAPP实验3,趁着余温,记录一下这个实验,顺便回顾下CSAPP课程的相关知识. 实验目的 1.使用gdb工具反汇编出汇编代码,结合c语言文件找到每个关卡的入口函数.然后分析汇编代码,分 ...

  8. CSAPP_实验二 拆炸弹 汇编知识应用

    CSAPP--实验二 拆炸弹 Phase1 disas phase_1, 反汇编 phase_1 函数 在 phase_1函数入口处 设置断点 break phase_1 run 开始运行,输入字符串 ...

  9. CSAPP实验二:二进制炸弹(Bomb Lab)

    本系列文章为中国科学技术大学计算机专业学科基础课<计算机系统>布置的实验,上课所用教材和内容为黑书CSAPP,当时花费很大精力和弯路,现来总结下各个实验,本文章为第二个实验--二进制炸弹( ...

  10. [逆向工程] 二进制拆弹Binary Bombs 快乐拆弹 详解

    二进制拆弹 binary bombs 教你最快速解题,成功拆弹 最近计算机基础课,的实验lab2,二进制拆弹,可以说是拆的我很快乐了(sub n, %hair) 此处头发减n 我刚开始做的时候很是懵逼 ...

最新文章

  1. c语言如何判断数组不为空,PHP 判断数组是否为空的几种方法
  2. DBGRIDEH 组件在Borland开发工具中应用全攻略
  3. 【绝对干货】北京三年java开发多少工资
  4. python如何强制转换数据类型_python数据类型强制转换实例详解
  5. 某聊天工具消息记录数据库文件解密逆向分析
  6. MySQL 调用存储过程
  7. Java8 Striped64 和 LongAdder
  8. python安装哪个版本好啊_windows10安装哪个版本的Python?
  9. 搜索引擎关键字智能提示的一种实现
  10. 用了Redis里面的map和set
  11. Porteus 2.0 RC1 发布,轻量级 Linux 版本
  12. Java——Set 集合
  13. 从王者荣耀看设计模式(五.组合模式)
  14. python的copy模块是哪个模块_每周一个 Python 模块 | copy
  15. 用linux运行vasp,科学网—VASP使用 - 李继存的博文
  16. IDEA 的下载与安装
  17. X Window 用户指南
  18. LabVIEW编程技巧:手把手教你实现基于状态机的程序框架架构
  19. PyMouse模拟鼠标键盘操作
  20. 平均风向计算中对于风向角的判断

热门文章

  1. 压力单位PSI,PSIG, PSIA的区别
  2. 接地/漏电(原理图)/接零/零线保护
  3. 分布式文件系统 FastDFS 5.0.5 Linux CentOS 7 安装配置
  4. python 调用word打开doc文档报错,“word无法启动转换器mswrd632.wpc”
  5. The remote device or resource won't accept the connect
  6. 实现小蚁云台摄像头向自定义服务器传输视频文件
  7. Excel转PDF 一百行代码超简单
  8. Delphi 2010控件安装
  9. 计算机网络中协议分层的目的是什么意思,网络协议分层的作用是什么
  10. 微信发红包如何设计测试用例