ARM指令经典拆炸弹

本次实验报告详细记录了使用ARM汇编语言解决一个包含7个关卡的拆弹游戏的过程。通过对汇编代码的调试和分析,逐步揭示了每个关卡的解决策略,涉及sscanf函数、数值比较、字符串处理等技巧。实验加深了对ARM指令集、汇编代码执行及高级语言编译原理的理解。
摘要由CSDN通过智能技术生成

计算机系统原理 课程实验报告

实验题目:ARM汇编指令

实验学时:16 实验日期:2019.04.04

实验目的:

① 熟悉ARM汇编指令集,能够阅读与调试汇编代码。
② 学会并理解可执行文件的反编译过程。
③ 进一步认识汇编语言在硬件层面的执行。
④ 对代码的编译执行层面有更深刻的认识。

硬件环境

:实验室PC、笔记本电脑

软件环境

:Linux下的qemu模拟器+树莓派系统,

实验步骤与内容:

1, ## 环境安装与配置

在Linux操作系统下安装Qemu并在模拟器上搭建ARM模拟环境。

2, 反编译可执行文件与gdb调试

我们通过使用objdump –d命令反编译得到.s文件并通过gdb调试一步步探索题目的解决方案。通过阅读反编译得到的.s文件。bomb汇编程序由以下几部分构成,分别是:,<explode_bomb>,<read_line>,<phase_1>,…,<phase_7>,<strings_not_equal>,<read_six_numbers>, 等。这对下面调试破解的进行提供了依据。

3,关卡破解

该实验总计7个关卡,在我们各自具备独立完成前四个实验之后。5,6,7关卡内容通过合力合作分析完成关卡内容理解,最后分工阐释7个关卡的破解机理。分工如下:

分析

下面便按关卡顺序进行阐释

Phase_1

我们在Phase_1处设置断点以观察每条指令执行的过程
在这里插入图片描述
首先我们观察两处炸弹爆炸的地方,
在这里插入图片描述
在第一处cmp命令处,我们比较了r3寄存器中的值与1的大小,同时在前两处的str与ldr命令中,我们将r0处的值给了r3。
往前查看
在这里插入图片描述
在bl命令执行之前 我们打出r0,r1,r2,r3的值
在这里插入图片描述
而在bl执行完成后
在这里插入图片描述
r0的值为1
根据sscanf函数,我们猜测r0,r1中为sscanf的两个参数,最后r0为该函数的返回值。
此处暂且不表,我们继续检查第二个炸弹爆炸处。
在这里插入图片描述
此处将(r11-12)处的值给了r3,并将此值进行比较,
我们将r3的值打印出来,即可发现r3为我们输入的int整数。(输入14
在这里插入图片描述
所以此处应为比较输入的值和188是否相等。
输入188
在这里插入图片描述
炸弹拆除成功,我们验证之前关于sscanf处的猜测,我们此次输入“188 14”两个数,在执行到bl处,依然可以发现,并且炸弹拆除成功
在这里插入图片描述在这里插入图片描述
而输入空字符串则r0返回错误值
在这里插入图片描述在这里插入图片描述

所以在Phase_1中sscanf函数大概为 。在读入后返回
至此我们拆除了第一个炸弹。
其大概为判断读入的int值是否为188.

Phase_2

依然将断点设置在phase_2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值