自己动手构造编译系统:编译、汇编与链接2.4.2 表信息生成-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

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

简介:

2.4.2  表信息生成

  


   汇编器的符号表除了记录符号的信息之外,还需要记录段相关的信息以及重定位符号的信息,这些信息都是生成可重定位目标文件所必需的。


对于段表的信息,可以在汇编器识别section语法模块时进行处理。比如声明代码段的汇编代码及段表信息生成(见图2-14)。

section .text

 

图2-14  段表信息生成

  汇编器的语法分析器只要计算两次section声明之间的地址差,便能获得段的长度,从而将段的名称、偏移、大小记录到段表项内。如果规定段按照4字节对齐,则需要对段偏移进行扩展,如图2-14所示。

  汇编器的符号表与ELF文件的符号表并非同一个概念。汇编器的符号表来源于汇编语言定义的符号,ELF文件的符号表是汇编器根据需要导出的符号信息,如图2-15所示。最明显的一个例子就是使用equ命令定义的符号,这个符号对汇编器来说是一个符号,但在ELF文件内,它就是一个数字常量,不存在符号信息。

 

图2-15  符号表信息生成

  目标文件链接时会重新组织代码段、数据段的位置。这样段内定义的所有符号的地址以及引用符号的数据和指令都会产生偏差,这时就重新计算符号的地址,修改原来的地址,也就是常说的重定位。重定位一般分为两大类:绝对地址重定位和相对地址重定位。在重定位表内,需要记录符号重定位相关的所有信息(见图2-16)。

 

图2-16  重定位表信息生成

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接