计算机系统基础课程实验课bomb--phase_4

首先还是栈指针减24,应该也是为了存储多个值
然后和phase_3一样,把输入的值放在了%rcx和%rdx
输入格式也和phase_3一样,如图在这里插入图片描述
然后将返回值与2作比较,如果不等于2就爆炸,所以只能输入两个数字
在这里插入图片描述
然后将第一个输入值d1与14作比较,如果d1<=14就跳转,否则就爆炸

在这里插入图片描述
在这里插入图片描述
跳转之后把14放入%edx,0放入%esi,d1放入%edi,并调用函数func4

现在跳到func4继续看反汇编代码

首先栈指针减8,把14放入%eax,并自减0,然后%ecx被放入14,%ecx继续逻辑右移31位,接着%eax+=%ecx再另%eax>>=1,最后ecx = rsi + rax = esi + ( ( edx -esi ) >> 31 + ( edx - esi ) ) / 2, 将%ecx与%rdi比较,如果%rdi<%ecx,就让%edx = %rcx-1,然后回到函数开头形成递归,否则另%eax返回值为0,但还会继续判断%edi和%ecx的大小,如果%ecx>=%edi才能真正返回0,否则还是要回到开头递归,结合上面%ecx<=%rdi,说明%ecx要等于%rdi才能退出返回0完成关卡

在这里插入图片描述随后回到phase_4,比较0和返回值,不等于0的话就爆炸,说明返回值为0,所以回到func4,经过第一次计算,%ecx的值可以得到是7,然后是否要继续递归还要取决于d1的值,如果%rdi=7,func4就返回0,成功过关,但如果继续递归,如果%rdi小于7,%edx就等于6,%rcx就等于3,如果%rdi等于3一样可以过关,推理下去,%rdi还可以等于1和0
所以答案就为

7 03 01 00 0

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值