实验目的:
通过二进制炸弹实验,熟悉汇编语言,反汇编工具objdump以及gdb调试工具。
实验内容:
1、炸弹实验第5关。
2、炸弹实验第6关。
实验过程:
第五关:
1、根据前几关的经验,进入bomb文件的gdb调试命令下,直接查看第五关的汇编代码。
2、直接回车可以显示余下的phase_5函数的代码,浏览完一遍phase_5函数的汇编代码后,并不能直接发现此代码的精髓所在,因此,我开始逐条分析phase_5函数的代码。
首先是栈帧准备,开辟32字节的空间:
接着加载%ebp-0x10处的有效地址间接存储到%esp+0xc处,也就是参数2存放的地方,同理,加载%ebp-0xc处的有效地址间接存储到%esp+0x8处,也就是参数1存放的地方。
接着看见了一串似曾相似的代码,老规矩,查看此地址处存放的数据,发现我们仍是输入两个整数。
接着把%ebp+0x8处存储的值传送给%esp,然后调用__isoc99_sscanf@plt函数。
3、往下接着看,比较了%eax和1的大小,若%eax大于1,则跳转到<phase_5+51>处,否则,调用爆炸函数,引起爆炸,由此处可得,输入的参数个数必须大于1个。
4、接着把参数1传给%eax,并对%eax与0xf作按位与运算,也就是取出参数1的低四位。
5、