【目录】CSAPP的实验简介与解法总结(已包含Attack/Link/Architecture/Cache)

本文主要是介绍【目录】CSAPP的实验简介与解法总结(已包含Attack/Link/Architecture/Cache),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • Attack Lab(缓冲区溢出实验)对应书上Chap3
      • Link Lab(链接实验) 对应书上Chap7
      • Architecture Lab(体系结构实验)对应书上Chap4-5
      • Cache Lab(缓存实验)对应书上Chap6

Attack Lab(缓冲区溢出实验)对应书上Chap3

大意

待攻击的程序中使用了gets函数获取用户输入,你作为攻击者要输入一些内容来转移程序的控制权。

收获

理解了gets函数为什么被弃用,为什么新标准的输入函数强制要求编程者给出最大长度,提高了安全意识。知道了栈帧中都有什么以及如何传参。粗略了解“金丝雀”以及攻击有栈保护的代码的流程。

Attack Lab:Phase1~Phase5【缓冲区溢出实验】

Link Lab(链接实验) 对应书上Chap7

大意

每个阶段提供一个.o文件(可重定位目标文件),它是残缺的。请你用二进制编辑工具修改这个.o文件(或是重定位表、或是代码节、或是数据节),使得该.o文件与main.o文件链接后输出所要求的结果。

收获

链接就是符号解析+重定位。在本实验中,我了解了什么样的数据分配到什么节中(即符号解析),知道了重定位表在内存中的具体格式,以及会改写它(重定位)。

Link Lab:Phase 1 【输出学号】
Link Lab:Phase 2 【输出学号】
Link Lab:Phase 3 【输出学号 强弱符号】
Link Lab:Phase 4 【输出学号 switch跳转表】
Link Lab:Phase 5 【输出编码后的学号/补齐残缺的重定位表】

Architecture Lab(体系结构实验)对应书上Chap4-5

大意

用Y86-64汇编语言编写三个函数。补充硬件描述语言,使得Y86-64的解释器能够处理一条新指令。优化一个复制数组元素并统计大于零的元素的个数的汇编代码,使之每个元素平均消耗程序的周期数最少。

收获

学习了Makefile的一些知识。熟悉了Y86-64指令和条件码的使用,熟悉了完整的汇编程序的写法。会写Y86-64的指令的6阶段过程。进行了多次循环展开,学会了通过消除气泡来优化。

Architecture Lab:part A 【实现sum_list/rsum_list/copy_block/熟悉Y86-64指令】
Architecture Lab:Part B【顺序处理器SEQ的实现/添加iaddq指令/取址译码执行等六阶段】
Architecture Lab:Part C【实现流水线/添加iaddq指令/优化汇编代码以减少程序周期数】

下面是除了解题报告之外的一些记录:
Architecture Lab:预备知识1【Make与Makefile】
Architecture Lab:预备知识2【汇编call/leave/ret指令、CS:APP练习4.4】
Archtecture Lab:准备知识3【make时各种报错的解决方法】
顺序处理器SEQ的HCL代码分析

Cache Lab(缓存实验)对应书上Chap6

大意

用C语言实现一个cache的模拟器,测试时给出依次要加载的内存地址,你需要对hit次数和miss次数进行统计。
优化矩阵转置的C代码,使之的总miss数达到最少。

收获

知道了getopt,它可以使得C程序识别命令行选项。对矩阵转置程序进行了多种分块的尝试,使之miss总次数降到要求的值。

Cache Lab:Part A【模拟出使用LRU策略的高速缓存存储器组织结构】
Cache Lab:Part B(52.6/53)【矩阵转置的分块算法】

这篇关于【目录】CSAPP的实验简介与解法总结(已包含Attack/Link/Architecture/Cache)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Java Docx4j类库简介及使用示例详解

《JavaDocx4j类库简介及使用示例详解》Docx4j是一个强大而灵活的Java库,非常适合需要自动化生成、处理、转换MicrosoftOffice文档的服务器端或后端应用,本文给大家介绍Jav... 目录1.简介2.安装与依赖3.基础用法示例3.1 创建一个新 DOCX 并添加内容3.2 读取一个已存

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工