还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程名称计算机系统原理实验实验课时32课时实验项目名称BombLab二进制炸弹实验材料可执行文件bomb、源代码bomb.c、说明README实验环境Linux操作系统(安装虚拟机和Ubuntu实验工具调试工具gdb实验内容程序运行中有6道关卡(phases),每道关卡需要用户在终端上输入特定的字符串输入正确则炸弹解除,错误则炸弹引爆实验方法
1.将程序反汇编成汇编语言
2.结合C语言文件找到每个关卡的入口函数
3.然后分析汇编代码,找到每个phase中引导程序跳转到explode_bomb程序的地方
4.分析其成功跳转的条件——以此为突破口寻找应该输入的字符串!【实验分析】预先准备首先查看整个bomb.c的代码,发现整个炸弹组是由6个小炸弹(函数)组成的整个main函数比较简单,函数间变量几乎没有影响因此,只需要依次解除6个小炸弹即可实验材料只有一个可执行文件,先把他用objdump-d反汇编得到汇编文件打开文件发现对应6个phase,对应的汇编文件十分长,因此我们直接步入phase部分
1、phase_
11.利用gdb调试,gdbbomb
2.disassemblephaes_1经分析,答案极有可能存放在0x804a15c处
3.可看汇编代码如上图所示,以下为栈帧的计算过程
4.我们看到如上图所示,调用了一个strings_not_equal函数,根据名字判断是判断两个字符串是否相等我们找到这个函数来验证我们的猜想是否正确
5.在gdb下调试,设立断点,并检验
2、phase_
21.disassemblephase_2可看到phase_2的汇编代码以及理解,利用一个循环,不断计算出这个六位密码
2.栈帧的计算步骤a
[0]=0a
[1]=1a
[2]=a
[0]+a
[1]=1a
[3]=a
[2]+a
[1]=2a
[4]=3a
[5]=5即答案猜想为 011235,下面进行检验
3.gdb下进行调试检验总结通过这次『拆弹』的历练,我对数据在内存中以及汇编的表示方法有了更加深刻的认识,做得过程可能有时候会摸不着头脑,这个时候告诉自己冷静,相信自己
3、phase_
36...。