7

对于我的小型爱好项目,我需要在运行时从 C++ 程序发出机器代码。我有基地址 0xDEADBEEF 并想写这样的东西:

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

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

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

4

3 回答 3

8

查看Asmjit。这似乎是您正在寻找的东西。

于 2010-07-20T17:56:06.820 回答
3

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

于 2010-05-07T07:59:19.467 回答
3

您可以使用 Nicolas Capen 的softwire。它真的不再受支持,因为他现在在 Transgaming 开发一个名为 SoftAsm 的类似产品。它仍然可以满足您的需求。

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

于 2010-05-07T08:23:35.133 回答