• 语言的编译-汇编-链接


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

    编译

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

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

    汇编

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

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

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

    连接

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

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

  • 相关阅读:
    国内的pythoner强烈建议使用豆瓣的pypi源 zz
    python3.x中的urllib模块
    idcheck.py
    17、关于hibernate的N+1问题
    16、【转】Hibernate 原汁原味的四种抓取策略
    1、SSH的整合---->将Struts2整合到Spring中
    1、利用json2html.js处理json数据
    1、Ubuntu14.04使用root登陆帐户
    2、CentOS中修改yum源
    1、在CentOS上安装Java JDK的步骤
  • 原文地址:https://www.cnblogs.com/mahuan2/p/4797415.html
Copyright © 2020-2023  润新知