拆弹实验-phase_4

phase_4:递归调用和栈

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

00001623 <phase_4>:
    1623:	55                   	push   %ebp
    1624:	89 e5                	mov    %esp,%ebp
    1626:	53                   	push   %ebx
    1627:	83 ec 14             	sub    $0x14,%esp
    162a:	e8 e1 fb ff ff       	call   1210 <__x86.get_pc_thunk.bx>
    162f:	81 c3 d1 39 00 00    	add    $0x39d1,%ebx
    1635:	8d 45 f0             	lea    -0x10(%ebp),%eax  #这里应该是输入的第二个参数位置
    1638:	50                   	push   %eax
    1639:	8d 45 f4             	lea    -0xc(%ebp),%eax	 #这里应该是输入的第二个参数位置
    163c:	50                   	push   %eax
    163d:	8d 83 ad e3 ff ff    	lea    -0x1c53(%ebx),%eax
    1643:	50                   	push   %eax
    1644:	ff 75 08             	pushl  0x8(%ebp)
    1647:	e8 d4 fa ff ff       	call   1120 <__isoc99_sscanf@plt>
    164c:	83 c4 10             	add    $0x10,%esp
    164f:	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,%esp
    1662:	6a 0e                	push   $0xe
    1664:	6a 00                	push   $0x0
    1666:	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),%ebx
    1684:	c9                   	leave  
    1685:	c3                   	ret    

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值