码迷,mamicode.com
首页 > 编程语言 > 详细

语言的编译-汇编-链接

时间:2015-09-10 13:03:26      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

通过高级语言书写的程序,计算机是无法运行的。需经过编译-汇编-链接步骤,翻译成机器语言,这样才能运行在计算机上。

编译

根据程序的预处理命令,完成简单的预编译处理。检查程序是否符合语言约束,是否有编写、逻辑错误。

然后将其翻译成中间代码,其中会有部分汇编代码,对于变量以及函数调用,使用变量名占位。

汇编

根据上一步的中间代码文件,将其翻译为机器代码。

对文件中的变量地址、函数地址、大小,进行了记录,包括符号表(此模块包含哪些符号,符号在文件中的位置,符号在程序中的真正地址(根据text段可以计算出来,初始时为0,连接时替换))、重定位符号表(使用的外部文件的符号,及其在文件中的偏移位置),但是程序中使用的变量以及函数调用,保持占位。

生成目标文件。此时同正真的可执行文件很相似了,但由于程序中调用的变量以及函数的地址为空白,并且文件的ELF类型标志位不可执行的。

连接

多个目标文件合并,生成所有符号在程序中的正真地址,按照重定位表,替换相应位置的操作数,生成最终的可执行文件。

对于动态链接的方式,会在程序运行时,在将偏移位置的操作数替换掉。

语言的编译-汇编-链接

标签:

原文地址:http://www.cnblogs.com/mahuan2/p/4797415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!