用于Delphi的x86代码生成器框架

时间:2009-05-29 04:47:16

标签: delphi code-generation x86 intel assembly

有没有人遇到过Delphi的框架或库来简化x86代码的生成?我不是在寻找汇编程序,而是在低级别位和字节之上抽象代码生成过程的框架。理想情况下,我希望建立在现有库或框架之上,而不是根据具体情况对逻辑进行硬编码。

最初的用法是在运行时生成小代码存根,类似于Delphi调度SOAP请求的方式。如果我找不到东西,我可能会自己动手,但我不想重新发明轮子。如果许可证允许在商业和开源项目中进行翻译和使用,那么“C”中的某些内容可能会让我感兴趣。

更新

以下是更多上下文:我正在努力的是作为持久性框架的一部分的接口和/或类的运行时实现。类似于Java注释驱动的持久性(JPA / EJB3),除了具有明显的Delphi风格。调用目标是一个模块化/可扩展的框架,它将实现一个通用的持久性模型。我需要以非常动态和流畅的方式调度和挂钩基于RTTI的方法调用和注释/属性模型(类似于InstantObjects元数据)。

谢谢, 大卫

5 个答案:

答案 0 :(得分:5)

我对你的问题的思考越多。我不确定你是否只想做动态方法调用。即使您询问有关生成x86代码的问题。 有几种技术可以做到这一点。

如果您知道相关方法的签名,可以使用a轻松完成 TMethod并设置方法地址和数据。

procedure TForm8.Button1Click(Sender: TObject);
begin
  Showmessage('Hello1');
end;

procedure TForm8.Button2Click(Sender: TObject);
var
 M : TMethod;
begin
  M.Code := MethodAddress('Button1Click');
  M.Data := Self;
  TNotifyEvent(M)(self);
end;

如果您不知道方法签名,可以使用{$ METHODINFO ON}编写类 然后使用ObjAuto.pas中的功能来调用方法。

我在DelphiLive的RTTI Presentation code中有一个关于如何做到这一点的例子。

答案 1 :(得分:2)

根据PaxCompiler的功能,您可以创建独立的可执行文件。

答案 2 :(得分:2)

非常投机的答案: 像LLVM这样的东西?我不确定它是否可以在delphi中使用,但你应该可以用它来创建dll。

答案 3 :(得分:0)

逻辑上你只需生成delphi代码,通过cmdline编译器编译成DLL / BPL然后dyn加载那个?

不幸的是,Delphi Explorer没有附带cmdline编译器。你的主二进制文件也必须在Delphi Explorer中(或者至少在D2006中,如果它足够二进制兼容)

Delphi版本(或Free Pascal)的任何组合都可能无法在包或HLL级别上运行,只能在基本的过程DLL级别上运行。

答案 4 :(得分:0)

我刚刚发现了一个有趣的框架,它在我最初发布问题时完成了我所寻找的大部分工作。对于我的目的来说有点晚了,但是认为其他人可能觉得这很有用:

DAsmJit asmjit project

的Delphi端口