4

Delphi で x86 コードの生成を簡素化するためのフレームワークまたはライブラリを見つけた人はいますか? 私が探しているのはアセンブラではなく、低レベルのビットとバイトを超えるコード生成プロセスを抽象化するフレームワークです。ケースバイケースでロジックをハードコードするのではなく、既存のライブラリやフレームワークの上に構築するのが理想的です。

最初の使用法は、Delphi が SOAP リクエストをディスパッチする方法と同様に、実行時に小さなコード スタブを生成することです。何かが見つからない場合は、おそらく自分で転がしますが、車輪を再発明するのは嫌いです. ライセンスが商用およびオープンソースプロジェクトでの翻訳と使用を許可する場合、「C」の何かが興味深いかもしれません。

アップデート:

ここにもう少しコンテキストがあります。私が目指しているのは、永続化フレームワークの一部としてのインターフェイスやクラスのランタイム実装です。明確な Delphi フレーバーを除いて、Java アノテーション駆動型永続性 (JPA/EJB3) のようなもの。呼び出しターゲットは、一般化された持続性モデルを実装するモジュラー/拡張可能なフレームワークです。非常に動的で流動的な方法で、RTTI と注釈/属性モデル (InstantObjects メタデータに似たもの) に基づいてメソッド呼び出しをディスパッチしてフックする必要があります。

ありがとう、デビッド

4

5 に答える 5

5

私はあなたの質問についてもっと考えました。動的メソッド呼び出しを実行しようとしているのかどうかはわかりません。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;

メソッドのシグネチャがわからない場合は、{$ METHODINFO ON}を使用してクラスを記述できます。次に、ObjAuto.pasの機能を使用してメソッドを呼び出します。

DelphiLiveのRTTIプレゼンテーションコードに、その方法の例があります。

于 2009-05-29T05:03:10.100 に答える
2

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

于 2009-05-29T06:16:16.320 に答える
2

非常に投機的な答え:LLVMのようなものですか?デルファイから使用できるかどうかはわかりませんが、dllを作成できるはずです。

于 2009-05-29T07:25:37.737 に答える
0

最初に質問を投稿したときに探していたことの多くを実行する興味深いフレームワークを見つけました。私の目的には少し遅れましたが、他の誰かがこれを役に立つと思うかもしれません:

DAsmJit asmjit プロジェクトの Delphi ポート

于 2011-10-31T03:20:02.230 に答える
0

論理的には、単に Delphi コードを生成し、cmdline コンパイラで DLL/BPL にコンパイルしてから、それを dyn ロードするだけですか?

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

Delphi バージョン (または Free Pascal) が混在していても、パッケージまたは HLL レベルでは機能せず、基本的な手続き型 DLL レベルでのみ機能します。

于 2009-05-29T09:52:28.673 に答える