随笔分类 - CSAPP读书笔记
链接(3)
摘要:7.7 重定位 当完成了符号解析, 也就意味着代码中的每个符号引用和符号定义联系起来了, 那么对于那些在一个文件中定义而在另外一个文件中引用的符号, 我们就可以确切地知道其大小. 接下来是重定位 : 7.7.1 重定位条目 重定位条目有两种, 分别放在.rel.text和.rel.data中 : 1
阅读全文
链接(2)
摘要:7.5 符号和符号表 之前一节大改说道了符号表, 这一节展开来分析. 对于一个可重定位目标模块m而言, 有三种不同类型的符号 : 1. 有m定义并且能够被其他模块引用的符号(全局符号), 包括非静态的C函数以及定义的全局变量(限定词不带static)... 2. 被其他模块定义但是被模块m引用的符号
阅读全文
链接(1)
摘要:之所以跳过第4章直接开始第7章是因为第4章我之前学过一些, 另一方面C语言的链接, 很多书都闭口不提, 但这一块又确实是目前我理解C语言的一个痛点, 所以准备先看链接... 链接是将各种代码和数据部分收集起来并组合成为单一文件的过程, 然后这个文件可以被加载(或被拷贝)到存储器中执行... 那么我们
阅读全文
程序的机器级表示 (6)
摘要:3.13.4 控制 x86-64的控制指令和IA32没区别, 另外对应的增加了cmpq和testq而已, 其他一些与位无关的指令保存原样. 另外一点区别在于, gcc对于x86-64既会使用条件控制转移又使用条件控制传送, 因为x86-64所以的机器都支持条件传送, 所以不用考虑使用条件传送会导致机
阅读全文
程序的机器级表示 (5)
摘要:3.10 综合: 理解指针 汇编学到这里指针其实已经没什么好说的了, 主要下面几点需要提一下 : 1. 虽然指针有类型和数值两部分, 但是指针的类型并不是机器代码的一部分, 这只是C语言提供的一种抽象而已, 用来帮助程序员避免寻址错误. 2. 展开第一点来讲, 它为什么能帮助程序员避免寻址错误呢?
阅读全文
程序的机器级表示 (4)
摘要:3.8 数组的分配和访问 汇编中的数组和C语言的数组确实存在一定的对应关系, 假设E是一个int型的数组, 并且我们想计算E[i], 如果此时E存放在%edx中, i存放在%ecx中, 那么我们可以用 (%edx, %ecx, 4) 来获取E[i]位置的值, 由于缩放因子可以是1, 2, 4, 8,
阅读全文
程序的机器级表示 (3)
摘要:3.7 过程 所谓的过程, 按照我的理解就是函数, 大多数机器语言的过程其实就是通过操纵程序栈来完成数据的传递, 局部变量的分配与释放, 搭配着转移控制到过程以及从过程转移出控制来实现的. 3.7.1 栈帧结构 如图是帧栈的通用结构, 最顶端的帧栈通过两个指针来界定, 帧指针(%ebp)和栈指针(%
阅读全文
程序的机器级表示 (2)
摘要:3.6.5 循环 据说大多数汇编器会根据do-while循环来产生代码, 所以其他循环可能会先转化为do-while形式再编译成机器代码, 所以我们首先介绍do-while循环... 1. do-while 循环 do-while的通用形式如图所示 : 这里给出一个实际的例子 : 2. while循
阅读全文
程序的机器级表示 (1)
摘要:3.5 算术和逻辑操作 其实除了第一个leadl, 这些指令都有带操作数的变种, 只是这里省略了, 例如add可以是addb, addw 和 addl. 3.5.1 加载有效地址 指令leal(load effective address)实际上是movl的变种, 但是有一个很明显的特征, 他实际并
阅读全文
程序的机器级表示 (0)
摘要:最近试着写操作系统真是狠狠地感受了一下汇编的重要性... 所以特地再回来加强学习一下自己的汇编水平, 好了, 不多说, 这几天就要开始继续看书了... 3.1 历史观点 接下来要书里要讲的是汇编语言, 这里会先讲IA32(从Intel早期的16位处理器发展起来的), 接着讲x86-64(最初是由AM
阅读全文
信息的表示和处理(4)
摘要:2.4 浮点数 浮点数对于设计非常大的数字以及非常接近0数字有很大的意义, 但最早的浮点数并没有一个统一的标准, 之后IEEE 754的标准出现了, 该标准直到现在还在使用, 我们接下来要将的就是IEEE标准中的浮点格式... 因为这一部分我大一上学期的时候学过一些, 所以可能会比较简略... 2.
阅读全文
信息的表示和处理(3)
摘要:2.3 整数运算 2.31 无符号加法 无符号数的加法, 总的来说有一下规则 : 对于两个w位的无符号数x, y相加, 如果 x + y < 2w (这个值之上包括这个值都是w位无符号数无法表示的), 那么他们的值得x + y, 如果x + y超出了这个范围, 那么就造成了溢出, 此时x + y 的
阅读全文
信息的表示和处理(2)
摘要:2.1.10 C语言中的移位运算 对于x = [x3, x2, x1, x0], x << 2 得到的结果是 [x1, x0, 0, 0]. 右移位运算分为两种, 逻辑右移和算术右移, 逻辑右移是指右移K位, 左端补上K个0, 而算术右移是指左端补上K的x3(最高有效位). 实际上, C语言标准并没
阅读全文
信息的表示和处理(1)
摘要:2.1 信息存储 上一节我们说到计算机领域一个重要的抽象 虚拟存储器, 其中每一个字节都有一个数字作为唯一的标识, 这也就是所谓的地址。所有的地址的集合叫做虚拟地址空间, 用来给机器程序一个统一的概念性映像。我们用它来完成对被划分给不同的程序对象的存储区空单元的管理。 2.11 十六进制表示法 he
阅读全文
计算机系统漫游
摘要:1.1信息就是位+上下文 系统中所有的信息都是由一串位组成的, 所谓的位就是bit, 每八位是一个字节也就是byte, 理论上讲所有的文件可以分为两种, 一种是由ascii字符组成,这种我们也称作文本文件(其实其他字符编码也算, 这里不考虑), 剩下的都叫做二进制文件。所以其实一个文件到底会被如何翻
阅读全文
浙公网安备 33010602011771号