LAB3实验报告 - 图文

2020-03-27 05:04

课程实验报告

课 程 名 称: 计算机组成与原理 实验项目名称: 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文件,出现了大量汇编代码。

第一关

找到第一关的代码,如下:

首先看从哪里会调用爆炸的函数,显然,我们知道这个函数就是调用爆炸函数,test êx,êx与je 8048f83 表示,当êx=0的时候,调用,也就是不调用炸弹爆炸的函数,所以在调用函数的时候,必须返回êx为0,而这个函数的作用就是判断字符串是否相等。在往上看,可以看到movl $0x804a15c,0x4(%esp),0x804a15c内存地址里面的内容就是我们所需要的字符串。这时候,输入gdb bomb,进入gdb调试,然后输入x/s 0x804a15c查看内存值(其中s指的是以字符串的形式查看内存的值,当你上一次已经x/s了,下一次就可以直接x+空格+内存地址,这样也是以字符串的形式输出,可能是gdb默认保存上一次的输出格式,所以下次执行输出默认的是上一次输出的格式),可以看到该内存地址的值是:We have to stand with our North Korean allies.

然后直接输入r运行程序,然后输入字符串。得到如下结果:

至此,第一关已成功通过。

第二关

汇编代码如下:

从jne 8048d90 看出,执行这行会跳转到调用爆炸函数,所以必须第一个数为0,(从cmpl $0x0,-0x20(?p)可以看出);同理,jne 8048d90 与cmpl $0x1,-0x1c(?p)必须让第二个数为1,然后mov -0x4(?x),êx与add -0x8(?x),êx,cmp êx,(?x)与je 8048daa 这些代码可知,下一个数必须是前两个数之和,然后跳转到输入下一个数,直到6个数输入完毕。总体上看,这一关让我们输入的是以0为首项的Fibonacc数列,然后在第一关的基础上,直接输入0 1 1 2 3 5这6个数字,然后看结果。 结果如下:

所以,第二关也顺利通关。

第三关 汇编代码:

Movl $0x804a23e,0x4(%esp),用gdb查看0x804a23e 的值


LAB3实验报告 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:计算机网络期末复习题(含答案)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: