代码之家  ›  专栏  ›  技术社区  ›  Cam

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

  •  2
  • Cam  · 技术社区  · 14 年前

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

    如何获取此程序集代码并将其转换为.exe?是否有一些神奇的API或工具需要与我交互?还是比我想象的简单?

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

    我的“编译器”是用Java编写的,但我也想知道如何在C++中实现这一点。

    注意,如果我使用生成的程序集,它可以编译为.exe,例如使用vc++。


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

    3 回复  |  直到 14 年前
        1
  •  1
  •   iksemyonov    14 年前

    看起来您需要生成一个汇编程序进程和一个链接程序进程。在Unix上,调用 fork() 函数,它将创建一个新进程,并且 exec() 函数,将汇编程序和链接器可执行文件名指定为函数的参数,并为这些可执行文件指定适当的参数,这些参数将是生成的程序集和对象文件的名称。这就是在UNIX系统上所需要做的全部工作。

        2
  •  0
  •   Peter Tillemans    14 年前

    通常使用汇编程序和链接器来创建一个exe文件。没有魔法。组装不同的部分,添加一个头文件和其他样板文件,这样操作系统就知道程序的引导代码在哪里,并组织内存。

    VC++编译器会在引擎盖下完成这项工作。您可以考虑在Linux上玩一点,因为您可以更好地看到在UNIX平台上工作的机器。基本上是一样的,但是在Windows上很难看到UI。

        3
  •  0
  •   Community Muhammed Neswine    7 年前

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

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