3

私の目標は、MSIL をネイティブ X86 コードに変換することです。アセンブリにまだ .net フレームワークをインストールする必要があることに問題はありません。元のアセンブリがまだ必要なので、NGENは私が望むものではありません。

私はilasmに出くわしましたが、これが私が欲しいものなのか疑問に思っています。これは純粋なアセンブリコードを作成しますか?

モノ (アプリが使用する主要な機能の一部をサポートしていない) や .net リンカーなどの他のプロジェクトを見てきましたが、.net フレームワークで単一の EXE を作成するだけで、探しているものではありません。

これまでのところ、どんな研究も思いつきました...あなたはそれをすることはできません. MSILアセンブリをロードするときにJITがそれを行う理由は本当にわかりません。私にはこれが欲しいという独自の理由があるので、私の質問はこれに帰着すると思います。

  1. とにかく私が投稿したリンクは役に立ちますか?

  2. MSIL を x86 アセンブリに変換できるものはありますか?

4

3 に答える 3

3

IL を暗号化し、実行時にのみアンパックする特別なブートローダーでパックすることにより、IL を非表示にするさまざまなサードパーティ コード保護パッケージが利用可能です。コードの逆アセンブルが心配な場合は、これがオプションになる可能性がありますが、これらのサードパーティ パッケージのほとんどは既にクラックされています (残念ながら、ある程度避けられません)。 .

IL を「pre-jitting」することに関連する主な課題の 1 つは、ネイティブ コードに固定アドレス参照を含めることになることです。これらは、CLR で実行するためにネイティブ コードが読み込まれるときに、「再ベース化」する必要があります。これは、コンパイルされるロジック以上のものが必要であることを意味します。また、コードのロード時に固定参照をリベースするために必要なすべての参照コンテキスト情報も必要です。コードをキャッシュするだけではありません。

于 2012-10-19T00:19:11.147 に答える
2

ほとんどの場合と同様に、最初の質問は、方法ではなく理由です。ネイティブコードを自分で生成したい場合は、特定の目標を念頭に置いていると思います(また、なぜx86なのか、なぜx64でもないのか)。これはJITコンパイラの仕事です。必要な場合にのみ特定のプラットフォームで最適化された命令セットをコンパイルし、後で実行します。

CLRがどのように機能し、JITがどのように機能するかを理解するために私が推奨できる最良の情報源は、ECMA-335仕様に基づくCLRの実装であるSSCLIを調べることです。

于 2012-10-18T18:09:13.947 に答える
0

C# を使わないことを考えたことはありますか? C# コンパイラの出力が MSIL であることを考えると、それが必要でない場合は、別のプラットフォームで開発することは理にかなっています。

または、NGEN が必要な操作を実行しているように聞こえますが、全体を実行可能ファイルに入れることを処理していません。結果のNGENイメージを分析して、それを達成するために何をする必要があるかを判断できます(NGEN化されたイメージはドキュメントごとのPEファイルであることに注意してください)

画像が保存されている場所に関する情報を含むNGEN のリンクは次のとおりC:\windows\assembly\NativeImages_CLR_BitですC:\windows\assembly\NativeImages_v2.0.50727_86。.NET 3.0 と 3.5 は両方とも 2.0 の一部であることに注意してください。

于 2012-10-18T23:59:47.247 に答える