《CS:APP》的实验
文章平均质量分 73
对于CS:APP Lab们的体验心得+题解报告
BU冰糖雪梨里的梨PT
内容如有误恳请指正
展开
-
【目录】CSAPP的实验简介与解法总结(已包含Attack/Link/Architecture/Cache)
实验解法总结原创 2024-02-06 14:26:21 · 1323 阅读 · 0 评论 -
Architecture Lab:Part C【流水线通用原理/Y86-64的流水线实现/实现IIADDQ指令】
流水线化通过让不同的阶段并行操作,改进了系统的吞吐量性能。在任意一个给定的时刻,多条指令被不同的阶段处理。在引入这种并行性的过程中,我们必须非常小心,以提供与程序的顺序执行相同的程序级行为。通过重新调整SEQ各个部分的顺序,引入流水线,我们得到SEQ+,接着添加流水线寄存器,创建出 PIPE-流水线。然后,添加了转发逻辑,加速了将结果从一条指令发送到另一条指令,从而提高了流水线的性能。有几种特殊情况需要额外的流水线控制逻辑来暂停或取消一些流水线阶段。原创 2024-02-05 23:04:17 · 870 阅读 · 0 评论 -
Attack Lab:Phase1~Phase5【缓冲区溢出实验】
本阶段的目标是调用touch3,调用时向touch3传递一个参数,是字符串,字符串的内容是cookie,即sval=“2486651c\0”.并且要特别注意字符串的存放位置,不能存在buf的栈帧(即大小为0x38字节的缓冲区)中,不然调用其他函数时马上会被覆盖,按地址读出的就不是我们写入的sval字符串了。不要忘记,溢出区的地方写栈顶地址(与阶段二的地址一样,是0x55631238,无需再次用gdb调试),以便在buf函数调用结束后rip跳到我们注入的代码的地址。我们要用到的是溢出的部分。原创 2024-02-01 20:10:19 · 775 阅读 · 0 评论 -
Cache Lab:Part B(52.6/53分)【矩阵转置的分块算法】
要求在trans.c中编写一个转置函数,从而导致尽可能少的miss。缓存的参数是(s = 5, E = 1, b = 5)。三种测试用例的矩阵大小分别为:原创 2024-02-01 20:07:20 · 877 阅读 · 0 评论 -
Cache Lab:Part A【模拟出使用LRU策略的高速缓存存储器组织结构】
A 部分的工作是填写 csim.c 文件,以便它采用相同的命令行参数并生成与参考模拟器相同的输出。请注意,此文件几乎完全为空。你需要从头开始编写它。原创 2024-01-30 13:13:27 · 1091 阅读 · 0 评论 -
顺序处理器SEQ的HCL代码分析
本书提供了SEQ和PIPE的HCL描述,完整的研究它们是很值得的。本文来分析SEQ的HCL代码。分析的方式就是以下面中的几个指令(rrmovq、ret、pushq)为例,跟着HCL控制逻辑的六个阶段走一遍。原创 2024-01-26 00:01:21 · 644 阅读 · 0 评论 -
Architecture Lab:Part B【顺序处理器SEQ的实现/添加iaddq指令/取址译码执行等六阶段】
Part B的要求如下,大意是,实验文件seq-full.hcl已经给出了用HCL语言描述的“顺序Y86-64处理器”,该处理器已经可以处理irmovq,rrmovq,pushq等一系列指令,现在请你对seq-full.hcl进行补充,使处理器可以处理iaddq指令。原创 2024-01-24 13:45:35 · 510 阅读 · 0 评论 -
Archtecture Lab:准备知识3【make时各种报错的解决方法】
链接器报错,原因是重复定义。把yas.h中的int lineno前面加extern。原创 2024-01-19 23:12:55 · 482 阅读 · 0 评论 -
Architecture Lab:part A 【实现sum_list/rsum_list/copy_block/熟悉Y86-64指令】
Architecture Lab 对应CS:APP的Chap 4——处理器体系结构。Part A要实现三个函数,分别为sum_list/rsum_list/copy_block。建议先得到x86-64指令,然后再转换为Y86-64指令。原创 2024-01-19 22:43:08 · 543 阅读 · 0 评论 -
Architecture Lab:预备知识2【汇编call/leave/ret指令、CS:APP练习4.4】
命令 gcc -S rsum.c,得到的rsum.s文件即为汇编之后的结果。chap4的练习4.4(page.255)让用Y86-64实现rsum(递归求数组元素之和),提示为:先得到x86-64汇编代码,然后转换成Y86-64的。原创 2024-01-16 22:29:04 · 634 阅读 · 0 评论 -
Architecture Lab:预备知识1【Make与Makefile】
Architecture Lab(下简称ArchLab)对应CS:APP的Chap 4——处理器体系结构。读完README之后还是对实验包中的文件一头雾水,看到使用make命令,则今天学习一下相关内容。这是ArchLab的PartA对应的Makefile文件。原创 2024-01-16 22:15:45 · 464 阅读 · 0 评论 -
Link Lab:Phase 5 【输出编码后的学号/补齐残缺的重定位表】
修改补充phase5.o重定位节中被清零的重定位记录,使其与main.o链接后能够正确输出学号编码后的字符串: $ gcc -o linkbomb main.o phase5.o $ ./linkbomb $学号编码后字符串。原创 2023-12-03 13:26:18 · 726 阅读 · 4 评论 -
Link Lab:Phase 4 【输出学号 switch跳转表】
修改phase4.o相应节中的内容,使其与main.o链接后运行能够输出自己的学号:$学号。原创 2023-12-01 15:44:21 · 602 阅读 · 0 评论 -
Link Lab:Phase 3 【输出学号 强弱符号】
先链接main.o 与phase3.o(linux> gcc main.o phase3.o linux> objdump -d a.out )以便看do_phase里做了什么。(COOKIE字符串未初始化,可以利用强弱符号,在phase3_patch.c中定义一个初始化的COOKIE字符串。本例看出如果学号全是一样的数字(比如0000000000)你只需要把lOXXBDHjiI字符串赋为256个0即可,根本不用考虑究竟是哪个位置被打印。地址:bp-17 bp-13 bp-f bp-d。原创 2023-11-30 19:16:39 · 625 阅读 · 0 评论 -
Link Lab:Phase 2 【输出学号】
本阶段主题是链接中的“重定位”。原创 2023-11-29 17:30:48 · 620 阅读 · 0 评论 -
ELF分析(以CS:APP linkLab的文件为例)
文件结构:gcc -o test main.o phase1.o。原创 2023-11-26 19:40:24 · 75 阅读 · 0 评论 -
Link Lab:Phase 1 【输出学号】方法2
直接反汇编phase1.o,看eax中是0x21,0x21在数据域中,直接把从第21个字节的内容改为0000000000即可。原创 2023-11-26 15:20:44 · 405 阅读 · 0 评论 -
Link Lab:Phase 1 【输出学号】
该实验的主题是“链接”。原创 2023-11-26 15:00:33 · 715 阅读 · 0 评论