Delphi 的 x86 代碼生成器框架 (x86 code generator framework for Delphi)


問題描述

Delphi 的 x86 代碼生成器框架 (x86 code generator framework for Delphi)

Has anyone come across a framework or library for Delphi to simplify the generation of x86 code? I am not looking for an assembler, but rather a framework that abstracts the code generation process above the low level bits and bytes. Ideally I would like to build on top of an existing library or framework rather than hardcode the logic on a case by case basis.

The initial usage will be to generate small code stubs at runtime similar to the way Delphi dispatches SOAP requests. If I cannot find something I will likely roll my own, but I would hate to reinvent the wheel. Something in "C" might me interesting provided the license will permit translation and use in commercial and open source projects.

Update:

Here is some more context: What I am working toward is runtime implementation of interfaces and/or classes as part of a persistence framework. Something sort of like Java annotation driven persistence (JPA/EJB3) except with a distinctly Delphi flavor. The invocation target is a modular/extensible framework which will implement a generalized persistence model. I need to dispatch and hook method calls based on RTTI and an annotation/attribute model (something similar to InstantObjects metadata) in a very dynamic and fluid manner.

Thanks, David

‑‑‑‑‑

參考解法

方法 1:

The more I have thought about your question.  I am not sure if all you trying to just do Dynamic Method Invocation.   Even though your asking about generating x86 code. There are several techiniques that do this.

If you know the signature of the method in question you can do it easily by using a TMethod and setting the method address and data.   

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;

If you don't know the method signature you can write the class with {$METHODINFO ON} Then use the functionality in ObjAuto.pas to invoke the method.

I have an example in my RTTI Presentation code from DelphiLive on how to do that.

方法 2:

According to features of PaxCompiler, you can create stand alone executable files. 

方法 3:

Very spectulative answer: Something like LLVM?  I am not sure if it can be used from delphi or not, but you should be able to create dll's wth it.

方法 4:

Logically you would simply generate delphi code, compile to a DLL/BPL by cmdline compiler and then dyn load that one?

Unfortunately Delphi Explorer doesn't come with the cmdline compiler though. And your main binary would also have to be in Delphi Explorer (or at least in D2006 if that is binary compatible enough)

Any mix of Delphi versions (or Free Pascal) will probably not work on the package or HLL level, only at basic procedural DLL level.

方法 5:

I just found an interesting framework that does much of what I was looking for when I originally posted the question. A little late for my purposes, but thought someone else might find this useful:

DAsmJit a Delphi port of the asmjit project

(by David TaylorRobert LoveErvinSSeanXMarco van de VoortDavid Taylor)

參考文件

  1. x86 code generator framework for Delphi (CC BY‑SA 3.0/4.0)

#Code-Generation #intel #assembly #delphi #x86






相關問題

關於編譯器中代碼生成的參考(中間表示、SSA、指令選擇、寄存器分配等)? (References on code generation in a compiler (intermediate representations, SSA, instruction selection, register allocation, etc.)?)

如何在每個新模塊中自動注入輔助類? (How to automatically inject helper classes in each new module?)

適用於Visual Studio的Python代碼生成器? (Python code generator for Visual Studio?)

為什么生成執行操作的 Java 代碼比“解釋器循環”運行得更慢? (Why does Java code generated to perform an operation run more slowly than an "interpreter loop"?)

ORM 映射的代碼生成工具 (code generation tool for ORM mapping)

Delphi 的 x86 代碼生成器框架 (x86 code generator framework for Delphi)

適用於 xpand 的 Actionscript 3 代碼美化器(MWE2 工作流程) (Actionscript 3 code beautifier for xpand (MWE2 Workflow))

Maven 中的代碼生成 (Code generation in Maven)

在自定義生成器中生成嵌套路由 (Generating nested routes in a custom generator)

是否有類似 JET(Java Emitter Templates)但沒有 Eclipse 依賴項的東西? (Is there something like JET (Java Emitter Templates) but without Eclipse-dependencies?)

Python函數,它返回自己的帶有參數的簽名 (Python function which returns its own signature with parameters)

為什麼 protobuf 更喜歡代碼生成器而不是運行時動態加載 (why protobuf prefer code-generator other than dynamic loading at runtime)







留言討論