11.1 C语言编译系统 11.1.3连接器 目标模块或目标文件的形式 可重定位的目标文件 可执行的目标文件 共享目标文件 一种特殊的可重定位目标文件 在装入程序或运行程序时,动态地装入到内存并 连接
11.1 C语言编译系统 11.1.3 连接器 目标模块或目标文件的形式 • 可重定位的目标文件 • 可执行的目标文件 • 共享目标文件 – 一种特殊的可重定位目标文件 – 在装入程序或运行程序时,动态地装入到内存并 连接
11.1 C语言编译系统 连接是一个收集、组织程序所需的不同代码 和数据的过程,以便程序能被装入内存并被 执行 连接的时机 -编译时,装入时, 或运行时 静态连接器 动态连接器 可重定位目标模块的组成? (回顾例子
11.1 C语言编译系统 • 连接是一个收集、组织程序所需的不同代码 和数据的过程,以便程序能被装入内存并被 执行 • 连接的时机 – 编译时,装入时,或运行时 • 静态连接器 • 动态连接器 • 可重定位目标模块的组成?(回顾例子)
先前例题 一个C语言程序及其在X86Liux操作系统上的编译结 果如下。根据所生成的汇编程序来解释程序中四个变 量的存储分配、生存期、作用域和置初值方式等方面 的区别 static long aa 10; short bb 20; func() static long cc 30; short dd 40;
先 前 例 题 一个C语言程序及其在X86/Linux操作系统上的编译结 果如下。根据所生成的汇编程序来解释程序中四个变 量的存储分配、生存期、作用域和置初值方式等方面 的区别 static long aa = 10; short bb = 20; func( ) { static long cc = 30; short dd = 40; }
static long aa 10; func() short bb 20; 先前例题static long ce=30: short dd 40; .data .align 4 .align 4 .type cc.2,@object .type aa,@object .size cc.2,4 .size aa,4 cc.2: aa: .long 30 .long 10 text globl bb .align 4 .align 2 .globl func .type bb,@object func: .size bb,2 bb: movw $40,-2(%ebp) .value 20
先 前 例 题 .data | .align 4 .align 4 | .type cc.2,@object .type aa,@object | .size cc.2,4 .size aa,4 | cc.2: aa: | .long 30 .long 10 | .text .globl bb | .align 4 .align 2 | .globl func .type bb,@object | func: .size bb,2 | . . . bb: | movw $40,-2(%ebp) .value 20 | . . . static long aa = 10; short bb = 20; func( ) { static long cc = 30; short dd = 40; }
11.1 C语言编译系统 个重定位模块M可能定义和引用的符号 全局符号指那些在模块M中定义,可以被其它模 块引用的符号 局部符号指那些在模块M中定义,且只能在本模 块中引用的符号 外部符号指那些由模块M引用并由其它模块定义 符号 符号解析 识别各个目标模块中定义和引用的符号,为每一 个符号引用确定它所关联的一个同名符号的定义 重定位
11.1 C语言编译系统 • 一个重定位模块M可能定义和引用的符号 – 全局符号 指那些在模块M中定义,可以被其它模 块引用的符号 – 局部符号 指那些在模块M中定义,且只能在本模 块中引用的符号 – 外部符号 指那些由模块M引用并由其它模块定义 符号 • 符号解析 – 识别各个目标模块中定义和引用的符号,为每一 个符号引用确定它所关联的一个同名符号的定义 • 重定位