CSAPP深入理解操作系统 课程实验 bomb 反向编译 汇编(3)

本文介绍了CSAPP课程实验中关于bomb的第四关和第五关的解析,涉及栈操作、汇编代码分析以及递归函数func4的详细解读。在第四关,通过分析汇编代码,确定了输入参数的范围和递归调用的条件,得出通关密码。第五关中,通过解析数组操作和循环,找出了输入数字的特殊条件,最终得出通关组合。实验过程考验了读者对操作系统、汇编和调试工具的理解与应用能力。
摘要由CSDN通过智能技术生成

第四关:

 首先也是栈开辟:


然后由第三关以及前面对sscanf函数的分析可知,这里应该也是要输入两个数。参数1从-0xc(%ebp)加载,参数2从-0x10(%ebp)处加载。0x804a23e应该里面的内容也是sscanf的输入格式之类的。返回值要等于2,不然会引爆炸弹。




接一下来一段说明输入的第一个参数的范围要在0-14之间


接下来,赋初始值0和14,以及之前输入的参数1这三个数作为参数传给函数func4,调用func4的返回值必须为1。通过esp的偏移看出出栈顺序,也就是传递参数的顺序,第一个参数是参数1设为x,第二个参数是0,第三个参数是14.func(x,0,14)。看到-0x10(%ebp)中是我们输入的第二个数,根据je的判断条件可知,第二个数要为1。


可以看出第四关的关键点就是func4函数,接下来就是分析一下func4这个函数的汇编代码:

首先也是栈开辟:


然后是将传入的参数存到相应的寄存器,按照存入存入的顺序。


接下来就是对传入的参数进行处理:


设ecx寄存器中存储的是k,esi寄存器存储的是t,则按照汇编语句顺序对应操作是,k=z,k=k-y,t=k,t=t>>31,k=t+k;k=k/2;k=k+y;合并在一起就是:k=(z-y)/2+y


通过上面的汇编代码可以看到,经过操作后的k要和x进行比较,根据比较的结果不同分为三种情况,首先当k-x>0即k>X时


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值