当前位置: 首页 > news >正文

高级语言源程序转换为可执行目标文件

将高级语言源程序转换为可执行目标文件的过程通常包括以下几个主要步骤:

 

​ 1. 预处理(Preprocessing):

由谁完成预处理器(cpp)
操作处理源代码中的预处理指令(如宏定义、文件包含、条件编译等)。
结果生成一个纯净的源文件,去除了所有的预处理指令。

1. 预处理(Preprocessing)

​ • 宏替换:将宏定义替换为具体的代码。

​ • 文件包含:将包含的头文件内容插入到源文件中。

​ • 条件编译:根据条件编译指令选择性地编译代码片段。

 

​ 2. 编译(Compilation):

 

由谁完成编译器(ccl)
操作将预处理后的源代码转换为汇编代码。这一步包括词法分析、语法分析、语义分析和优化。
结果生成汇编代码文件(通常扩展名为 .s 或 .asm)

2. 编译(Compilation)

​ • 词法分析:将源代码分解为记号(tokens)。

​ • 语法分析:根据语法规则构建语法树(parse tree)。

​ • 语义分析:检查语法树的语义正确性。

​ • 中间代码生成:将语法树转换为中间代码(通常是某种中间表示形式)。

​ • 优化:对中间代码进行优化,提升代码执行效率。

​ • 目标代码生成:将优化后的中间代码转换为目标平台的汇编代码。

 

​ 3. 汇编(Assembly):

 

由谁完成汇编器(as)
操作将汇编代码转换为目标代码(机器代码)。
结果生成目标文件【二进制】(通常扩展名为 .o 或 .obj),包含机器码和一些重定位信息。

3. 汇编(Assembly)

​ • 汇编代码翻译:将汇编指令转换为机器指令。

​ • 符号表:建立符号表,用于记录变量、函数等符号的地址信息。

​ • 重定位信息:生成重定位信息,以便在链接时进行地址调整。

 

​ 4. 链接(Linking):

由谁完成链接器(ld)
操作将一个或多个目标文件和所需的库文件链接在一起,解决符号引用(如函数和变量),生成一个完整的可执行文件。链接器还会处理重定位和地址分配。
结果生成可执行文件【二进制】(通常扩展名为 .exe 或没有扩展名)。

每个步骤具体的细节如下:

4. 链接(Linking)

​ • 符号解析:解析和解决各目标文件和库文件中的符号引用。

​ • 地址分配:为各个目标模块分配内存地址。

​ • 重定位:调整代码和数据中的地址引用,使之符合最终的内存布局。

​ • 生成可执行文件:将所有目标文件和库文件的代码和数据合并,生成最终的可执行文件。

在这个过程中,编译器、汇编器和链接器协同工作,将高级语言源程序一步步转换为能够在特定平台上运行的机器代码。


http://www.mrgr.cn/news/53915.html

相关文章:

  • 每日新闻掌握【2024年10月22日 星期二】
  • 新的类Rufus应用可带来简单的Windows 11 24H2安装旁路
  • Imagic: Text-Based Real Image Editing with Diffusion Models
  • 国有企业在薪酬管理方面常出现哪些问题?
  • open3d 读取 pcd
  • Android应用性能优化的方法
  • Leetcode - 周赛419
  • HTB:Bashed[WriteUP]
  • 下载nltk数据
  • 详细尝鲜flutter
  • 递归神经网络(RNN)简介
  • MySQL查看当前客户端连接数的方法
  • NOIP2007年复赛
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第五十四章 Pinctrl 子系统和 GPIO 子系统
  • D-PAD论文解析
  • 虚拟机nacos部署报错数据源未设置问题解决方案
  • 逻辑之舞:C++ 内存分配与释放,在程序的舞台上,演绎着资源的分配与回收
  • 解决SolidWorks装配体无法更改透明度问题
  • 【数据结构】栈
  • 数仓建设:如何设计数据治理考评规则?
  • 类和对象(中)后面部分
  • 【note】GNN
  • Dropout为何能防止过拟合?dropout和BN 在前向传播和方向传播阶段的区别?
  • 「图::连通」详解并查集并实现对应的功能 / 手撕数据结构(C++)
  • 挑战自闭症儿童康复:探索有效治疗方法
  • C#从零开始学习(类型和引用)(4)