2010-05-07 72 views
7

对于我的小型业余爱好项目,我需要在运行时从C++程序发出机器代码。我有基址0xDEADBEEF和想写的东西是这样的:是否有一种运行时C++汇编程序库?

Assembler a((void*)0xDEADBEEF); 
a.Emit() << 
    Push(Reg::Eax) << 
    Push(Reg::Ebx) << 
    Jmp(0xFEFEFEFE); 

内联汇编不是我的选择,因为生成的机器代码是依赖于程序的状态。

有没有人知道现有的图书馆是否有这样做?如果不是的话,从头开始开发一个开源代码是一个好主意吗? (我的意思是,有人会使用这个库,如果它存在?)

回答

3

您可以使用Nicolas Capen的softwire。由于他现在在Transgaming的一个名为SoftAsm的类似产品上工作,所以它不再支持。它仍然有点做你想要的。

编辑2014年6月: - 看起来上面的sourceforge链接已被删除,但它似乎可用LGPL许可here

+0

这个答案已经过时了。至少我在那个页面上找不到任何下载 – 2012-06-07 16:00:40

3

这可能是一个矫枉过正的,因为它支持很多平台,有它自己的中间语言,优化等,但http://llvm.org/似乎是一个神尝试。

+1

这是一个很酷的项目,但它太重量级了,并且(据我了解)不能很好地控制生成的指令。不管怎么说,还是要谢谢你。 – Anton 2010-05-07 08:08:01

7

结账Asmjit。这似乎是你正在寻找的东西。