CSAPP实验——DataLab】的更多相关文章

任务:按照要求补充13个函数,会限制你能使用的操作及数量 bitXor(x,y) 只使用 ~ 和 & 实现 ^ tmin() 返回最小补码 isTmax(x) 判断是否是补码最大值 allOddBits(x) 判断补码所有奇数位是否都是1 negate(x) 不使用负号 - 实现 -x isAsciiDigit(x) 判断 x 是否是 ASCII 码 conditional(x, y, z) 类似于 C 语言中的 x?y:z isLessOrEqual(x,y) x<=y logicalNe…
CSAPP:datalab实验记录 bitXor /* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal ops: ~ & * Max ops: 14 * Rating: 1 */ 这道题的意思就是限定符号实现异或.我们很容易就知道: \[a \oplus b = \overline a b + a \overline b \] 再化简以下(逻辑代数的知识): \[\overline a b + a…
写在前面 之前考研的时候csapp的书有刷过5,6遍,所以对书本知识还算比较了解.恰逢最近在学c++的时候,顺带刷一下大名鼎鼎的csapp实验. 0. 环境准备 最好准备一个纯净的Linux系统这里建议使用docker 构建一个centos或者 ubuntu系统 实验资料的下载 ​CS:APP3e, Bryant and O'Hallaron docker上的环境搭建请参考下面的文章 CSAPP:Lab0-搭载环境 拉取centos系统 docker pull centos 建立目录挂载实现文件…
前言 本篇博客将会剖析 CSAPP - DataLab 各个习题的解题过程,加深对 int.unsigned.float 这几种数据类型的计算机表示方式的理解. DataLab 中包含下表所示的 12 个习题,其中 9 个和整数有关,3个和单精度浮点数有关. 函数名 功能描述 分数 操作符 bitXor(x, y) 使用 & 和 ~ 实现异或操作 1 14 tmin() 补码的最小值 1 14 isTmax(x) x 是否为补码的最大值 1 10 allOddBits(x) x 的奇数位是否全为…
attacklab 实验报告和答案文件都在 https://github.com/thkkk/attacklab…
著名的CSAPP实验:二进制炸弹 就是通过gdb和反汇编猜测程序意图,共有6关和一个隐藏关卡 只有输入正确的字符串才能过关,否则会程序会bomb终止运行 隐藏关卡需要输入特定字符串方会开启 实验材料下载地址:http://csapp.cs.cmu.edu/2e/labs.html 下面通关解法: 反汇编: objdump -d bomb > bomb_assembly_32.S Phase 1: 打开bomb_assembly_32.S,定位到<phase_1>函数,可以看到以下代码:…
BOMBLAB实验总结 CSAPP实验BOMB,很头疼,看不懂,勉强做完了. 答案是这样的: Border relations with Canada have never been better. 1 2 4 8 16 32 2 707 7 0 9?>567 4 3 2 1 6 5 在bomb文件夹新建一个文件input.txt,再在gdb下运行如下指令: run < input.txt 就可以不用自己输入跑实验了. 做实验时记得一定要加一句: b explode_bomb 防止踩雷~ ph…
CSAPP缓冲区溢出攻击实验(上) 下载实验工具.最新的讲义在这. 网上能找到的实验材料有些旧了,有的地方跟最新的handout对不上.只是没有关系,大体上仅仅是程序名(sendstring)或者參数名(bufbomb -t)的差异,不影响我们的实验. 1.实验工具 1.1 makecookie 后面实验中,五次"攻击"中有四次都是使你的cookie出如今它原本不存在的位置,所以我们首先要为自己产生一个cookie. 实验工具中的makecookie就是生成cookie用的.參数是你的…
CSAPP  && lab5 实验指导书: http://download.csdn.net/detail/u011368821/7951657 实验材料: http://download.csdn.net/detail/u011368821/8019293 搞定这个实验还是要看一下曾经的笔记,再复习一下block的组织方式.仅仅看link里面第11节,动态内存分配的部分就能够了 http://blog.csdn.net/cinmyheart/article/details/3813637…
由于http://csapp.cs.cmu.edu/并未完全开放实验,很多附加实验做不了,一些环境也没办法搭建,更没有标准答案.做了这个实验的朋友可以和我对对答案:) 实验内容和要求可在http://csapp.cs.cmu.edu/3e/labs.html获得. Data Lab [Updated 5/4/16] bits.c /* * CS:APP Data Lab * * <李秋豪 Richard Li> * * bits.c - Source file with your soluti…
CSAPP缓冲区溢出攻击实验(下) 3.3 Level 2: 爆竹 实验要求 这一个Level的难度陡然提升,我们要让getbuf()返回到bang()而非test(),并且在执行bang()之前将global_value的值修改为cookie.因为全局变量与代码不在一个段中,所以我们不能让缓冲区一直溢出到.bss段(因为global_value初始化为0,所以它会被放在.bss而非.data段以节省空间)覆盖global_value的值.若修改了.bss和.text之间某些只读的段会引起操作系…
二进制炸弹是第三章<程序的机器级表示>的配套实验,这章主要介绍了x64汇编,包括:操作数的表示方式,数据传送指令,算术和逻辑指令,控制流跳转指令,过程(procedure)的实现与运行时栈帧,C语言中的数组,struct,union以及浮点数的汇编表示等.通过这章的学习,对C有了更深的理解,可以看出,C与汇编代码的相似度很高,称之为高级汇编也不为过. 这个实验提供了一个 Linux/x86-64 二进制程序(下载地址:CSAPP: Labs),即所谓的"二进制炸弹".执行这…
<CSAPP>号称程序员圣经,虽然中文译名为<深入理解计算机系统>,但其实没那么"深",只是覆盖面很广,一般用作计算机专业大一导论课的教科书.早就听闻书上配套的实验十分经典,这次重温新版(第三版),打算把所有的实验都做一下,也写个系列博文,好记录实验过程.实验可以在书本配套网站CSAPP: Lab Assignments下载,这篇从第一个实验 -- 位操作开始. 概述 本实验是第二章<信息的表示与处理>的配套实验,要求使用一个高度限制的C语言子集实现…
CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz CSAPP lab3 bufbomb-缓冲区溢出攻击实验(下)bang boom kaboom 栈结构镇楼 这里先给出getbuf的反汇编代码和栈结构,方便下面的使用. 栈结构: 第2关:bang 构造攻击字符串作为目标程序输入,造成缓冲区溢出,使目标程序能够执行bang函数:并且要篡改全局变量global_value为cookie值,使其判断成功.但我们知道全局变量放置在bss节或data节,并不存放在栈中,前…
前言 完成这个实验大概花费一天半的时间,看了很多大佬的博客,也踩了很多的坑,于是打算写一篇博客重新梳理一下思路和过程,大概会有两篇博客吧. CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz CSAPP lab3 bufbomb-缓冲区溢出攻击实验(下)bang boom kaboom lab3要我们做这样一件事情,修改一个正在运行程序的stack以达到预期的目的.具体的修改方式是这样的:程序定义了一个局部C风格字符串变量,注意局部变量是放在stack上面的,所以…
shlab这节是要求写个支持任务(job)功能的简易shell,主要考察了linux信号机制的相关内容.难度上如果熟读了<CSAPP>的"异常控制流"一章,应该是可以不算困难的写出来.但如果读书不仔细,或者实践的时候忘记了部分细节,那就可能完全不知道怎么下手,或者得改bug改到吐了.我自己写了大概八个小时,其中仅一半的时间都在处理收到SIGTSTP后莫名卡死的问题,最后才发现是课本没看仔细,子进程停止后也会向父进程发送SIGCHLD. 在实验中我们需要实现job.fg.bg…
前天讲到要刚CSAPP,这一刚就是两天半.CSAPP果然够爽,自带完整的说明文档,评判程序,辅助程序.样例直接百万组走起,管饱! datalab讲的是整数和浮点数怎么用二进制表示的,考验的是用基本只用位运算来实现一些看似稀松平常的操作.实际体会就是看题五秒钟,脱发两小时.当然做出来的成就感也是爆棚的. 求异或 根据离散数学等值演算写出公式 //1 /* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal op…
主要涉及计算机中数的表示法: (1)整数: two's complement,即补码表示法 假设用N位bit表示整数w: 其中最左边一位为符号位,符号位为0,表示正数,为1表示负数. (2)浮点数: 浮点数采用类似科学计数法的方式 以float为例:编码分为三部分:首位为符号位S,然后是8位指数位exp,最后是23位有效数位frac. 即: x = S*M*2^E 例如: -1.10110 × 2^10 其中: 通常 E = exp - bais, 对于float, bais = 2^(8-1)…
Bufbomb实验报告 实验分析: level 0-3从test開始制运行,通过函数getbuf向外界读取一串内容(buf). Level 4 是通过參数-n,程序运行testn函数,调用getbufn函数向外界读取一串内容(bufn). 实验要求我们通过getbuf读取内容时不检查边界的这一特性,输入过多的内容把栈里面的东西改动掉,使得程序发生预定的错误. 实验给了我们三个材料: ①是bufbomb也就是炸弹的主程序; ②是hex2raw,用来对bufbomb进行输入,从ppt里我们能够知道,…
注意不同版本的题目可能会有所不同,搜了很多他们的题目和现在官网给的实验题都不一样,自己独立思考完整做一遍顺便记录一下. PS:这些难度为1的题有的说实话我都做了挺久的,不过完整做一遍感觉很有意思,这些题总体感觉就是让你自己把那些运算符< ,> ? 什么的自己使用位级运算手动实现一遍,知道底层是怎样运作的. 一, bitXor: /* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal ops: ~…
好了话不多说我们书接上文继续来做第二个实验下面是前半部分实验的连接 5. 第五关 首先感觉应该是个递归问题 /* Round and 'round in memory we go, where we stop, the bomb blows! */ input = read_line(); phase_5(input); phase_defused(); printf("Good work! On to the next...\n"); 1. 初读phase_5 00000000004…
所有实验文件可见github 计算机系统实验整理 由于word文件没有保存,因此如需参考此实验,请直接访问github文件…
cachelab这节先让你实现个高速缓存模拟器,再在此基础上对矩阵转置函数进行优化,降低高速缓存不命中次数.我的感受如上一节,实在是不想研究这些犄角旮旯的优化策略了. 前期准备 我实验的时候用到了valgrind和python,都可以用apt-get大法直接安装 Prat A: 高速缓存模拟器 C语言图书管理系统级别的题目,照着课本硬模拟就行.讲义里说可以用malloc动态分配cache大小,但这东西规模很小,我直接预定义成了个大二维数组.唯一能说的新东西就是getopt了,解答了我一直以来对程…
perflab这节的任务是利用书中知识,来对图像处理中的Rotate和Smooth操作函数进行优化.这次没对上电波,觉得学了一堆屠龙之技.于我个人理解,现在计算机配置比以前高多了,连SWAP分区都几近废弃了,对于一般开发者来讲,代码效率瓶颈首先是架构,其次是算法,最后才是书里教的这些小细节.而且这节也没个具体的分数标准,优化了半天也不知道自己写的算啥水平,缺了前面几节那种攻克难题的成就感.不过也有可能是因为我太菜了 XD 前期准备 这次的开发环境被我迁移到了WSL上,系统版本为ubuntu 18…
archlab属于第四章的内容.这章讲了处理器体系结构,就CPU是怎样构成的.看到时候跃跃欲试,以为最后实验是真要去造个CPU,配套资料也是一如既往的豪华,合计四十多页的参考手册,一大包的源码和测试程序.意料之外是具体考你的不是"炼丹"(指沙土炼硅造芯),而是处理器级别的优化,要把处理器的性能榨干才能得满分.不愧是CMU,榨得我已经一滴脑汁也没有了,最后还只得了八成的分. 通过上次实验我知道了CMU喜欢给头铁之人留几个零头,所以剩下两成分我也不追求了.(耻辱下播) 前期准备 下载讲义和…
attacklab这节玩的是利用一个字符串进行缓冲区溢出漏洞攻击,就小时候想象中黑客干的事儿. 做题的时候好几次感叹这些人的脑洞,"这都可以攻击?还能这么注入?这还可能借力打力?"等自己注入的时候却是"啊?怎么又段错误了?怎么又算错地址了?"也是一次有趣的经历了. 小插曲:我拿到文件的时候直接去读得readme,看完了还迷惑这readme咋就这么点信息.后来知道了实验都要配合着writeup讲义看,不禁感叹我前两个实验没看讲义还能做出来真是个奇迹! level1 第…
bomblab这节搞的是二进制拆弹,可以通俗理解为利用反汇编知识找出程序的六个解锁密码. 早就听闻BOMBLAB的大名,再加上我一直觉得反汇编是个很艰难的工作,开工前我做好了打BOSS心理准备.实际上手后发现比想象的要简单. 我觉得这多亏了作者没有搞代码优化,让我能比较轻易的还原出源代码,甚至一眼看出所用的数据结构.但凡它搞一点儿代码混淆,都会把这次实验变成一次苦痛之旅. 前置小技巧 1.gdb调试汇编 我试了一番后觉得用以下几条指令在全屏模式下调试是体验最好的 gdb -tui ./bomb…
title: 前言 <深入理解计算机系统>一书是入门计算机系统的极好选择,从其第三版的豆瓣评分9.8分可见一斑.该书的起源是卡耐基梅龙大学 计算机系统入门课(Introduction to Computer System)的讲义,与其配套的还有发布在其官网上的实验,这也正是[CSAPP-LAB]这个系列所要[DIY]的. 这个系列包含哪些内容? 题目简介 转述题目要求,使笔记更具可读性. 解题思路 为没有思路但也不想直接看答案的同学提供一些提示. 参考答案 自己瞎琢磨出来的答案.有代码实现,也…
上个星期最终把csapp看完了. 我买的是中文版的,由于除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里.如今看来,大概不能算是个长处,可是的确可以加快我的看书速度,否则一星期还真不大可能把这书搞定. 对csapp慕名已久,主要在于据说这本书尽量的做到相对实用,不去讲那些和实际编程没多大关系的计算机原理(毕竟是著名计算机院校里面最偏软件的cmu的作品),重点很得当,像我这样的没有本科科班出生又不想去死读些不知道以后有没实用的东西的人来说,最是适合了.感兴趣的东西就行再…
这是CSAPP官网上的著名实验,通过注入汇编代码实现堆栈溢出攻击.实验材料可到我的github仓库 https://github.com/Cheukyin/CSAPP-LAB/ 选择buffer-overflow分支下载 linux默认开启ASLR,每次加载程序,变量地址都会不一样,所以若要关闭ASLR: sysctl -w kernel.randomize_va_space=0(赋值为2,即可打开ASLR) 不过本实验的程序似乎经过特殊处理,不需要关闭ASLR 正常编译的程序的stack是no…