课程实验报告
课 程 名 称: 计算机组成与原理 实验项目名称: LAB3 专 业 班 级: 智能2班 姓 名: 曾标扬 学 号: 201308070218 指 导 教 师: 赵欢
完 成 时 间: 2015 年 5 月 9 日
计算机科学与工程系
【实验目的】
理解汇编语言,学会使用调试器。
【实验原理】
二进制炸弹是作为一个目标代码文件提供给学生们的程序,运行时,它提示用户输入6个不同的字符串。如果其中任何一个不正确,炸弹就会“爆炸”:打印出一条错误信息。学生通过反汇编和逆向工程来确定是哪六个字符串,从而解除他们各自炸弹的雷管。
【实验过程】
一、准备过程
1.先把LAB3文件拷贝到VMware中的ubuntu系统里,然后解压获得3文件,分别为bomb、 bomb.c和README-bomblab.txt以及实现基本内容与要求.txt,首先查看实现基本内容与要求与README-bomblab.txt,大致理解意思后,打开.c文件,进去后发现代码不完整,(由于自己C语言能力不强,所以直接把文件拷贝到windows里,用VS2012编译一下,发现很多错误,从而确认代码不完整),从主观上来想,如果代码完整了,那么还需要给其他文件吗?所以,这个.c文件必定是一个不完整的文件,只能用来作为参考。
2.既然不能够直接从.c文件看出问题,那么就需要从bomb程序里找,如何找?貌似也就只能选择反编译了,然后再通过反编译的代码与给出来的.c源代码相结合,来进行拆炸弹。注:反汇编命令是objdump –d XXX 二、开始实验
1.用ctrl+alt+t打开终端命令,由于三个文件的位置在桌面/LAB3,所以需要cd Dsktop/LAB3/来进入到相应的目录
2.然后用反编译命令objdump -d bomb > out.txt对bomb进行反编译,编译出来的文件存到新建的文件out.txt
3.打开out.txt文件,出现了大量汇编代码。
第一关
找到第一关
首先看从哪里会调用爆炸的函数,显然,我们知道
然后直接输入r运行程序,然后输入字符串。得到如下结果:
至此,第一关已成功通过。
第二关
从jne 8048d90
所以,第二关也顺利通关。
第三关 汇编代码:
Movl $0x804a23e,0x4(%esp),用gdb查看0x804a23e 的值