拆弹实验-phase_4
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相关推荐
- 计算机系统基础实验:二进制拆弹实验
一.实验目的: 学习并熟练使用 gdb 调试器和 objdump 理解汇编语言代码的行为或作用 提高阅读和理解汇编代码的能力 二.实验要求 实验共包括七个阶段,每个阶段考察机器级语言程序的不同方面,难 ...
- 二进制拆弹实验详解_Population Count算法-求二进制数中1的个数
所谓Population Count算法,即是指计算一个二进制数中1的个数的算法.具体来说,就是任意给定一个无符号整数N,求N的二进制表示中1的个数,比如N = 5(0101)时,返回2:N = 15 ...
- 二进制拆弹实验详解linux,拆解二进制炸弹
拆解二进制炸弹 一.实验目的 1.理解C语言程序的机器级表示. 2.初步掌握GDB调试器的用法. 3.阅读C编译器生成的x86-64机器代码,理解不同控制结构生成的基本指令模式,过程的实现. 二. 实 ...
- 计算机系统ARM64拆除炸弹
一.内容简介 1.1 拆弹实验 拆弹实验是csapp课程的一个经典实验,实验共有六关(phase_1 ... phase_6),还有一个隐藏关卡(secret_phase).该实验与x86架构下的拆弹 ...
- 记ICS的lab2--bomb实验
(我真的是瞎tm投机取巧解开的bomb,我并不能保证帮上你什么忙,兄弟!) 实验总结: 首先这个实验真的是花了很多很多的时间了,逻辑硬伤,解得很慢.如果不是等到全部解完已经过去一周之后才写报告,我想我 ...
- 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 ...
- 国外计算机课程lab,计算机系统实验之bomblab
今天刚刚验收CSAPP实验3,趁着余温,记录一下这个实验,顺便回顾下CSAPP课程的相关知识. 实验目的 1.使用gdb工具反汇编出汇编代码,结合c语言文件找到每个关卡的入口函数.然后分析汇编代码,分 ...
- CSAPP_实验二 拆炸弹 汇编知识应用
CSAPP--实验二 拆炸弹 Phase1 disas phase_1, 反汇编 phase_1 函数 在 phase_1函数入口处 设置断点 break phase_1 run 开始运行,输入字符串 ...
- CSAPP实验二:二进制炸弹(Bomb Lab)
本系列文章为中国科学技术大学计算机专业学科基础课<计算机系统>布置的实验,上课所用教材和内容为黑书CSAPP,当时花费很大精力和弯路,现来总结下各个实验,本文章为第二个实验--二进制炸弹( ...
- [逆向工程] 二进制拆弹Binary Bombs 快乐拆弹 详解
二进制拆弹 binary bombs 教你最快速解题,成功拆弹 最近计算机基础课,的实验lab2,二进制拆弹,可以说是拆的我很快乐了(sub n, %hair) 此处头发减n 我刚开始做的时候很是懵逼 ...
最新文章
- c语言如何判断数组不为空,PHP 判断数组是否为空的几种方法
- DBGRIDEH 组件在Borland开发工具中应用全攻略
- 【绝对干货】北京三年java开发多少工资
- python如何强制转换数据类型_python数据类型强制转换实例详解
- 某聊天工具消息记录数据库文件解密逆向分析
- MySQL 调用存储过程
- Java8 Striped64 和 LongAdder
- python安装哪个版本好啊_windows10安装哪个版本的Python?
- 搜索引擎关键字智能提示的一种实现
- 用了Redis里面的map和set
- Porteus 2.0 RC1 发布,轻量级 Linux 版本
- Java——Set 集合
- 从王者荣耀看设计模式(五.组合模式)
- python的copy模块是哪个模块_每周一个 Python 模块 | copy
- 用linux运行vasp,科学网—VASP使用 - 李继存的博文
- IDEA 的下载与安装
- X Window 用户指南
- LabVIEW编程技巧:手把手教你实现基于状态机的程序框架架构
- PyMouse模拟鼠标键盘操作
- 平均风向计算中对于风向角的判断
热门文章
- 压力单位PSI,PSIG, PSIA的区别
- 接地/漏电(原理图)/接零/零线保护
- 分布式文件系统 FastDFS 5.0.5 Linux CentOS 7 安装配置
- python 调用word打开doc文档报错,“word无法启动转换器mswrd632.wpc”
- The remote device or resource won't accept the connect
- 实现小蚁云台摄像头向自定义服务器传输视频文件
- Excel转PDF 一百行代码超简单
- Delphi 2010控件安装
- 计算机网络中协议分层的目的是什么意思,网络协议分层的作用是什么
- 微信发红包如何设计测试用例