2024Spring> HNU-计算机系统-实验3-Bomblab-导引/答疑

2024-04-16 23:12

本文主要是介绍2024Spring> HNU-计算机系统-实验3-Bomblab-导引/答疑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

BombLab一定要花时间完成哦,对于期末卷面的提升和计算机系统的理解都非常重要。

导引

①文件目录概览

助教下发一个文件包,打开之后是这样的几个文件。

这几个文件解释如下

  • bomb:可执行文件,无法打开,我们主要研究的对象
  • bomb.c文件
  • bomb-quiet:暂时不需要关注
  • README文件
②反汇编

对bomb进行反汇编:在终端中输入以下指令

objdump -d bomb >m.txt

这一步是使用objdump对bomb可执行文件反汇编,并保存在txt文件中。

在这一步之后,文件夹中打开m.txt即可查看汇编代码。

③实验流程-概览

bomb可执行文件会读取你的输入,并与它的内部存储进行匹配。

该可执行文件内部有多段,如果你的输入能够匹配的话,程序就可以继续执行。直到这多段全部完成。这就是最终的成功。否则,如果中间任意一步出现问题,就会爆炸(即结束程序,终端输出bomb)。如下,我输入错误答案1使之引爆。

▲bomb可执行文件大致的执行逻辑可以在bomb.c中看到(bomb.c就是删去了各部分验证函数之后的主函数)

以phase_4为例,bomb读取你的输入,并与内部进行比对,如果正确就继续,否则调用bomb表示该步骤破译失败。

最终在你成功破译所有问题之后,效果大概是这样:

 ④实验流程-破译

以较为简单的phase_1为例:

汇编代码中,有一段这里调用了explode_bomb,而这是导致程序终止执行的原因,想办法让这句汇编代码不被执行。当然比较容易想到的是跟跳转结合起来,不跳转到这里或者跳转到别的地方即可。再注意到这里的<string_not_equal>似乎是某个字符串比较,可以想到bomb从我这里读入的密码是不是与字符串有关,从而继续研究下去……

⑤实验流程-验证

使用./bomb开始执行炸弹文件,然后逐个输入每题的密码,可以看到是否正确的反馈。

如这里反馈“phase 1 defused” 表示第一个通过了。

逐个这样验证下去直到最终结果。

▲如果出现permission denied的情况,使用chmod 777 bomb,改变可执行文件的权限即可。

⑥实验技巧-逐步调试 

使用gdb进行逐步调试,可以提升效率(有时想看如何跳转,有时不想重新开始)

下面开始逐步调试:

gdb -q bomb

若没有gdb,就安装gdb

成功安装后就可以逐步调试

gdb调试是基础,这里不再赘述。

⑦实验技巧-保存答案与快速验证

我不想每次都使用./bomb然后逐个输入答案,这样太烦了。

有没有什么办法能够快速验证我前几步是否正确?

可以将答案写在ans.txt中,一行写一道题目的答案即可。

然后使用./bomb ans.txt来运行,bomb会逐个读入文件中的每一行作为每一题的答案。

★期望

希望你能:

  • (重要)独立完成该实验
  • 熟练掌握汇编代码的阅读能力
  • 总结归纳对于阅读汇编的小技巧,小心得
  • 从该实验中收获乐趣

这篇关于2024Spring> HNU-计算机系统-实验3-Bomblab-导引/答疑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910165

相关文章

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

【2025】基于Python的空气质量综合分析系统的设计与实现(源码+文档+调试+答疑)

博主介绍:     ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。 技术范围:     我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自

HCIA--实验十:路由的递归特性

递归路由的理解 一、实验内容 1.需求/要求: 使用4台路由器,在AR1和AR4上分别配置一个LOOPBACK接口,根据路由的递归特性,写一系列的静态路由实现让1.1.1.1和4.4.4.4的双向通信。 二、实验过程 1.拓扑图: 2.步骤: (下列命令行可以直接复制在ensp) 1.如拓扑图所示,配置各路由器的基本信息: 各接口的ip地址及子网掩码,给AR1和AR4分别配置

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

[dp]答疑

题目描述 在一个数轴上,有 n n n 个同学等待老师的答疑。老师最先站在 k k k 号同学的位置。老师需要解决所有同学的问题,解决一个问题都只需要 0 0 0 秒。学生很没有耐心,每等一秒钟就会增加 w i w_i wi​ 的不开心值。老师以 1 m / s 1m/s 1m/s 的速度开始行动,他想知道解决完所有同学的问题最少需要多少的不开心值。 输入格式 第一行输入两个整数

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System