
《深入理解计算机系统》学习
文章平均质量分 94
《深入理解计算机系统》学习
祝清佳佳佳
这个作者很懒,什么都没留下…
展开
-
《深入理解计算机系统》学习(4):过程(如函数)和栈存储
返回地址作为P的栈帧的一部分,存放的是与P相关的状态。通过寄存器,过程P最多可以传递6个整数值(也就是指针和整数),但是如果Q需要更多的参数,P可以在调用Q之前在自己的栈帧中存储这些参数。设计良好的软件用过程作为抽象机制,隐藏某个行为的具体实现,同时又提供清晰简洁的接口定义,说明要计算的是哪些值,过程会对程序状态产生什么样的影响。程序可以使用栈来管理过程所需要的存储空间,栈和程序寄存器存放着传递控制和数据、分配内存所需要的信息,当P调用Q时,控制和数据信息添加到栈顶,当Q返回时,这些信息会释放掉。原创 2024-03-26 20:27:46 · 1097 阅读 · 0 评论 -
《深入理解计算机系统》学习(6):缓存区溢出
不过,更长的字符串就会导致gets覆盖栈上存储的某些信息,随着字符串变长,超过23个字符,状态信息(返回地址和调用者的栈帧)会被破坏。缓冲区溢出的一个更致命的使用是让程序执行本来不应该执行的该函数,这是一种最常见的通过计算机网络攻击系统安全的方法,通常,输入给程序一个字符串,这个字符串包含一些可执行代码的字节编码,称为攻击代码。最近的GCC版本在产生的代码中加入一种栈保护者机制,来检测缓冲区越界,其思想是在栈帧中局部缓冲区与栈状态之间存储一个特殊的金丝雀值,也被称之为哨兵值,是在程序每次运行时随机产生的。原创 2024-03-28 09:48:15 · 740 阅读 · 0 评论 -
《深入理解计算机系统》学习(5):数组、结构和联合
对于数组T A[N];在内存中分配了一个LN字节的连续区域,其中,L为数据类型T的大小。标识符 A 可以作为指向数组开头的指针。原创 2024-03-27 10:31:57 · 972 阅读 · 0 评论 -
《深入理解计算机系统》学习(8):浮点数和浮点代码
和整数运算操作不同,AVX浮点操作不能以立即数值作为操作数。相反,编译器必须为所有的常量值分配和初始化存储空间。然后,代码把这些值从内存读入。以摄氏度到华氏度转换的函数为例说明该过程。相应的x86-64汇编代码部分如下:可以看到,函数从标号为.LC2的内存位置读出1.8,从标号为.LC3的位置读入值32.0。.LC2有两个值:3435973837(0xcccc cccd)和1073532108(0x3ffc cccc)。机器采用的是小端字节顺序,第一个给出的是低位4字节,第二个给出的是高位4字节。原创 2024-03-30 10:49:43 · 1036 阅读 · 0 评论 -
《深入理解计算机系统》学习(10):静态库和动态库
首先,在任何给定的文件系统中,对于一个库只有一个.so文件,所有引用该库的可执行目标文件共享这个.so文件中的代码和数据,而不是像静态库的内容那样被复制和嵌入到引用库的可执行文件中。其次,在内存中,一个共享库的.text节的一个副本可以被不同的正在运行的进程共享。如果一个目标模块调用定义在共享库中的任何函数,那么就会有GOT和PLT,GOT是数据段的一部分,PLT是代码段的一部分。存档文件名由后缀.a标识。共享库是一个目标模块,在运行或加载时,可以加载到任意的内存地址,并和一个在内存中的程序链接起来。原创 2024-03-31 10:32:02 · 980 阅读 · 0 评论 -
《深入理解计算机系统》学习(9):链接和执行
在编译时,编译器向汇编器输出每个全局符号,分类为强符号和弱符号,汇编器将该信息隐含地编码在可重定位目标文件的符号表里。函数和已初始化的全局变量是强符号,未初始化的全局变量是弱符号。不允许有多个同名的强符号。如果有,链接器会生成一条错误信息。如果有一个强符号和多个弱符号同名,那么选择强符号。如果有多个弱符号同名,从这些弱符号中任意选择一个。原创 2024-03-31 10:31:17 · 1213 阅读 · 0 评论 -
《深入理解计算机系统》学习(7):信息存储、整数表示和运算
1950年前后乔治·布尔注意到通过将逻辑值TRUE和FALSE编码为二进制值1和0,能够设计出一种代数,以研究逻辑推理的基本原则。最简单的布尔代数是在二元集合{0,1}基础上的定义。布尔运算&、|、~、^对应逻辑运算与、或、非和异或。可以将4个布尔运算扩展到位向量的运算,位向量就是由0和1组成的串。位向量的一个应用就是表示有限集合。例如,a = [01101001] 表示集合A = {0,3,5,6},而b = [01010101] 表示集合B = {0,2,4,6}。原创 2024-03-29 11:54:58 · 778 阅读 · 0 评论 -
《深入理解计算机系统》学习(2):虚拟内存
《深入理解计算机系统》、虚拟内存原创 2023-10-09 19:20:24 · 837 阅读 · 1 评论 -
《深入理解计算机系统》学习(1):系统组成
CPU、处理器、操作系统、指令执行原创 2023-10-08 21:05:56 · 189 阅读 · 0 评论 -
《深入理解计算机系统》学习(3):高级语言和机器指令
Intel处理器系列俗称x86,x86一开始是第一代单芯片、16位微处理器之一。Intel处理器系列有好几个名字,包括IA32,也就是“Intel 32位体系结构”,以及最新的Intel64,即IA32的64位拓展,也称为x86-64。最常用的名字是“x86”,代指整个系列,也反映了直到i486处理器命名的惯例。原创 2023-12-16 12:29:11 · 979 阅读 · 0 评论