csapp
文章平均质量分 60
shadowvvv
这个作者很懒,什么都没留下…
展开
-
CSAPP shlab
CSAPP shlab实验要求模拟一个轻轻量级的shell,实现内置指令quit,fg,bg,jobs,或者运行指定路径下可执行文件。框架大部分已经搭建好,我们只需要编写:函数eval:读入键入的命令行,做语法解析并执行相应命令函数builtin_cmd:辨认是否为内置指令,如果是则执行函数do_bgfg:执行内置指令bg和fg函数waitfg:终端需要等待前台程序执行sigchld_handler:SIGCHLD信号处理,这是子进程管理的关键部分sigint_handler:SIGINT信原创 2021-08-21 09:50:05 · 370 阅读 · 0 评论 -
CSAPP perfab
CSAPP perfabPart Arotate实验,把nxn的正方形图片逆时针旋转90度,这是一个内存敏感的程序,优化的主要思路是分块(和cachelab很像)。由于图片的边长都是32的倍数,所以我们选择块大小为4,8,16,32去尝试哪一种性能更好,最终选择为16x16的块Part Bsmooth实验,这是一个计算敏感的程序,优化的主要思路是:1、去掉不必要的过程调用:可以看到,为了处理边缘点,原程序用了很多min和max判断好处就是代码简洁,坏处就是影响性能CPE。我们分别处理4个角点,原创 2021-08-10 19:58:14 · 406 阅读 · 0 评论 -
CSAPP cachelab
CSAPP cachelabPart A编写一个缓存的模拟器,要求从命令行读入参数,从文本文件读入内存记录,输出对于缓存的hit,miss和evict其中,当E不为1时,替换策略是LRU (least-recently used),即最久没有用过的行被替换掉。注意编程时不用考虑内存请求的数据超过一个块的界限,即我们只需要考虑组索引和标志位匹配就可以。下面的代码思想就是用一个simTime记录访问内存的时间,用来做LRU替换#include "cachelab.h"#include <get原创 2021-08-04 23:18:48 · 259 阅读 · 0 评论 -
CSAPP archlab PartC
CSAPP archlab PartC主要的优化点:1、在指令集中加入iaddq,这样一些常数的加减只需要一个指令,而不是先把常数放到寄存器中再加减2、使用循环展开,我是使用了8路展开。当数组长度越大时,循环展开的路数越大,效果肯定越好3、执行读写操作时数据相关的气泡mrmovq (%rsi), %r8rmmovq %r8, (%rdi)第一条指令从memory中读数到r8,第二条指令r8再写到内存中。但是第二条指令在译码时,第一条指令正在执行阶段,还没有到访存,所以不知道r8的值,因此第二原创 2021-07-28 11:11:01 · 500 阅读 · 0 评论 -
CSAPP练习题5.5和5.6 课后习题答案解释
CSAPP练习题5.5和5.6看到这篇文章的一定是对练习题5.5和5.6的课后习题答案有疑惑的人。铺垫我就不多说了,直接上我自己的理解吧。我认为课后习题的答案应该是没有问题的,可以这么去理解1、首先,对于5.5题的代码,CEP是5result += a[i] * xpwrxpwr = x * xpwr假设a[i] * xpwr的计算结果保存在tmp中,大部分人的疑惑肯定是a[i] * xpwr和x * xpwr计算需要5个周期,然后算完的结果tmp再加回到result中,那不就是8个周期吗。原创 2021-07-25 11:06:33 · 1518 阅读 · 8 评论 -
CSAPP attacklab
CSAPP attacklabattacklab总共有5个小实验,主要是围绕CSAPP这本书的3.10节内容展开,即缓冲区溢出攻击。缓冲区溢出攻击:调用其他过程时当前%rip会存放在运行时栈上,通过缓冲区漏洞,可以修改ret时的%rip,使其指向恶意代码处。实验的第一部分有3个小实验,主要是在ctarget上完成,代码没有任何缓冲区溢出保护:主要指每次运行ctarget,栈地址是不变的,所以code-injection(CI)十分容易进行。主要方法是利用gdb调试工具,查看运行时栈的地址,然后就可以原创 2021-07-15 22:50:30 · 461 阅读 · 0 评论 -
CSAPP-bomb实验
CSAPP-bomb实验纪念一下bomb实验看汇编代码感觉要注意以下几点:1、一个过程开头一般是sub sp,用来分配栈空间2、然后保存寄存器3、如果过程A中还调用了其他过程B,那么在调用前会有参数的传递;可以配合过程B的代码和过程A中的参数传递看懂寄存器的意义4、以$开头的是立即数,就是10进制数,下文中有6304464这样的数作为地址偏移量,(我一开始以为是16进制)这个地址加8就是6304472phase10000000000400ee0 <phase_1>://从地址4原创 2021-06-17 21:32:43 · 503 阅读 · 0 评论