《深入理解计算机系统》实验二Bomb Lab下载和官方文档机翻

2023-11-01

前言

《深入理解计算机系统》官网:http://csapp.cs.cmu.edu/3e/labs.html
该篇文章是实验二Bomb Lab的Writeup机翻。
原文:http://csapp.cs.cmu.edu/3e/bomblab.pdf
阅读文档能对实验有所帮助。

在官网点击下方即可下载实验二的文件
在这里插入图片描述

1 介绍

邪恶的邪恶博士在我们的班级机器上植入了大量的“二元炸弹”。二元炸弹是一个由一系列阶段组成的程序。每个阶段都希望您在stdin上键入一个特定的字符串。如果您键入了正确的字符串,那么阶段将被解除,炸弹将继续进入下一个阶段。否则,炸弹会通过打印“BOOM!!”来爆炸,然后终止。当每个阶段都被拆除时,炸弹就被拆除了。
我们要处理的炸弹太多了,所以我们给每个学生一枚要拆除的炸弹。你的任务,你别无选择,只能接受,就是在截止日期前拆除炸弹。祝你好运,欢迎来到拆弹小组!

第一步:找到炸弹

你可以通过将浏览器指向:
http:// B o m b l a b : : S E R V E R N A M E : Bomblab::SERVER_NAME: Bomblab::SERVERNAME:Bomblab::REQUESTD_PORT/
这将显示一个二进制炸弹请求表单供您填写。输入您的用户名和电子邮件地址,然后点击提交按钮。服务器将构建你的炸弹,并将它以一个名为bombk.tar的tar文件的形式返回给你的浏览器,其中k是你的炸弹的唯一编号。
将bombk.tar文件保存到您计划执行工作的(受保护)目录中。然后给出命令:tar -xvf bombk.tar。这将创建一个名为./bombk的目录,包含以下文件:
• README:确定炸弹和它的主人
• bomb:可执行的二进制炸弹。
• bomb.c:炸弹主要程序的源文件还有邪恶博士的友好问候。
• writeup.{pdf,ps}:实验室那样。
如果因为某些原因你要求多个炸弹,这不是一个问题。选择一个炸弹,然后删除其余的

第二步:拆除炸弹

你在这个实验室的工作是拆除你的炸弹。
你必须在一台课堂机器上做作业。事实上,有传言说,邪恶博士真的是邪恶的,如果跑到别处,炸弹总是会爆炸。据我们所知,炸弹里还有其他一些防篡改装置。
你可以使用许多工具来拆除炸弹。请参阅提示部分以获得一些提示和想法。最好的方法是使用您最喜欢的调试器来逐步完成反汇编的二进制文件。
每次你的炸弹爆炸都会通知炸弹服务器,你会在实验室的最终得分中损失1/2分(最多20分)。所以引爆炸弹是有后果的。你一定要小心!
前四个阶段各得10分。第5阶段和第6阶段稍微困难一些,所以每个阶段都值得获得15分。所以你的最高分数是70分。
虽然阶段变得越来越难以消除,但随着您从一个阶段移动到另一个阶段,您获得的专业知识应该可以抵消这个困难。 但是,最后阶段即使是最好的学生也会挑战,所以请不要等到最后一刻才开始。
炸弹忽略空白输入行。 例如,如果您使用命令行参数运行炸弹:
linux> ./bomb psol.txt
然后它将从 psol.txt 读取输入行,直到到达 EOF(文件结尾),然后切换到 stdin。 在虚弱的时刻,邪恶博士添加了此功能,因此您不必继续为已经解除的阶段重新键入解决方案。
为避免意外引爆炸弹,您需要学习如何单步执行汇编代码以及如何设置断点。 您还需要学习如何检查寄存器和内存状态。 做实验的一个很好的副作用是你会非常擅长使用调试器。 这是一项至关重要的技能,它将为您的职业生涯的其余部分带来丰厚的回报。

组织工作

这是一个单独的项目。 所有的手都是电子的。 澄清和更正将张贴在课程留言板上。

Handin

没有明确的指示。当你练习时,炸弹会自动通知你的教练你的进度。你可以通过查看班级记分牌来跟踪你的成绩:
http:// B o m b l a b : : S E R V E R N A M E : Bomblab::SERVER_NAME: Bomblab::SERVERNAME:Bomblab::REQUESTD_PORT/scoreboard
这个网页不断更新,以显示每个炸弹的进展。

提示(请阅读!)

有很多方法可以拆除炸弹。您可以在不运行程序的情况下对其进行详细的检查,并确切地了解它的功能。这是一项有用的技术,但并不总是容易做到。您还可以在调试器下运行它,观察它一步一步地做什么,并使用这些信息来消除它。这可能是化解它的最快方法。
我们确实有一个请求,请不要使用暴力!你可以编写一个程序来尝试每一个可能的键来找到正确的键。但这是不好的几个原因

  • 每次你猜错,炸弹就会爆炸,你会损失1/2分(最多20分)。
  • 每次你猜错了,一条消息就会发送到炸弹服务器。您可能会很快使网络充满这些消息,并导致系统管理员取消您的计算机访问权限。
  • 我们没有告诉你字符串有多长,也没有告诉你里面有什么字符。即使您做出了(不正确的)假设,即它们的长度都小于80个字符,并且只包含字母,那么对于每个阶段,您将有2680次猜测。这将需要很长时间运行,你不会在作业到期之前得到答案。

有许多工具被设计来帮助你弄清楚程序是如何工作的,以及当它们不能工作时是什么问题。这里列出了一些工具,你可能会发现有用的分析你的炸弹,并提示如何使用它们。

  • gdb
    GNU调试器,这是一个命令行调试器工具,可以在几乎所有平台上使用。您可以逐行跟踪一个程序,检查内存和寄存器,查看源代码和汇编代码(我们不会为大多数炸弹提供源代码),设置断点,设置内存监视点,并编写脚本。
    CS:APP网站:
    http://csapp.cs.cmu.edu/public/students.html
    有一个非常方便的单页GDB摘要,您可以打印出来并用作参考。下面是一些使用gdb的技巧。
    • 为了避免每次输入错误时炸弹都会爆炸,你需要学习如何设置断点。联机文档,在gdb命令提示符中输入" help “,或在Unix提示符中输入” man gdb “或” info gdb "。有些人还喜欢在emacs中以gdb模式运行gdb。
  • objdump -t
    这会打印出炸弹的符号表。符号表包括炸弹中所有函数和全局变量的名称,炸弹调用的所有函数的名称,以及它们的地址。您可以通过查看函数名了解一些东西!
    尽管objdump -d提供了许多信息,但它并没有告诉您全部情况。对系统级函数的调用以一种神秘的形式显示。例如,对sscanf的调用可能如下所示:
    8048c36: e8 99 fc ff ff call 80488d4 <_init+0x1a0>
    要确定调用是sscanf,需要在gdb中进行反汇编。
  • strings
    这个实用程序将显示炸弹中的可打印字符串。

正在寻找一种特殊的工具?文档怎么样?别忘了,命令和信息是你的朋友。特别是,man ascii可能会有用。info gas将会给你更多关于GNU汇编程序的信息。同时,网络也可能是信息的宝库。如果你被难住了,请向你的导师寻求帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《深入理解计算机系统》实验二Bomb Lab下载和官方文档机翻 的相关文章

  • texlive支持中文的简单方法

    1 确保tex文件的编码方式是UTF 8 2 在文档开始处添加一行命令即可 即 usepackage UTF8 ctex 如下所示 documentclass article usepackage UTF8 ctex begin artic
  • System.getProperty用法

    转自 http blog darkmi com 2011 03 16 1666 html System getProperty 用于获取当前的系统属性 比如java版本 操作系统名称 区域 用户名等 这些属性一般由jvm自动获取 不能手工设
  • 线程和进程的区别(面试必备)

    参考文章 https www jianshu com p 2dc01727be45 线程与进程的区别通俗的解释 https www jianshu com p 8ad441510860 附加可参考文章 https baijiahao bai
  • VMware-Ubuntu安装bochs

    我的运行环境是VMware的Ubuntu 首先大家可以按照CSDN上的教程按照符合自己需求的虚拟机 我在上午还在VMware和virtualBox之间做选择 但是由于已经安装过了VMware 所以我就直接用了VMware 当然了 一千人眼中
  • mapengpeng1999@163.com 操作系统4~处理机调度

    处理机调度 1 三级调度体系 1 处理机调度主要是对处理机运行时间进行分配 即 按照一定算法或策略 将处理机运行时间分配给各个并发进程 同时尽量提高处理机的使用效率 2 现代操作系统中 按调度所实现的功能分3种类型 高级调度 中级调度和低级
  • 操作系统学习(九)进程通信

    一 知识总览 二 定义 进程通信是指进程之间的信息交换 每个进程都拥有自己的内存空间 是相互独立的 这样在每个进程执行时 才不会被其他进程所干扰 三 进程通信的方式 1 共享存储 1 两个进程对共享区的访问必须是互斥的 即在同一时间内 只允
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • Client-Server问题

    1 实验内容与要求 需要创建客户Client和服务器Server两个进程 它们通过管道进行通信 Client进程派生3个生产者线程 一个管道线程 共享一个20个slots的缓冲区 每个生产者线程随机产生一个数据 打印出来自己的id 进程 线
  • Linux使用nvida-smi查看GPU类型

    nvida smi提供一个查看GPU信息的方法 然而这种方式不能查看GPU型号 型号被省略成了GeForce RTX 208 如果我们需要查看GPU的型号 只需要运行nvidia smi L即可 mrfive ubuntu nvidia s
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • nslookup命令详解

    nslookup命令用于查询DNS的记录 查看域名解析是否正常 在网络故障的时候用来诊断网络问题 nslookup的用法相对来说还是蛮简单的 主要是下面的几个用法 1 直接查询 这个可能大家用到最多 查询一个域名的A记录 nslookup
  • Linux系统编程:多线程交替打印ABC

    引言 分享关于线程的一道测试题 因为网上基本都是Java的解决方法 决定自己写一篇来记录一下线程的学习 问题描述 编写一个至少具有三个线程的程序 称之为线程 A B 和 C 其中线程 A 输出字符 A 线程 B 输出字符 B 线程 C 输出
  • InfoQ视频直播分享报名:前贝尔实验室、Oracle架构师为你在线揭秘分布式平台内核...

    报名方式 关注InfoQ微信公众号 ID infoqchina 回复 InfoQ 即可观看在线直播技术分享 分享地点 u0026amp 时间 InfoQ直播微课堂将在熊猫 TV 网站播出 看腻了卖肉的女主播 来看看QCon 的明星讲师如何
  • LWIP在STM32上的移植

    本文做记录摘抄 加上自己的体会 文章标题 STM32使用LWIP实现DHCP客户端 http www cnblogs com dengxiaojun p 4379545 html 该文章介绍了几点 LWIP源码的内容 关键点 1 inclu
  • Linux alien命令

    一 简介 alien是一个用于在各种不同的Linux包格式相互转换的工具 其最常见的用法是将 rpm转换成 deb 或者反过来 二 安装 http toutiao com a6188997768449360129 三 实例 http www
  • 通过源码包*.src.rpm定制开发rpm

    为什么80 的码农都做不了架构师 gt gt gt 1 基本流程 1 下载 安装相应的src rpm包 wget xxx src rpm rpm ivh xxx src rpm 这里的 安装 是指把xxx src rpm中的tar gz p
  • [架构之路-185]-《软考-系统分析师》-3-操作系统基本原理 - 文件索引表

    目录 一 文件的索引块 二 索引分配表 三 索引表的链接方案 四 多层索引 五 混合索引分配 一 文件的索引块 存放在目录中的文件 并非是文件的真实内容 目录中记录了文件的索引块是几号磁盘块 文件对应的索引表是存放在指定的磁盘块中的 二 索
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • 磁盘调度算法笔记和练习题

    磁盘调度算法 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 练习题 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 它是一次只响应一个方向上的请求 这个方向上的请求都响应完了 再掉头处理另一个方向上的 有点
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮

随机推荐

  • 【EI会议】2022年国际土木与海洋工程联合会议(JCCME 2022)

    2022年国际土木与海洋工程联合会议 JCCME 2022 重要信息 会议网址 www jccme org 会议邮箱 jccme iased org 会议时间 2022年10月21 23日 召开地点 中国 上海 截稿时间 2022年9月15
  • 动态网站开发学习笔记01:网页开发基础

    目录 一 HTML基础 一 HTML简介 1 HTML 2 HTML语言的基本格式 3 声明 4 html标签 5 head标签 6 body标签 7 编写第一个网页 8 关于编写HTML文件的工具 9 HTML标签概述 1 单标签 2 双
  • 微信小程序实现原生导航栏和自定义头部导航栏

    原生导航栏 可以在 app json 的 window 属性中或页面的 JSON 文件中设置 navigationBarTitleText 导航栏标题内容 navigationBarTextStyle 导航栏标题颜色 navigationB
  • AD修改铜皮的透明度

    AD软件有时候铺完铜皮后 无法知道焊盘的位置 这样在打孔时候 可能会打到焊盘上 这时后可以通过修改铜皮的透明度来解决这个问题 方法 1 快捷键L 找到Transparency 然后选择Polygons 拖动进度条 修改透明比例 完成效果如下
  • PCIe热插拔:通知试热插拔&暴力热插拔

    PCIE热插拔 某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行 为此 PCIe总线采用热插拔 Hot Plug 和热切换 Hot Swap 技术 来实现不关闭系统电源的情况下更换PCIe卡设备 热切换和热插拔的主要区别是
  • TortoiseGit和Git如何使用相同的密钥

    Git密钥配置 TortoiseGit密钥配置 TortoiseGit和Git密钥配置图文教程 TortoiseGit和Git如何使用相同的密钥 使用 TortoiseGit 的 PuTTYgen 生成的私钥和使用Git的 ssh keyg
  • GVIM配置文件

    给大家分享一下我的vim的配置文件 关闭兼容模式 set nocompatible 模仿快捷键 如Ctrl A全选 Ctrl C复制等 source VIMRUNTIME vimrc example vim source VIMRUNTIM
  • 【c++】指针

    目录 1 1指针的基本概念 1 2指针变量的定义和使用 1 3指针所占内存空间 1 4空指针和野指针 1 5const修饰指针 1 6指针和数组 1 7指针和函数 1 8指针 数组 函数 1 1指针的基本概念 作用 可以通过指针间接访问内存
  • 使用Selenium和Python自动预订车票

    在本文中 我们将探讨如何使用Selenium和Python自动预订车票 我们将以12306 cn网站为例 演示自动化预订车票的过程 通过阅读本文 您将更好地了解如何使用Selenium与网页进行交互 准备工作 首先 我们需要安装Seleni
  • 信息学奥赛一本通(C++版)

    信息学奥赛一本通 C 版 总目录 1 信息学奥赛一本通 C 版 刷题 记录 2 信息学奥赛一本通 C 版 第一部分 C 语言 第一章 C 语言入门 3 信息学奥赛一本通 C 版 第一部分 C 语言 第二章 顺序结构程序设计 4 信息学奥赛一
  • sqlmap -u -r参数的使用

    SQLMAP基本使用实例 u参数 直接输入目标URL 命令实例 sqlmap u http 127 0 0 1 sql Less 1 id 1 验证过程 判断可注入的参数 判断可以用哪种SQL注入技术来注入 识别出所有存在的注入类型 尝试去
  • hbase compaction

    minor compaction 删除TTL过期数据 major compaction 被删除的数据 打了Delete标记的数据 TTL过期数据 版本号超过设定版本号的数据 Minor Compaction 指选取一些小的 相邻的HFile
  • 20个解决日常问题的Python代码片段

    在本文中 将分享20 个 Python 代码片段 以帮助你应对日常编程挑战 你可能已经知道其中一些片段 但有些其他片段对你来说可能是新的 赶紧使用这些有用的 Python 代码片段提升你的编程技能吧 1 简单的 HTTP Web 服务器 简
  • CSS 布局(一)

    到目前为止 我们已经了解了CSS基础知识 如何设置文本样式 以及如何设置和操作内容所在的框 现在是时候看看如何根据视口以及彼此之间的关系正确地安排你的盒子了 我们已经介绍了必要的先决条件 所以让我们深入了解CSS布局 查看各种功能 不同的显
  • 接上一篇 对多个模型环形旋转进行优化 指定旋转位置

    using System Collections using System Collections Generic using UnityEngine using DG Tweening public class ModelAnimal M
  • Vue全局日期格式化(过滤器式)

    设置 main js文件下 全局日期时间过滤器 Vue filter dateFormat function v let date new Date v if Number isNaN Number date date new Date l
  • 问答专场

    作为一名产品经理 或许你刚刚进入某个领域 或许你在为管理头疼 或许你在为创业辗转 或许你还不知如何拥抱移动互联网 那么 我们来聊聊吧 本期PMCAFF 问答专场 邀请到阿里巴巴无线创始人 费杰 擅长领域 创业 管理 电商 供应链 移动互联网
  • javascript--BOM(browser object model)五大对象

    浏览器对象模型 作用 访问 控制 修改浏览器 与浏览器进行交互 打开新的窗口 回退历史记录 获取url BOM与的DOM区别 JS通过BOM与浏览器进行交互 BOM的window对象包含了document对象 document对象是DOM的
  • JavaScript教程-空值合并运算符 ‘??‘优先级,循环,while,for,for...of..,for..in,do...while循环,跳出循环,break,continue

    空值合并运算符 最近新增的特性 这是一个最近添加到 JavaScript 的特性 旧式浏览器可能需要 polyfills 空值合并运算符 nullish coalescing operator 的写法为两个问号 由于它对待 null 和 u
  • 《深入理解计算机系统》实验二Bomb Lab下载和官方文档机翻

    前言 深入理解计算机系统 官网 http csapp cs cmu edu 3e labs html 该篇文章是实验二Bomb Lab的Writeup机翻 原文 http csapp cs cmu edu 3e bomblab pdf 阅读