CSAPP实验二:BoomLab

本文详述了BoomLab实验的各个阶段,包括phase_1至phase_4的解决过程。通过反汇编代码分析,作者揭示了每个阶段的输入要求和逻辑,如phase_1的答案是特定字符串,phase_2需要输入2的等比数列,phase_3和phase_4则涉及特定数值的比较和计算。
摘要由CSDN通过智能技术生成

BoomLab

首先查看boom.c代码可知总共有6个phase

在这里插入图片描述

进入gdb调试:gdb bomb

在这里插入图片描述

phase_1

查看phase1反汇编代码: disas phase_1

在这里插入图片描述

<+0>:准备栈帧

<+4>:将地址存入%esi

<+9>:调用了一个<strings_not_equal>的指令,盲猜是对比刚刚输入字符和标准答案,所以查看一下0x402400里装的是啥:

在这里插入图片描述

这就是phase_1的标准答案了

Border relations with Canada have never been better.

phase_2

在这里插入图片描述

看到有一个read_six_numbers,顾名思义了,输入六个数字,disas看看:

在这里插入图片描述

这段程序作用就是将6个数字传入栈中。好的,六个整型数字。

回到主程序:

<+2>:40个字节的缓冲区

<+9>:读6个数字

<+14>:将第一个数字和1比较,<+18>相同跳转至<+52>,<+20>否则boom,因此第一个数是1

<+52>:int* rbx=rsp+1

<+57>:int* rbp=rsp+6

<+62>-<+27>-<+30>-<+32>:将第二个数和前一个数2比较,相同跳转至<+41>,否则boom<+36>。看到这里,又可以大胆猜测第二个答案是2的等比数列,尝试输入发现成功!

1 2 4 8 16 32 64
在这里插入图片描述

但是为了从反汇编代码上验证这个过程,还是继续下去

<+41>:rbx += 1,即取下一个数

<+45>:比较%rbx和%rbp【rsp+6】,<+48>不等的话跳转至<+27>,否则跳转至<+64>(64之后已经没有别的数值操作了,也就是程序出口ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天亮又要起床Fiiii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值