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

时间:2011-07-04 23:43:54

标签: linux compiler-construction assembly linux-kernel compiler-theory

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

我在与编译器构造相关的大部分理论方面都相对称职,并且具有使用MIPS汇编语言编程的经验,所以我对编写极低级代码有一点了解。

我主要担心的是,我很可能能够一直到达我需要生成实际机器代码输出的程度,但是从机器代码的角度来看,机器代码的执行情况还不够了解。运行它的操作系统。

所以,我的实际问题基本上是,“有没有人知道在linux下使用intel x86-64处理器编写程序集的最佳位置?”

我所知道的主要差距是机器代码在实践中是如何实际运行的。它是直接在处理器上运行,在需要内核提供的服务时制作“syscall”(或x86等效的),或者汇编语言是某种封装的描述,告诉内核 如何 执行指令(以类似Java等解释语言的方式)?

非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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

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

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

最后,祝你好运。您的项目类似于我的最后一年项目,除了我针对JVM并编译了Visual Basic的一个子集!