我对编译器所了解的是,它们将源代码转换为程序集,然后神奇地将该程序集转换为可执行文件。
它们如何将程序集转换为可执行文件?任何链接都会被接受,因为我想在C++中创建自己的编译器。
发布于 2019-11-04 07:47:43
要将汇编语言转换为可执行文件,首先使用汇编程序,然后(通常)使用链接器。
汇编程序将获取汇编语言源代码,并(通常)以某种格式(例如COFF或ELF)生成对象文件。具体细节随指令集的不同而不同,但是一个典型的处理器将有一个表(或多个)来显示该处理器的指令是如何编码的。汇编程序解析指令,然后使用编码表中的信息告诉它如何生成编码这些指令的单词。
然后,链接器获取该对象文件,至少有可能将其与包含它使用但未定义的外部例程的其他文件组合在一起,并生成一个可执行文件。同样,细节也各不相同,但在这种情况下,变化主要是基于所涉及的文件的格式。有一次,大多数链接器产生静态可执行文件,因此程序使用的任何外部函数都需要链接器将该函数复制到可执行文件中。大多数现代操作系统/加载器都支持某种形式的动态链接,其中程序可以依赖外部例程而不是静态地复制到程序中--相反,程序通常包含对文件和函数名称的引用,并由OS的加载程序在加载时找到文件,为每个函数分配一个地址,并修正指向分配给代码的地址的引用。
发布于 2019-11-04 07:49:25
你会用“一个汇编程序”。例如,在MSVC编译器套件中有MASM。您应该注意,通常在正常编译和链接期间,您不会在磁盘上实际获得汇编语言输出文件。
https://stackoverflow.com/questions/58688990
复制相似问题