《CSAPP》地址翻译
摘要:本节所使用的符号: 地址翻译 地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)中元素之间的 映射 。 映射实现: MMU利用页表来实现这种映射。CPU中的一个控制寄存器, 页表基址寄存器PTBR 指向当前页表。n位的虚拟地址包含两个部分:一个p位的 虚拟页面偏
阅读全文
《CSAPP》读书笔记
摘要:第一章 第二章 第三章 第四章 第五章 第六章 第七章 链接 "可重定位目标文件" "符号和符号表" "符号解析" 第八章 第九章 虚拟存储器 "虚拟存储器" "页表、页命中、缺页" "地址翻译" 第十章 第十一章 第十二章 逐步添加。。
阅读全文
《CSAPP》符号解析
摘要:符号解析 链接器解析符号引用的方法是将每个引用与它输入的可重定位目标文件的符号表中的一个确定的符号定义联系起来。编译器只允许每个模块中每个 本地符号 只有一个定义。 对于全局符号,当编译器遇到一个不是在当前模块定义的符号时,它会假设该符号是在其他某个模块中定义的,生成一个链接器符号表条目,并把它交给
阅读全文
《CSAPP》符号和符号表
摘要:符号和符号表 每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息。 有三种不同的符号: 由m定义并能被其他模块引用的全局符号。对应 非静态的C函数 以及 不带C static属性的全局变量 。 由其他模块定义,并被m引用的全局符号。这些符号称为外部符号,对应定义在其他模块中的C函
阅读全文
《CSAPP》 可重定位目标文件格式
摘要:可重定位目标文件 ELF文件 ELF头以一个16字节的序列开始,这个序列描述了生成该文件的系统的 字的大小 和 字节顺序 。ELF头剩下的部分包含帮助链接器语法分析和解释目标文件的信息。其中包括ELF头的大小、目标文件类型、机器类型、节头部表的文件偏移,以及节头部表中的条目大小和数量。 夹在ELF头
阅读全文
C程序的编译与链接
摘要:编译器驱动程序 编译器驱动程序可以在用户需要时调用语言预处理器、编译器、汇编器和链接器。 例如使用GNU编译系统,我们需要使用如下命令来调用GCC驱动程序: 编译过程 一个C语言程序从源文件到可执行文件经过如下步骤: 1. 驱动程序运行C预处理器(cpp),它将main.c翻译成一个ASCII码的中
阅读全文
递归过程的栈帧
摘要:示例代码 c int rfact(int n) { int result; if (n
阅读全文
栈帧
摘要:栈帧结构 栈帧 为单个过程分配的那部分栈称为栈帧。 最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,%esp为栈指针。帧指针指向被分配栈的栈底。 以P过程调用Q过程为例:Q的参数放在P的栈帧中,当P调用Q时,P的返回地址入栈,形成P栈帧的末尾。Q的栈帧从保存的帧指针开始。 转移控制 call 过
阅读全文
《Effective C++》笔记
摘要:01:视c++为一个语言联邦 为了理解C++,必须要认识其主要的次语言: C 说到底C++仍是以C为基础。区块,语句,预处理器,内置数据类型,数组,指针统统来自C。 Object Oreinted C++ 这一部分是面向对象设计之古典守则在C++上的最直接实施。类,封装,继承,多态,virtual函
阅读全文