如何编译Java或C ++应用程序生成的代码

时间:2010-06-19 15:44:52

标签: java c++ assembly compilation exe

我一直在学习编译器理论和汇编,并设法创建一个生成x86汇编代码的编译器。

如何获取此汇编代码并将其转换为.exe?是否有一些神奇的API或工具我必须与之互动?还是比我想的更简单?

我不确定.exe中有什么,或者汇编代码和.exe本身之间有多少抽象。

我的'编译器'是用Java编写的,但我也想知道如何在C ++中这样做。

请注意,如果我使用生成的程序集,它会编译为.exe就好了,例如使用vc ++。


编辑:更确切地说,我已经知道如何使用编译器编译汇编代码。我想要的是让我的程序基本上输出.exe。

3 个答案:

答案 0 :(得分:1)

看起来您需要生成汇编程序进程和链接程序进程。在UNIX上,它就像调用fork()函数(它将创建一个新进程)和exec()函数一样简单,指定汇编器和链接器可执行文件名作为函数的参数,并使用适当的参数可执行文件,它们是生成的程序集和目标文件的名称。这就是你在UNIX系统上需要做的所有事情。

答案 1 :(得分:0)

通常使用汇编程序和链接器来创建exe文件。没有魔法参与。组装不同的部件,添加标题和其他样板,以便操作系统知道程序代码所在的位置以及组织内存。

VC ++编译器在幕后做了这件事。你可以考虑在Linux上玩一点,因为你可以更好地看到在Unix平台上工作的机器。它基本上是相同的,但很难在Windows上查看UI。

答案 2 :(得分:0)

原则上,每个装配线对应于一个机器指令,它只是exe文件中的几个字节。您可以在处理器的规格中找到它们。因此,如果您知道代码和exe格式(标题,重定位信息等),您可以编写自己的asembeler。

How Do Assemblers Map x86 Instruction Mnemonics to Binary Machine Instructions?