CSAPP】的更多相关文章

它山之石可以攻玉. 对于<深入理解计算机系统>这本神人写就的神书, 我等凡人就不评论什么啦. 这本书的 第二,三 部分, 真的真的对我理解操作系统有很大的帮助. (当然, 如果你不看第一部分, 是很难完全看懂第二,三部分的吧) . 第一部分的的确确有些艰深, 从剖析汇编码, 窥探机器码, 到 理论上造CPU, 虽然作者(布赖恩特)讲的十分清楚, 但是仍然无法弥补我智商上的先天缺陷(俗称:脑残). 书中的内容真的是很丰富. 我觉得也正是书中的内容太多, 知识点太多, 所以很难完全读懂. 因为,…
CSAPP,即<深入理解计算机系统:程序员视角>第三版,是一本好书,但读起来确需要具备相当的基本功.而且,有的表述(中译文)还不太直白. 比如,第463页提到,(对于32位系统)为什么汇编器会将call指令中的引用的初始值设置为-4.其后解释语焉不详.结合文中对代码计算公式的展开: *refptr = (unsigned) (ADDR(r.symbol) + *refptr - refaddr) = (unsigned) (0x80483c8        + (-4)     - 0x804…
csapp.h其实就是一堆头文件的打包,在http://csapp.cs.cmu.edu/public/code.html 这里可以下载.这是<深入理解计算机系统>配套网站. 在头文件的#end if前面加上一句#include “csapp.c”,因为那个头文件要把csapp.c文件包含了进去. linux没有自带csapp.h,所以要自己导入,放到 /usr/include的文件夹里面. 还有就是因为csapp.c中有关于线程的头文件,在用gcc的时候最后要加上-lpthread 如 #…
很久之前就听过有过CSAPP这本书的传闻了,今天终于决定上手这本神作:既然是神作,就要仔细拜读一下,今天看了一下前言部分还真的令人耳目一新,单单是前言部分就让我学习到几个新的知识点: 1.c和Java:指针,显式的动态内存分配与格式化IO 2.经典书记:K&R (待收藏) 3.x - y < 0 与 x < y,通常采用后者而很少使用前者,主要原因如下: (1)当x的值较大时而y的值较小且为负数时,x - y 实际上就成为了x + |y|,而x + |y|的结果是有可能大于x数据类型所…
CSAPP缓冲区溢出攻击实验(上) 下载实验工具.最新的讲义在这. 网上能找到的实验材料有些旧了,有的地方跟最新的handout对不上.只是没有关系,大体上仅仅是程序名(sendstring)或者參数名(bufbomb -t)的差异,不影响我们的实验. 1.实验工具 1.1 makecookie 后面实验中,五次"攻击"中有四次都是使你的cookie出如今它原本不存在的位置,所以我们首先要为自己产生一个cookie. 实验工具中的makecookie就是生成cookie用的.參数是你的…
上个星期最终把csapp看完了. 我买的是中文版的,由于除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里.如今看来,大概不能算是个长处,可是的确可以加快我的看书速度,否则一星期还真不大可能把这书搞定. 对csapp慕名已久,主要在于据说这本书尽量的做到相对实用,不去讲那些和实际编程没多大关系的计算机原理(毕竟是著名计算机院校里面最偏软件的cmu的作品),重点很得当,像我这样的没有本科科班出生又不想去死读些不知道以后有没实用的东西的人来说,最是适合了.感兴趣的东西就行再…
著名的CSAPP实验:二进制炸弹 就是通过gdb和反汇编猜测程序意图,共有6关和一个隐藏关卡 只有输入正确的字符串才能过关,否则会程序会bomb终止运行 隐藏关卡需要输入特定字符串方会开启 实验材料下载地址:http://csapp.cs.cmu.edu/2e/labs.html 下面通关解法: 反汇编: objdump -d bomb > bomb_assembly_32.S Phase 1: 打开bomb_assembly_32.S,定位到<phase_1>函数,可以看到以下代码:…
这是CSAPP官网上的著名实验,通过注入汇编代码实现堆栈溢出攻击.实验材料可到我的github仓库 https://github.com/Cheukyin/CSAPP-LAB/ 选择buffer-overflow分支下载 linux默认开启ASLR,每次加载程序,变量地址都会不一样,所以若要关闭ASLR: sysctl -w kernel.randomize_va_space=0(赋值为2,即可打开ASLR) 不过本实验的程序似乎经过特殊处理,不需要关闭ASLR 正常编译的程序的stack是no…
首先说说我为什么要去读这一章.这个学期开OS的课,在Morden Operating System上读到和Process有关的内容时看到这样一句话:“Process is fundamentally a container that holds all the information needed to run a program.”当时瞬间就想到了之前在csapp上看的模棱两可的“目标可执行文件”这个概念,于是重新又把它的第7章给读了一遍. 要理解linker的作用,首先要搞明白他在整个计算机…
本项目大体上就是要求用C\C++来模拟cpu对cache的访问,然后统计hits.misses和eviction的次数.其实并没有想象中的那么难,感觉完全可以当成一道acm里面的大模拟题..下面就对这个题目涉及到的一些知识点做下总结: (一)linux命令行处理 由于题目要求是在linux下以附加命令参数的方式来执行程序的,所以要对命令行的参数进行一下处理.这里要用到getopt函数,函数原型为: int getopt(int argc,char** argv,const char* opstr…
9.虚拟存储器 为了更加有效地管理存储器且少出错,现代系统提供了对主存的抽象概念,叫做虚拟存储器(VM). 虚拟存储器是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互. 为每个进程提供一个大的,一致的和 私有的地址空间. 提供了3个重要能力. 将主存看成磁盘地址空间的高速缓存. 只保留了活动区域,并根据需要在磁盘和主存间来回传送数据,高效使用主存. 为每个进程提供一致的地址空间 简化存储器管理 保护了每个进程的地址空间不被其他进程破坏. 程序员为什么要理解它? 虚拟存储器是中心的.…
第十一章 网络编程 我们需要理解基本的客户端-服务端编程模型,以及如何编写使用因特网提供的服务的客户端-服务端程序. 最后,我们将把所有这些概念结合起来,开发一个小的但功能齐全的Web服务器,能够为真实的Web浏览器提供静态的和动态的文本和图形内容. 11.1 客户端 - 服务器编程模型 每个网络应用程序都是基于客户端 - 服务器模型的 采用这种模型,一个应用是由一个服务器进程 和一个或多个客户端进程组成. 服务器管理某种资源,并且通过操作这种资源为它的客户端提供某种服务. WEB服务器,代表客…
学了这么久的计算机,并发与并行的概念理解的一直不够透彻.考研复习那会儿,以为自己懂了,然而直到看了CSAPP才算是真正明白了这俩个概念. 并发(concurrency) 流X和流Y并发运行是指,流X在流Y开始之后结束之前开始运行,或者流Y在流X开始之后结束之前开始运行. 如图,进程A与进程B并发,进程A与进程C并发,进程B与进程C非并发. 并行(parallel) 并行是并发的真子集. 并发有可能发生在单处理器上,也可能在多处理器上.流A和流B并行,则流A和流B并发地运行在不同的处理器上. 来自…
CSAPP  && lab5 实验指导书: http://download.csdn.net/detail/u011368821/7951657 实验材料: http://download.csdn.net/detail/u011368821/8019293 搞定这个实验还是要看一下曾经的笔记,再复习一下block的组织方式.仅仅看link里面第11节,动态内存分配的部分就能够了 http://blog.csdn.net/cinmyheart/article/details/3813637…
昨天CSAPP上的疑问的解答 今天整明白了. CSAPP英文版第2版,826页,或者中文版第2版546页,有这么一段.关于多级页表的. "But if we had a 32-bit address space, 4KB pages, and a 4-byte PTE[page table entry, 杨注], then we would need a 4MB page table resident in memory at all time..." 其中"32-bit a…
CSAPP缓冲区溢出攻击实验(下) 3.3 Level 2: 爆竹 实验要求 这一个Level的难度陡然提升,我们要让getbuf()返回到bang()而非test(),并且在执行bang()之前将global_value的值修改为cookie.因为全局变量与代码不在一个段中,所以我们不能让缓冲区一直溢出到.bss段(因为global_value初始化为0,所以它会被放在.bss而非.data段以节省空间)覆盖global_value的值.若修改了.bss和.text之间某些只读的段会引起操作系…
CSAPP即<Computer System: A Programmer Perspective>的简称,中文名为<深入理解计算机系统>.相信很多程序员都拜读过,之前买的旧版没有读完,如今恰好第二版出版,就入手影印版重读经典.一读果然,经典依然是经典,CMU卡内基梅隆大学的本科教材,堪比另一本SICP的六星佳作啊! 1.A Tour of Computer System 1.1 Programs Are Translated by Other Programs into Diffe…
CSAPP:第十二章 并发编程 12.1 线程执行模型12.2 多线程之间并发通信12.3 其他并发问题   使用应用级并发的应用程序称为并发程序.现代操作系统提供三种基本的构造并发程序的方法: 进程 I/O多路复用 线程主要介绍下基于线程的并发编程 12.1 线程执行模型   每个进程开始生命周期都是单一线程,这个线程为主线程,在某一时刻,主线程创建一个对等线程,从这个时间点开始,两个线程并发地运行. 12.2 多线程之间并发通信 共享变量 使用信号量同步线程 使用信号量实现互斥 使用信号量来…
CSAPP:第十一章 网络编程 11.1 客户端服务器模型11.2 全球IP因特网11.3 套接字接口 11.1 客户端服务器模型   每个网络应用都是基于客户端-服务器模型.采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成.  客户端-服务器模型的基本操作是事务.一个客户端-服务器事务由以下四步组成. 当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务. 服务器收到请求后,解释它,并以适当的方式操作它的资源. 服务器给客户端发送一个响应,并等待下一个请求. 客户端…
CSAPP:第十章 系统级I/O 10.1 unix I/O10.2 文件10.3 读取文件元数据10.4 读取目录内容10.5 共享文件10.6 我们该使用哪些I/O函数? 10.1 unix I/O   所有的I/O设备(例如网络.磁盘和终端)都被模块化为文件,而所有的输入和输出都被当作对相应文件的读和写来执行.这种允许Linux内核引出一个简单.低级的应用接口,称为Unix I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行: 打开文件. 改变当前的文件位置, 读写文件. 关闭…
CMU是全美以至全球公认的CS最猛的大学之一,没办法,作为CS的发源地,再加上三位神一样的人先后在此任教:Alan Perlis(CS它祖宗+第一届Turing奖获得者).Allen Newell(AI缔造者+Turing奖获得者)和Herbert Simon(AI缔造者+Turing奖获得者+Nobel经济学奖获得者,当代的Leibniz,偶佩服到死的一个天神下凡级的人物,他的自传 Models of my life偶特意珍藏了两本),三位巨头培养出一大摊小神级别的人物,这一大摊小神级的人物又…
CSAPP:第九章 虚拟内存 关键点:虚拟内存.物理内存 9.1 物理地址和虚拟地址9.2 地址空间9.3 虚拟内存作为缓存的公工具 9.1 物理地址和虚拟地址   计算机的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一个唯一的物理地址(PA).第一个地址为0,接下来为1,再接下来为2,依次类推.CPU访问内存的最自然方式就是使用物理地址.我们把这种方式称为物理寻址.如图所示.   现代处理器使用一种称为虚拟地址的寻址方式.使用虚拟寻址,CPU通过生成一个虚拟地址(VA)来…
CSAPP:第八章 异常控制流2 关键点:进程控制.信号 8.4 进程控制8.5 信号 8.4 进程控制   Unix提供了大量从C程序中操作进程的系统调用.8.4.1 获取进程ID  每个进程都有一个唯一的正数(非零)进程ID(PID).getpid函数返回调用进程的PID,getppid函数返回它父进程的PID 1#include <sys/types.h>2#include <unistd.h>3pid_t getpid(void);4pid_t getppid(void);…
<深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP)第三章的家庭作业,并与网上的一些答案进行了对比修正. 感谢博主summerhust的整理,以下贴出AT&T常用汇编指令 AT&T常用汇编指令 数据传送指令 指令 效果 描述 movl S,D D <-- S 传双字 movw S,D D <-- S 传字 movb S,D D &l…
最近在看CSAPP(深入理解计算机系统第二版),其实最新版是第三版.但是,我看了一下价格100多大洋,于是去老夫子旧书网上买了本第二版的,花了30多块钱.哈哈. 网上看了一些关于此书的书评,都说是本好书,唯一缺点就是比较难懂.没关系,就姑且先啃一啃,实在不行,实在不行,再退而求其次,看那本<编码:隐匿在计算机软硬件背后的语言>吧. 以下是书中笔记部分与自己理解部分,由于是自学,误解或者错误肯定是不可避免的,希望能给予指出. 第一章  计算机系统漫游 计算机系统是由硬件跟软件共同组成的,它们是一…
摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息.摘要应包括本论文的目的.主要内容.方法.成果及其理论与实际意义.摘要中不宜使用公式.结构式.图表和非公知公用的符号与术语,不标注引用文献编号,同时避免将摘要写成目录式的内容介绍. 计算机系统是高度集成的一个相当复杂的系统,这个系统的实现有多重机制. 本文通过结束计算机中一个简单的hello程序从预处理一直到IO管理的整个过程中的实现细节,粗略介绍了计算机系统的机制,对其中一些关键的实现细节进行了相对详…
CSAPP:第八章 异常控制流1 关键点:异常 8.1 异常8.2 进程   现代系统通过使控制流发生突变来对这些情况做出反应,一般而言,我们把这些突变称为异常控制流(Exceptional Control Flow,ECF).异常控制流发生在计算机系统的各个层次. 8.1 异常   异常是异常控制流的一种形式,它的一部分由硬件实现,一部分由操作系统实现.异常就是控制流中的突变,用来响应处理器中的一些变化.如图所示,当处理器状态发生一个重要的变化时,处理器正在执行某个当前指令Icurr.在处理器…
CSAPP:程序的机器级表示2 关键点:算术.逻辑操作 算术逻辑操作1.加载有效地址2.一元二元操作3.移位操作 算术逻辑操作   如图列出了x86-64的一些整数和逻辑操作,大多数操作分成了指令类(只有leaq没有其他的变种,addb.addw.addl.addq分别是字节加法.字加法.双字加法和四字加法),这些操作通常分为四组:加载有效地址.一元操作.二元操作和移位操作. 1.加载有效地址 leaq S,D;D = &S  加载有效地址指令leag实际上是movq指令的变形,它的指令形式上是…
CSAPP:程序的机器级表示1 关键点:数据格式.操作数指示符. 数据格式访问信息操作数指示符举例说明 数据格式   术语字(word)表示16位数据类型,32位数为双字(double words),64位数为四字(quad words).图3-1给出了c语言的数据类型在x86-64中的大小.在64位机器中标准int为双字,指针为8字.  不通数据类型产生的汇编代码后缀如图所示.movb(传送字节).movw(传送字).movl(传送双字).movq(传送四字) 访问信息   一个x86-64的…
CSAPP:信息的表和处理2 关键点:浮点数.浮点数运算. 二进制小数IEEE浮点数表示浮点数转换(单精度)参考 二进制小数   形如表示的二进制数,其中每个位的取值范围位0和1.这种表示方式的定义如下:  符号.变为二进制点,点的左边的位的权是2的正幂,右边的位的权是2的负幂.例如.  小数的二进制表示法只能表示那些能够被写成的数,其他的数值只能近似的表示,增加二进制的长度可以提高表示的精度. IEEE浮点数表示   IEEE浮点标准用的形式来表示一个数: 符号(sign)s,决定正负,1表示…