第26页 体系结构的问题
- 章节名:体系结构的问题
- 页码:第26页 2014-11-26 09:36:44
每个操作系统都会为运行在该系统下的应用程序提供应用程序二进制接口(Applicatio n Binary Interface)。 ABI包含了应用程序在这个系统下运行时必须遵守的编程约定。ABI总是包含一系列的系统调用和使用这些系统调用的方法,以及关于程序可以使用的内存地址和使用机器寄存器的规定。 从一个应用程序的角度看,ABI既是系统架构的一部分也是硬件体系结构的重点,因此只要违反二者之一的条件约束就会导致程序出现严重错误。在很多情况下,链接器为了遵守ABI的约定需要进行一些重要的工作。 例如,ABI要求每个应用程序包含一个该程序中各例程使用的所有静态数据的地址表,链接器通常会通过收集所有链接到程序中的模块的地址信息来创建这个表。ABI经常会影响链接器的是对标准过程调用的定义。 引自 体系结构的问题 过程调用
每种ABI都通过将硬件定义的调用指令与内存、寄存器的使用约定组合起来定义了一个 标准的过程调用序列。硬件的调用指令保存了返回地址(调用执行后的指令地址)并跳转到目标过程。在诸如x86这样具有硬件栈的体系结构中返回地址被压入栈中,而在其它体系结构中它会被保存在一个寄存器里,如果必要软件要负责将寄存器中的值保存在内存中。具有栈的体系结构通常都会有一个硬件的返回指令将返回地址推出栈并跳转到该地址,而其它体系结构则使用一个“跳转到寄存器中地址”的指令来返回。 在一个过程的内部,数据寻址可分为4类: 调用者可以向过程传递参数。 本地变量在过程中分配,并在过程返回前释放。 本地静态数据保存在内存的固定位置中,并为该过程私有。 全局静态数据保存在内存的固定位置中,并可被很多不同过程引用。 为每个过程调用分配的一块栈内存称为“栈框架(stack frame)” 引自 体系结构的问题 Unix ELF格式
传统的a.out格式为UNIX社区服务了超过10年,但是在UNIX系统5(System V)推出 时,AT&T认为需要一些更好的东西来支持交叉编译、动态链接以及其它的现代系统特性。早期的系统5采用COFF格式,即通用目标文件格式(Common Object File Format),它最初是为交叉编译的嵌入式系统设计的,由于其无扩展版本不支持C++和动态链接,因此并不能在所有的分时系统上都很好的工作。在系统5的后期版本中,COFF被ELF格式替代,即可执行和链接格式(Executable and Linking Format)。ELF同样被流行的自由软件Linux和BSD等类UNIX系统所采用。 ELF格式有三个略有不同的类型:可重定位的,可执行的,和共享目标(shared objec ts)。可重定位文件由编译器和汇编器创建,但在运行前需要被链接器处理。可执行文件完成了所有的重定位工作和符号解析(除了那些可能需要在运行时被解析的共享库符号),共享目标就是共享库,即包括链接器所需的符号信息,也包括运行时可以直接执行的代码。 引自 体系结构的问题
14人阅读
说明 · · · · · ·
表示其中内容是对原文的摘抄