本文主要是介绍CSAPP深入理解操作系统 课程实验 bomb 反向编译 汇编(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第四关:
首先也是栈开辟:
然后由第三关以及前面对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时
这篇关于CSAPP深入理解操作系统 课程实验 bomb 反向编译 汇编(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!