C/C++程序编译流程(预处理->编译->汇编->链接)

程序的基本流程如图: 1. 预处理 预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理 ①将所有的“#def...

自己动手构造编译系统:编译、汇编与链接

“自己动手系列” 自己动手构造编译系统 编译、汇编与链接 范志东  张琼声  著 图书在版编目(CIP)数据 自己动手构造编译系统:编译、汇编与链接 / 范志东,张琼声著. —北京:机械工业出版社,2016.7 (自己动手系列) ISBN 978-7-111-54355-8 I....

自己动手构造编译系统:编译、汇编与链接导读

Preface前  言 本书适合谁读 本书是一本描述编译系统实现的书籍。这里使用“编译系统”一词,主要是为了与市面上描述编译器实现的书籍进行区分。本书描述的编译系统不仅包含编译器的实现,还包括汇编器、链接器的实现,以及机器指令与可执行文件格式的知识。因此,本书使用“编译系统”一词作为编译器、汇编器和...

自己动手构造编译系统:编译、汇编与链接2.5.3 重定位 

2.5.3  重定位              重定位从本质上来说就是地址修正。由于目标文件在链接之前不能获取自己所使用符号的虚拟地址信息,因此导致依赖于这些符号的数据定义或者指令信息缺失。汇编器在生成目标文件的时候就记...

自己动手构造编译系统:编译、汇编与链接2.6 本章小结

2.6  本章小结         本章介绍了编译系统的设计,并按照编译、汇编和链接的顺序阐述了它们的内部实现。同时,也介绍了x86指令和ELF文件结构等与操作系统及硬件相关的知识。   通过以上的描述,可以了解高级语言如何被一步步转化为汇编语言,以及词法分析...

自己动手构造编译系统:编译、汇编与链接2.5.2 符号解析

2.5.2  符号解析       如果说地址空间分配是为段指定地址的话,那么符号解析就是为段内的符号指定地址。对于一个汇编文件来说,它内部使用的符号分为两类:一类来自自身定义的符号,称为内部符号。内部符号在其段内的偏移是确定的,当段的起始地址指定完毕后,内部符号的地址...

自己动手构造编译系统:编译、汇编与链接2.5.1 地址空间分配

2.5.1  地址空间分配      在汇编器生成的目标文件内,是无法确定数据段和代码段的虚拟地址的,因此将它们的段地址都设置为0。链接器是这些代码和数据加载到内存执行之前的最后一道处理,因此要为它们分配段的基址。   链接器按照目标文件的输入顺序扫描文件信息,从每个文件的段表中...

自己动手构造编译系统:编译、汇编与链接2.5 链接程序的设计

2.5  链接程序的设计           本书欲设计一个简洁的静态链接器,以满足上述汇编器产生的目标文件的链接需求。它的工作内容是把多个可重定位目标文件正确地合并为可执行文件,但链接器不是对文件进行简单的物理合并。除了合并同类的段外,链接器需要为...

自己动手构造编译系统:编译、汇编与链接2.4.3 指令生成

2.4.3  指令生成               2.2节介绍了x86指令的基本结构。同样,在汇编器语法分析时,需要根据指令的语法模块收集这些指令的结构信息。比如操作码、ModR/M字段、SIB字段、偏移量、立即数,然...

自己动手构造编译系统:编译、汇编与链接2.4.2 表信息生成

2.4.2  表信息生成       汇编器的符号表除了记录符号的信息之外,还需要记录段相关的信息以及重定位符号的信息,这些信息都是生成可重定位目标文件所必需的。 对于段表的信息,可以在汇编器识别section语法模块时进行处理。比如声明代码段的汇编代码及段表信息生成(...

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。