编译原理 编译系统和运行系统 11.ppt
《编译原理 编译系统和运行系统 11.ppt》由会员分享,可在线阅读,更多相关《编译原理 编译系统和运行系统 11.ppt(65页珍藏版)》请在三一办公上搜索。
1、第十一章 编译系统和运行系统,本章内容C语言编译系统预处理器、汇编器、连接器目标文件的格式、静态库、动态连接Java运行系统无用单元收集(垃圾收集)掌握从源程序到可执行目标程序的实际处理过程对实际参与软件开发是直接有用的,11.1 C语言编译系统,C源程序可以分成若干个模块 分别进行预处理、编译和汇编、形成可重定位的目标文件 目标文件和必要的库文件连接成一个可执行的目标文件 gcc和cc是编译驱动程序的名字,11.1 C语言编译系统,main.c(1)#if 1(2)int buf2;(3)#else(4)int buf2=10,20;(5)#endif(6)void swap();(7)#d
2、efine A buf0(8)int main()(9)(10)scanf(%d,%d,buf,buf+1);(11)swap();(12)printf(%d,%d,A,buf1);(13)return 0;(14),swap.c(1)extern int buf2;(2)int*bufp0=buf;(3)int*bufp1;(4)void swap()(5)(6)int temp;(7)bufp1=buf+1;(8)temp=*bufp0;(9)*bufp0=*bufp1;(10)*bufp1=temp;(11),11.1 C语言编译系统,11.1.1 预处理器gcc首先调用预处理器cpp,
3、将源程序文件翻译成一个ASCII中间文件,它是经修改后的源程序cpp实现以下功能文件包含宏展开条件编译,11.1 C语言编译系统,main.c(1)#if 1(2)int buf2;(3)#else(4)int buf2=10,20;(5)#endif(6)void swap();(7)#define A buf0(8)int main()(9)(10)scanf(%d,%d,buf,buf+1);(11)swap();(12)printf(%d,%d,A,buf1);(13)return 0;(14),main.i(1)#1“main.c”(2)(3)int buf2;(4)(5)(6)(7
4、)void swap();(8)(9)int main()(10)(11)scanf(%d,%d,buf,buf+1);(12)swap();(13)printf(%d,%d,buf0,);(14)return 0;(15),11.1 C语言编译系统,11.1.2 汇编器GCC系统的编译器cc1产生汇编代码最简单的汇编器对输入进行两遍扫描一遍扫描完成汇编代码到可重定位目标代码的翻译也是完全可能的用gcc S main.c可以得到汇编文件main.s用as o main.o main.s可以将main.s汇编成可重定位目标文件main.o,11.1 C语言编译系统,一段汇编代码.L2:cmpl$
5、0,-4(%ebp)jne.L6jmp.L11.L11:cmpl$0,-8(%ebp)jne.L6jmp.L12.L12:jmp.L5.p2align 4,7.L6:,11.1 C语言编译系统,11.1.3 连接器目标模块或目标文件的形式可重定位的目标文件可执行的目标文件共享目标文件 一种特殊的可重定位目标文件 在装入程序或运行程序时,动态地装入到内存并连接,11.1 C语言编译系统,连接是一个收集、组织程序所需的不同代码和数据的过程,以便程序能被装入内存并被执行连接的时机编译时装入时运行时静态连接器动态连接器,11.1 C语言编译系统,一个重定位模块M可能定义和引用的符号全局符号 指那些在模
6、块M中定义,可以被其它模块引用的符号局部符号 指那些在模块M中定义,且只能在本模块中引用的符号外部符号 指那些由模块M引用并由其它模块定义符号符号解析识别各个目标模块中定义和引用的符号,为每一个符号引用确定它所关联的一个同名符号的定义重定位,11.1 C语言编译系统,11.1.4 目标文件的格式目标文件格式随系统不同而不同介绍Unix的ELF(Executable and Linkable Format)格式Linux、System V Unix的后期版本、BSD Unix变体和Sun Solaris,都使用Unix的ELF格式,11.1 C语言编译系统,ELF头描述了字的大小产生此文件的系统
7、的字节次序目标文件的类型机器类型节头表的位置、条目多少其它,11.1 C语言编译系统,节头表描述目标文件中各节的位置和大小处于目标文件的末尾,11.1 C语言编译系统,.text节 被编译程序的机器代码.rodata节 诸如printf语句中的格式串和switch语句的跳转表等只读数据.data节 已初始化的全局变量,11.1 C语言编译系统,.bss节(.comm 节)未初始化的全局变量 在目标文件中不占实际的空间.symtab节记录在该模块中定义和引用的函数和全局变量的信息的符号表,11.1 C语言编译系统,.symtab节TypeFUNCOBJECTBindGLOBALLOCALEXTE
8、RN,11.1 C语言编译系统,.symtab节NameValue偏移地址,或绝对地址Size字节数,11.1 C语言编译系统,.rel.text节.text节中需要修改的单元的位置列表.rel.data节用于被本模块引用或定义的全局变量的重定位信息,11.1 C语言编译系统,.debug节用于调试程序的调试符号表.line节源文件和.text节中的机器指令之间的行号映射.strtab一组有空结束符的串构成的串表,11.1 C语言编译系统,11.1.5 符号解析将每个符号引用正确地与某可重定位模块的符号表中的一个符号定义相关联,从而确定各个符号引用的位置在所有输入模块中都找不到被引用符号的定义
9、,则打印错误消息并结束连接需要定义解析规则,11.1 C语言编译系统,解析规则函数和已初始化的全局变量称为强符号;未初始化的全局变量称为弱符号不允许有多重的强符号定义出现一个强符号定义和多个弱符号定义时,选择强符号的定义出现多个弱符号定义时,选择任意一个弱符号的定义,11.1 C语言编译系统,11.1.6 静态库将相关的可重定位目标模块打包成一个文件,作为连接器的输入连接器仅复制库中被应用程序引用的模块gcc c swap.c编译ar rcs mylib.a swap.o建库gcc static o swap1 main.c/usr/lib/libc.a mylib.a 生成可执行文件,11.
10、1 C语言编译系统,和静态库连接,11.1 C语言编译系统,11.1.7 可执行目标文件及装入可执行目标文件与可重定位目标文件格式类似可执行目标文件的装入由加载器完成,11.1 C语言编译系统,典型的ELF可执行目标文件,11.1 C语言编译系统,Linux运行时的内存映像,11.1 C语言编译系统,这里描述的装入过程从概念上来说是正确的若需要了解装入过程真正是怎样工作的,必须在理解了进程、虚拟内存和内存分页等概念以后,11.1 C语言编译系统,11.1.8 动态连接静态库 周期性地被维护和更新 内存可能有多份printf和scanf的代码共享库 在运行时可以装到任意的内存位置,被内存中的进程
11、共享,11.1 C语言编译系统,共享库以两种不同的方式被共享共享库的代码和数据被所有引用该库的可执行目标文件所共享共享库的.text节在内存中的一个副本可以被正在运行的不同进程共享,11.1 C语言编译系统,11.1 C语言编译系统,加载器通常装入和运行动态连接器动态连接器接着完成连接任务把libc.so的文本和数据装入内存并进行重定位把mylib.so的文本和数据装入内存并进行重定位重定位swap2中任何对libc.so或mylib.so定义的符号的引用将控制传递给应用程序,11.1 C语言编译系统,11.1.9 处理目标文件的一些工具ar创建静态库,插入、删除、罗列和提取成strings
12、列出包含在目标文件中的所有可打印串strip 从一个目标文件中删除符号表信息nm 列出一个目标文件的符号表中定义的符号size 列出目标文件中各段的名字和大小readelf 显示目标文件的完整结构,包括编码在ELF头中的所有信息。它包括了size和nm的功能objdump可以显示目标文件中的所有信息。其最有用的功能是反汇编.text节中的二进制指令ldd列出可执行目标文件在运行时需要的共享库,11.2 Java语言的运行系统,Java语言简单性、分布性、安全性、可移植性等我们关心的是:平台无关性Java虚拟机技术是实现Java平台无关性特点的关键Java运行系统就是Java虚拟机的一个实现,1
13、1.2 Java语言的运行系统,11.2.1 Java虚拟机语言简介Java程序首先由Java编译器把它编译成字节码,也就是JVML程序常量池:各种字符串常量,类似于传统程序设计语言中的符号表类成员信息:域信息表和方法信息表JVML指令序列,11.2 Java语言的运行系统,Java源程序中的方法int calculate(int i)int j=2;return(i+j)(j-1);,对应的字节码程序:int calculate(int i)iconst_2istore_2iload_1iload_2iaddiload_2iconst_1isubimulireturn,11.2 Java语言
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 编译系统和运行系统 11 编译 原理 系统 运行
链接地址:https://www.31ppt.com/p-4526579.html