2009-05-29 14 views
4

x86コードの生成を簡略化するためにDelphiのフレームワークまたはライブラリを使用する人は誰ですか?私はアセンブラを探しているのではなく、むしろ低レベルのビットとバイト以上のコード生成プロセスを抽象化するフレームワークを探しています。理想的には、ケースバイケースでロジックをハードコードするのではなく、既存のライブラリやフレームワークの上に構築したいと考えています。デルファイのx86コードジェネレータフレーム

初期の使用方法は、DelphiがSOAPリクエストをディスパッチする方法と同様に、実行時に小さなコードスタブを生成することです。もし私が何かを見つけることができなければ、私は自分自身を転がすだろうが、私はその輪を再構築することを嫌う。ライセンスが商用およびオープンソースプロジェクトでの翻訳と使用を許可すれば、「C」の何かが面白いかもしれません。

アップデート:私は永続化フレームワークの一部として、インタフェースおよび/またはクラスのあるランタイム実装に向かって働いていますか:ここで

は、いくつかのより多くのコンテキストです。はっきりとDelphiの味を除いて、Javaアノテーション駆動の永続性(JPA/EJB3)のようなものです。呼び出しターゲットは、一般化された永続性モデルを実装するモジュラー/拡張可能なフレームワークです。 RTTIとアノテーション/アトリビュートモデル(InstantObjectsメタデータに類似したもの)に基づいたメソッド呼び出しを、非常に動的で流動的な方法でディスパッチし、フックする必要があります。

おかげで、 デビッド

+0

デルファイのデルファイポートは、SOAPリクエストをディスパッチするコード生成を使用していません。これは{$ METHODINFO}とObjAuto.pasで見つかったRTTI情報を使って行われました。私はあなたのintrested場合は、どのように動作するのサンプルアプリケーションがあります。 –

+0

技術的には正しいですが、呼び出しロジックはRTTIに基づいてコールをディスパッチするために必要なスタックフレームとパラメータをセットアップします。これには、アセンブラで低レベルの作業が必要です。私はこのプロセスを抽象化し、ちょっと複雑なサンクのようなもののための短いコードシーケンスを生成できるようにしたい。 –

答えて

2

PaxCompilerの機能によれば、スタンドアロンの実行可能ファイルを作成できます。

+0

私は古いバージョンのPaxCompilerを追加しました。そのネイティブコード生成機能は面白く聞こえるし、遊ぶべきもののリストにあります。おそらく、オープンソースライセンスの観点からはあまり適していません。 –

5

より多くの私はあなたの質問について考えています。 Dynamic Method Invocationだけをしようとしているかどうかはわかりません。あなたがx86コードの生成について質問しても。 これを行ういくつかの技術があります。

問題のメソッドの署名がわかっている場合は、 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; 

あなたがメソッドを呼び出すためにObjAuto.pasで機能を使用すると、{$ METHODINFO ON} を持つクラスを書くことができますメソッドのシグネチャがわからない場合。

私はその方法について、私のRTTI Presentation codeからDelphiLiveの例を持っています。

2

非常に敏感な回答: 何かのようなLLVM?私はそれがデルファイから使用できるかどうかわからないが、あなたはdllのそれを作成することができるはずです。

+0

はい、このようなものですが、おそらくデルファイ固有のものであり、可能である必要はありません。理想的には、サポートされているDelphi呼び出し規約(おそらくRTTIとの統合)を理解し、基本的なコード生成(もちろんアセンブリに必要な知識)を行うことができます。 –

+1

可能であることを確認します。 –

0

論理的には、単にdelphiコードを生成し、cmdlineコンパイラでDLL/BPLにコンパイルしてから、その1つをロードしますか?

残念ながら、Delphi Explorerにはcmdlineコンパイラは付属していません。また、メインバイナリもDelphi Explorer(または少なくともバイナリ互換性がある場合は少なくともD2006)にある必要があります

Delphiのバージョン(またはFree Pascal)は、パッケージまたはHLLレベルでは動作しません。基本プロシージャDLLレベルでのみ使用できます。

+0

こんにちはマルコ - 私は本当にもっとダイナミックなものを求めています。私はDelphiでインラインアセンブラをコーディングすることはできますが、必要となるすべての順列をすぐに推測することはできません。 –

0

最初に質問を投稿したときに私が探していたものの多くを行う興味深いフレームワークが見つかりました。少し私の目的のために遅れて、しかし、他の誰かがこの便利かもしれないと思った:

DAsmJitasmjit project

+0

古いポートよりも悪いです。新しいポートを探しています。 – user3655788