第十章 语言编系统和运行系统.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十章 语言编系统和运行系统

中国科大 第十章 语言编译系统和运行系统 本章内容 C语言编译系统 预处理器、汇编器、连接器 目标文件的格式、静态库、动态连接 Java运行系统 掌握从源程序到可执行目标程序的实际处理过程 对实际参与软件开发是直接有用的 10.1 C语言编译系统 10.1 C语言编译系统 10.1 C语言编译系统 10.1.1 预处理器 gcc首先调用预处理器cpp,将源程序文件翻译成一个ASCII中间文件,它是经修改后的源程序 cpp实现以下功能 文件包含 宏展开 条件编译 10.1 C语言编译系统 10.1 C语言编译系统 10.1.2 汇编器 GCC系统的编译器cc1产生汇编代码 最简单的汇编器对输入进行两遍扫描 一遍扫描完成汇编代码到可重定位目标代码的翻译也是完全可能的 用 gcc ?S main.c 可以得到汇编文件main.s 用 as ?o main.o main.s 可以将main.s汇编成可重定位目标文件main.o 10.1 C语言编译系统 10.1.3 连接器 目标模块或目标文件的形式 可重定位的目标文件 可执行的目标文件 共享目标文件 一种特殊的可重定位目标文件 在装入程序或运行程序时,动态地装入到内存并连接 10.1 C语言编译系统 连接是一个收集、组织程序所需的不同代码和数据的过程,以便程序能被装入内存并被执行 连接的时机 编译时 装入时 运行时 静态连接器 动态连接器 10.1 C语言编译系统 一个重定位模块M可能定义和引用的符号 全局符号 指那些在模块M中定义,可以被其它模块引用的符号 局部符号 指那些在模块M中定义,且只能在本模块中引用的符号 外部符号 指那些由模块M引用并由其它模块定义符号 符号解析 识别各个目标模块中定义和引用的符号,为每一个符号引用确定它所关联的一个同名符号的定义 重定位 10.1 C语言编译系统 10.1.4 目标文件的格式 目标文件格式随系统不同而不同 介绍Unix的ELF(Executable and Linkable Format)格式 Linux、System V Unix的后期版本、BSD Unix变体和Sun Solaris,都使用Unix的ELF格式 10.1 C语言编译系统 ELF头 描述了字的大小 产生此文件的系统的字节次序 目标文件的类型 机器类型 节头表的位置 其它 10.1 C语言编译系统 节头表 目标文件中各节的位置和大小 处于目标文件的末尾 10.1 C语言编译系统 .text节 被编译程序的机器代码 .rodata节 诸如printf语句中的格式串和switch语句的跳转表等只读数据 .data节 已初始化的全局变量 10.1 C语言编译系统 .bss节(.comm 节) 未初始化的全局变量 在目标文件中不占实际的空间 .symtab节 记录在该模块中定义和引用的函数和全局变量的信息的符号表 10.1 C语言编译系统 .symtab节 Type FUNC OBJECT Bind GLOBAL LOCAL EXTERN 10.1 C语言编译系统 .symtab节 Name Value 偏移地址,或 绝对地址 Size 字节数 10.1 C语言编译系统 .rel.text节 .text节中需要修改的单元的位置列表 .rel.data节 用于被本模块引用或定义的全局变量的重定位信息 10.1 C语言编译系统 .debug节 用于调试程序的调试符号表 .line节 源文件和.text节中的机器指令之间的行号映射 .strtab 一组有空结束符的串构成的串表 10.1 C语言编译系统 10.1.5 符号解析 将每个符号引用正确地与某可重定位模块的符号表中的一个符号定义相关联,从而确定各个符号引用的位置 在所有输入模块中都找不到被引用符号的定义,则打印错误消息并结束连接 需要定义解析规则 10.1 C语言编译系统 解析规则 函数和已初始化的全局变量称为强符号;未初始化的全局变量称为弱符号 不允许有多重的强符号定义 出现一个强符号定义和多个弱符号定义时,选择强符号的定义 出现多个弱符号定义时,选择任意一个弱符号的定义 10.1 C语言编译系统 10.1.6 静态库 将相关的可重定位目标模块打包成一个文件,作为连接器的输入 连接器仅复制库中被应用程序引用的模块 gcc ?c swap.c ??编译 ar rcs mylib.a swap.o ??建库 gcc ?static ?o swap1 main.c /usr/lib/libc.a mylib.a ??生成可执行文件 10.1 C语言编译系统 10.1 C语言编译系统 10.1.7 可执行目标文件及装入

文档评论(0)

155****8706 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档