【目录】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)【矩阵转置的分块算法】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【flink状态管理(2)各状态初始化入口】状态初始化流程详解与源码剖析

文章目录 1. 状态初始化总流程梳理2.创建StreamOperatorStateContext3. StateInitializationContext的接口设计。4. 状态初始化举例:UDF状态初始化 在TaskManager中启动Task线程后,会调用StreamTask.invoke()方法触发当前Task中算子的执行,在…

常用的前端模块化标准总结

1、模块化标准出现以前使用的模块化方案: 1)文件划分: 将不同的模块定义在不同的文件中,然后使用时通过script标签引入这些文件 缺点: 模块变量相当于是定义在全局的,容易造成变量名冲突(即不…

flink反压及解决思路和实操

1. 反压原因 反压其实就是 task 处理不过来,算子的 sub-task 需要处理的数据量 > 能够处理的数据量,比如: 当前某个 sub-task 只能处理 1w qps 的数据,但实际上到来 2w qps 的数据,但是实际只能处理 1w 条&#…

Qt信号和槽机制(什么是信号和槽,connect函数的形式,按钮的常用信号,QWidget的常用槽,自定义槽函数案例 点击按钮,输出文本)

一.什么是信号和槽 信号槽式Qt中的一个很重要的机制。信号槽实际上是观察者模式,当发生了感兴趣的事件,某一个操作就会被自动触发。当某个事件发生之后,比如按钮检测到自己被点击了一下,它就会发出一个信号。这种发出类似广播。如果有对象对…

ArcGIS学习(五)坐标系-2

3.不同基准面坐标系之间的转换 在上一关中,我们学习了ArcGIS中的投影(投影栅格)工具,并以"WGS1984地理坐标系与WGS1984的UTM投影坐标系的转换”为例进行讲解。 "WGS1984地理坐标系与WGS1984的UTM投影坐标系的转换”代表的是同一个基准面下的两个坐标的转换。 …

人工智能 | 深度学习的进展

深度学习的进展 深度学习是人工智能领域的一个重要分支,它利用神经网络模拟人类大脑的学习过程,通过大量数据训练模型,使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来,深度学习在多个领域取得了显著的进展&#…

cesium mapboxgl+threebox glb 朝向问题

一、3Dbuilder打开glb 二、cesium在pitch和heading都为0的情况下,不设置模型的朝向 三、mapboxglthreebox在pitch和bearing都为0的情况下,不设置模型的朝向 四、对于地图默认视角,cesium设置pitch-90、heading0的时候和mapboxglthreebox设置p…

光学PCIe 6.0技术引领AI时代超大规模集群

随着云计算、大数据和人工智能技术的快速发展,超大规模数据中心正经历一场前所未有的变革。传统的集中式架构逐渐转变为解聚式(disaggregated)架构,这种架构将计算、存储和网络资源从单一的物理服务器中分离出来,形成独…

前端vite+vue3——自动化配置路由布局

文章目录 ⭐前言💖vue3系列文章 ⭐ 自动化配置路由💖引入vite版本自定义目录映射💖自动化读取文件下的路由💖main入口加载路由💖入口app.vue配置💖layout基础布局配置💖效果 ⭐总结⭐结束 ⭐前言…

Linux系统安装apache服务器并发布网站,以及配置

这个如果单纯是发布一个静态页面的话,真的好方便 第一步,安装httpd—apache服务器yum install -y httpd 第二步,启动服务 systemctl start httpd 这里其实服务器已经搭建好了。 设置服务系统启动时自动启动 systemctl enable httpd 查看apac…

算法专题:滑动窗口

参考练习习题总集 文章目录 3. 无重复字符的最长子串30. 串联所有单词的子串76. 最小覆盖子串187. 重复的DNA序列219. 存在重复元素 II220. 存在重复元素 III396. 旋转函数424. 替换后的最长重复字符438. 找到字符串中所有字母异位词 滑动窗口太简单了,没啥说的自己…

信号的处理机制

信号的处理机制 信号的来源信号的处理方式注册信号处理函数信号的未决和阻塞实时信号实时信号的特性使用实时信号注意事项 为什么需要可重入的信号处理函数可重入函数的特性例子在信号处理中保持可重入性 Unix/Linux系统中的信号处理机制提供了一种方式,允许操作系统…

ip、子网掩码和A、B、C段

文章目录 概要ip和子网掩码的关系如何进一步理解两者之间关系示例问题根据IP地址和子网掩码求网络号、主机号A段、B段、C段 概要 ip、子网掩码、C段相关知识 ip和子网掩码的关系 IP地址和子网掩码在网络中密切关联,共同用于确定一个设备属于哪个网络以及如何划分网…

text-generation-webui搭建大模型运行环境与踩坑记录

text-generation-webui搭建大模型运行环境 text-generation-webui环境初始化准备模型启动项目Bug说明降低版本启动项目 text-generation-webui text-generation-webui是一个基于Gradio的LLM Web UI开源项目,可以利用其快速搭建部署各种大模型环境。 环境初始化 下载…

python数据容器之列表相关的操作

列表是Python中最常用的数据容器之一,它可以存储多个元素,并且可以进行增加、删除、修改、查找等操作。下面是一些常见的列表操作: 创建列表:使用方括号 [] 或者 list() 函数来创建一个列表。例如: fruits [apple, …

【漏洞复现】EPON上行A8-C政企网关未授权下载漏洞

Nx01 产品简介 EPON上行A8-C政企网关是一款终端产品,提供企业网络解决方案。 Nx02 漏洞描述 EPON上行A8-C政企网关配置文件未授权下载漏洞,攻击者在未授权状态下下载配置文件,获取配置文件内敏感信息。 Nx03 产品主页 fofa-query: "Z…

Retinexformer论文精读笔记

Retinexformer论文精读笔记 论文为2023年ICCV的Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement。论文链接:browse.arxiv.org/pdf/2303.06705.pdf,代码链接:caiyuanhao1998/Retinexformer: “Retinexfo…

Mac 下载安装Java、maven并配置环境变量

下载Java8 下载地址:https://www.oracle.com/java/technologies/downloads/ 根据操作系统选择版本 没有oracle账号需要注册、激活登录 mac直接选择.dmg文件进行下载,下载后安装。 默认安装路径:/Library/Java/JavaVirtualMachines/jdk-1…

【C#】.net core 6.0 创建默认Web应用,以及默认结构讲解,适合初学者

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

Redis面试题44

人工智能是否有可能取代人类工作岗位? 答:人工智能在某些领域可能会取代一些人类工作岗位,但同时也会创造新的工作岗位。以下是一些关于人工智能是否取代人类工作岗位的观点: 替代观点:人工智能的发展和应用可能导致一…