CSAPP
文章平均质量分 95
BoL0150
这个作者很懒,什么都没留下…
展开
-
CSAPP实验记录(四):Malloc lab
CSAPP实验记录(四):Malloc lab此实验要求实现自己的存储分配器,特别是malloc、free 和 realloc 函数的实现。我们将修改和提交的唯一文件是mm.c。mdriver.c程序是一个驱动程序,它可以评估我们的实现方案的性能。使用命令make编译生成驱动程序并使用该命令运行它:./mdriver -V(-V标志显示有用的摘要信息。)我们的动态内存分配器将包含四个函数,声明在mm.h中,是现在mm.c中int mm_init(void);void *mm_malloc(siz原创 2021-10-05 15:55:12 · 3165 阅读 · 0 评论 -
CMU15-213学习笔记(七)Dynamic Memory Allocation
CMU15-213学习笔记(七)Dynamic Memory Allocation动态内存分配程序员通过动态内存分配(例如 malloc)来让程序在运行时得到虚拟内存。动态内存分配器会管理一个虚拟内存区域,称为堆(heap)。动态内存分配器将堆视为一组不同大小的块(block)的集合,每个块就是一个连续的虚拟内存片(chunk),每个块具有两种状态:**已分配:**已分配的块能为应用程序所用,且块会保持已分配状态直到被释放**空闲的:**空闲的块无法使用,直到它被分配在最开始进行内存映射时原创 2021-09-17 22:48:20 · 989 阅读 · 0 评论 -
CMU15-213学习笔记(五)virtual memory虚拟内存
CMU15-213学习笔记(五)virtual memory虚拟内存分页存储管理早期:程序员自己管理主存,通过分解程序并覆盖主存的方式执行程序。1961年,英国曼切斯特研究人员提出一种自动执行overlay的方式。动机:把程序员从大量繁琐的存储管理工作中解放出来,使得程序员编程时不用管主存容量的大小基本思想:把地址空间和主存容量的概念区分开来。程序员在一个虚拟地址空间里编写程序,而程序则在真正的物理内存中运行。由一个专门的机制实现地址空间和实际主存之间的映射,就是早期的分页管理机制。当时的一种典型原创 2021-08-06 16:18:07 · 1061 阅读 · 0 评论 -
CMU15-213学习笔记(六)Exceptional Control Flow
CMU15-213学习笔记(六)Exceptional Control Flow程序的正常执行顺序有两种:按顺序取下一条指令执行通过CALL/RET/Jcc/JMP等指令跳转到转移目标地址处执行CPU所执行的指令的地址序列称为CPU的控制流,通过上述两种方式得到的控制流为正常控制流。异常控制流CPU会因为遇到内部异常或外部中断等原因而打断程序的正常控制流,转去执行操作系统提供的针对这些特殊事件的处理程序。由于某些特殊情况引起用户程序的正常执行被打断所形成的意外控制流称为异常控制流(Exce原创 2021-08-06 00:11:42 · 577 阅读 · 0 评论 -
CMU15-213学习笔记(四)Linking 链接
CMU15-213学习笔记(四)Linking 链接编译过程编译系统(compilation system):预处理器(pre-processor)、编译器(compiler)、汇编器(assembler)、链接器(linker)预处理阶段:处理字符#开头的命令,即:将头文件的内容插入程序文本中宏定义替换条件编译(#if #ifdef),不被编译的部分变为空行删除注释预处理的命令:$gcc –E hello.c –o hello.i$cpp hello.c > hello原创 2021-08-01 13:42:22 · 404 阅读 · 0 评论 -
CSAPP实验记录(三):Attack lab
CSAPP实验记录(三):Attack lab这个lab涉及到对分别有不同安全漏洞的两个程序进行总共5次攻击。从这个lab中我们将了解到当程序不能很好地保护自己免受缓冲区溢出时,攻击者可以利用安全漏洞的不同方式。我们将学习到如何写出更安全的程序、如何使用GDB和OBJDUMP等工具。objdump是在类Unix操作系统上显示关于目标文件的各种信息的命令行程序。我们可以使用objdump命令对目标文件(obj)或可执行文件进行反汇编,它以一种可阅读的格式让你更多的了解二进制文件可能带有的附加信息。从官网原创 2021-07-25 17:24:01 · 1927 阅读 · 0 评论 -
CSAPP实验记录(二)Bomb Lab
CSAPP实验记录(二)Bomb Lab二进制炸弹是由一系列阶段组成的程序。每个阶段都要求你在 stdin 上键入一个特定的字符串。如果你输入了正确的字符串,那么这个阶段就被拆除,炸弹进入下一个阶段。否则炸弹会爆炸,并打印出 “BOOM!!!”,然后终止。当每一个阶段都被拆除时,炸弹才算拆除。我们需要将bomb可执行文件反汇编,对汇编语言代码进行逆向分析,而gdb是我们调试汇编语言的有效工具。我们选择比标准gdb更好用的cgdb。cgdb是对GNU Debugger(GDB)的轻量级curses(基于终原创 2021-07-18 12:21:53 · 723 阅读 · 0 评论 -
CMU15-213 学习笔记(二)Machine Level Programming
CMU15-213 Machine Level Programming学习笔记本篇参考了 小土刀的博客。1、history of Intel processors and architecture精简指令集计算机(reduced instruction set computer,RISC)或简译为精简指令集,是计算机中央处理器的一种设计模式。这种设计思路可以想像成是一家模块化的组装工厂,对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。基于RISC的架构:原创 2021-07-15 23:47:22 · 646 阅读 · 0 评论 -
CSAPP实验记录(一):环境配置&datalab
CSAPP实验记录(一):环境配置&datalab1、环境配置下载Ubuntu虚拟机。我之前用的是Ubuntu18.04,非常坑,强烈建议换成Ubuntu20.04windows和Ubuntu共享文件将实验网站上下载的实验Handout放入windows下的共享文件夹在Ubuntu中打开共享文件夹继续打开/mnt/hgfs/<你的共享文件夹名字>.右键选择该文件,复制到另一个自己创建的目录下进入该目录,打开终端,输入命令:tar x原创 2021-07-13 01:44:17 · 4329 阅读 · 1 评论 -
GCC介绍
编译过程编译系统(compilation system):预处理器(pre-processor)、编译器(compiler)、汇编器(assembler)、链接器(linker)预处理阶段:处理字符#开头的命令,即:1)将头文件的内容插入程序文本中。2)宏定义替换。3)条件编译(#if #ifdef),不被编译的部分变为空行。4)删除注释编译阶段:通过编译器将源程序翻译成汇编程序(assembly-language program)汇编阶段:将汇编程序翻译成机器语言指令,并将其打包成可重定位目标程原创 2021-07-10 22:15:38 · 2054 阅读 · 1 评论 -
CMU15-213《深入理解计算机系统》第二章学习笔记
《深入理解计算机系统》第二章学习笔记Representing and Manipulating Information1 、信息存储计算机字长,指明指针数据的标称大小。32位机器虚拟地址空间为4GB。64位为16EB。64位机器可以运行32位机器编译的程序,反过来不行。操作系统会给每个进程提供私有的虚拟内存地址空间,一个进程可以访问自己的数据,但是不能访问别人的数据。在虚拟内存中地址是连续的,对应物理内存则不一定,根据字长的不同,有不同的间隔,即根据字长的不同,指针大小也不同。如下图所示C语言各原创 2021-01-20 10:53:35 · 429 阅读 · 6 评论