csapp bomb lab phase_1

一.首先先阅读CSAPP官网上的两份文件(gdb使用说明与handout)

准备工作:切换terminal到bomb的文件夹下,

可以通过ls指令查看文件

关键就在于可执行文件bomb(绿色的那个)

二.对于phase_1拆炸弹:

1.打开关键道具 gdb (GNU DeBuger)对可执行文件逐步分析

2.(可以先用objdump -t)查看该文件的汇编代码,不过阅读过两份官方文件应该明白,此问题在于

输入六次密码,密码都正确就算解除炸弹。

3.直接进入正题:

(1)打开gdb

(2)在gdb下打开bomb可执行文件 输入 

file bomb

(3)查看phase_1部分的汇编代码(disas phase_1)

(4)分析:

    在第一个阶段的函数中,最令人关注的是<explode_bomb>这个函数的调用,而调用的条件,正是test %eax,%eax。而这个指令就是简单的与指令(可百度),当且仅当%eax的值为0时,才可以避免炸弹的爆炸。所以%eax在上一个函数(判断字符串是否相等)确定的值很关键,而%eax本身就是存放函数return值的寄存器。所以关注点重心在”字符串是否相等函数”上。

    先不必打开函数体去思考,我们先考虑函数的接口,函数的实参放在%rdi和%rsi里面,这一点是可以确定的,而此函数又势必要用到参数,所以我们只需要弄清楚传入该函数的参数即可-->%rdi与%rsi

(5)操作

先设置一个断点,我们再运行此程序,不然程序在你输入后就直接爆炸了。

(b 的意思就是 breakpoint的缩写,phase_1是第一阶段密码函数的名字)

然后就可以run了

现在程序正好停在phase_1的开头这里,我们可以看一下函数体的代码,然后再做决定

发现上面有一个箭头,这个箭头表明下一步要执行的程序,我们逐步执行,使用的指令是

stepi

再执行一步

此时我们可以看一下%edi与%esi的值了

显然存放的是地址信息,我们猜测字符串存放在这两个地址里面,检查一下

确实如此,由此我们可知第一个phase的正确字符串了。上面两条指令

x/s的意思是 exam string 详细的说明在官方文件里有说明。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值