7

我正在用 C 编写一个概念验证 JIT 编译器,目前它正在生成汇编代码字符串。C 中的内联汇编功能仅处理在编译时已知的字符串文字,因此我不能使用它来运行我在运行时生成的代码。

我已经阅读了有关使用 mmap() 在运行时执行生成的机器代码的信息,但如果可能的话,我想避免使用机器代码。

有谁知道任何解决方案?我曾考虑将其写入文件并在所述文件上调用汇编器和链接器,但这会很混乱而且很慢。

4

2 回答 2

3

我认为最终要成为“JIT”,您需要对时间敏感,这意味着生成机器代码。您可以尝试放入一些调试代码来生成要运行的机器代码和要验证的汇编代码,运行汇编程序将汇编语言中的机器代码与您直接生成的机器代码进行比较,然后使用它来调试/验证机器代码(如果可能的话,有时汇编程序想做他们自己的事情,而不是你想让他们做的事情)。

于 2013-08-13T18:44:48.930 回答
2

我所做的是生成 C/C++/Fortran 代码,即时编译,将其链接到 DLL,然后动态加载 DLL,所有这些最多只需要几秒钟的时间。除了生成 ASM 之外,您也可以这样做。当您需要生成代码的速度以及所生成语言的代码(和运行时库)的灵活性时,这是一种非常有效的技术。

于 2013-08-13T18:50:22.947 回答