在Linux中生成可执行文件(与实现编译器有关)



对于我的大学大四论文,我将为C编程语言的骨架形式实现一个编译器,然后继续扩展它,直到它更像Java,具有数组边界检查、类型检查等功能。

我相对能够胜任与编译器构造相关的大部分理论,并且有MIPS汇编语言编程的经验,所以我确实对编写极低级别代码有一点了解。

我主要担心的是,我可能会一直到需要产生实际机器代码输出的地步,但从运行机器代码的操作系统的角度来看,我对机器代码是如何执行的还不够了解

所以,我的实际问题基本上是,"有人知道在linux下编写在英特尔x86-64处理器上运行的程序集的最佳位置吗?">

我知识上的主要差距是机器代码在实践中是如何实际运行的。它是直接在处理器上运行,在需要内核提供的服务时进行"系统调用"(或等效的x86(,还是汇编语言在某种程度上是一个封装的描述,告诉内核如何执行指令(以类似于Java等解释语言的方式(?

如能提供任何帮助,我们将不胜感激。

本文档解释了如何实现外部函数接口以与其他代码交互:http://www.x86-64.org/documentation/abi.pdf

首先,对于机器代码,从这里开始:http://www.intel.com/products/processor/manuals/

接下来,我假设您关于机器代码如何运行的问题实际上是关于操作系统如何将exe加载到内存中并调用main((?这些链接可能有助于

链接器和装载器:http://www.linuxjournal.com/article/6463

ELF文件格式:http://en.wikipedia.org/wiki/Executable_and_Linkable_Format和http://www.linuxjournal.com/article/1060

您的机器代码将进入可执行的.text部分

最后,祝你好运。您的项目与我最后一年的项目类似,只是我以JVM为目标并编译了Visual Basic的一个子集!

最新更新