問題タブ [il]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - コンパイルされた式から生成された IL コードを表示する
式ツリーで Compile() を呼び出したときに生成された IL コードを表示できますか? 次の非常に単純な例を考えてみましょう。
これで、式ツリーは の最後の行にあることを実行しMain
ます。アプリケーションをコンパイルし、Reflector で開きます。p.Value = 5;
割り当てを行うIL コードを確認できます。しかし、式ツリーは実行時に作成およびコンパイルされました。コンパイルの結果の IL コードを表示することはできますか?
.net - 厳密に名前が付けられたアセンブリに IL を挿入しますか?
アセンブリが厳密に型指定されていて、ソース コードがないライブラリに問題があります。Reflector のおかげでバグの原因を突き止めましたが、残念ながらクラスが封印されているため、単にサブクラス化することはできません。大量の内部メソッドを参照しているため、ソース全体の単純なコピー/貼り付けも失敗します。
最後の手段として、IL をアセンブリに挿入できると思いました (これは比較的単純なことで|| something.GetType() == typeof(System.DBNull)
、if ステートメントに を追加するだけですが、厳密な名前付けが問題になると思いますか?
これを回避する方法はありますか、それとも私がベンダーに翻弄されているのでしょうか?
c# - アセンブリからMSILを取得しますか?
タイプ情報をロードせずに、AssemblyオブジェクトからMSILを便利に抽出することは可能ですか?
CodeCompileUnit
文字列を受け取り、非常に高速な計算を行うためのメソッドを動的に作成しようとする単純なアプリケーションがありますが、を使用してC#コード文字列をコンパイルし、コンパイルされたアセンブリからMSILを抽出することで、アセンブリ/型情報の読み込みを避けたいです。 MSILをDynamicMethodに出力します。これが可能であれば。
c# - 実行時にメソッドにILを注入する方法
タイトルは多かれ少なかれそれをすべて言います。この記事に基づいて、私はこれを思いついた:
これは実際に機能します...時々-.-
たとえば、これは機能します。
ただし、これはそうではありません(SEHException)。関数を定義する順序を変更するだけでした。
記事のコードに関しては...私はそれをまったく動作させることができませんでした。
アイデア/代替案はありますか?
.net - .Netの文字列パラメータとrefを使用するメソッド
面白い例がありますが、説明してもらえますか?私が理解しているように、文字列は参照クラスですが、変更することはできません。したがって、文字列を変更しようとすると、フレームワークは新しいヒープアドレスへの新しい参照を作成します。Bu私は、メソッドBearからのこの新しいアドレスが外部のメインコールスタックに渡されない理由を理解していません。
したがって、sssには「ウォッカが好き」という値がありますが、なぜですか?
PSまたはこの方法
例からのPPSいくつかのILコード
inheritance - Mono.Cecil: 他のアセンブリから基本クラスのメソッドを呼び出す
基本クラスのメソッドへの MethodReference を名前で取得するにはどうすればよいですか?
私はもう試した
基本クラスを含む dll を assemblyresolver に追加すると、メソッドが返されます。しかし、使用して呼び出しを追加すると
(baseMethod は、解決された TypeDefinition からメソッドを foreach することによって検出されました) 結果の IL は読み取り不能であり、Reflector がフリーズして終了することさえあります。
今いくつかの IL:
タイプでプライベート メソッドを呼び出す場合:
基本型で保護されたメソッドを呼び出す場合:
では、Mono.Cecil を使用して後者を作成するにはどうすればよいでしょうか。
c# - 逆アセンブルされた .NET 関数
.NET 関数を逆アセンブルすると、それらはすべて似たようなパターンで始まることに気付きます。この最初のコードは何をしますか?
このコードは、関数が実行するはずの実際のコードの前に表示されます。ある種のパラメーター数の検証ですか?
機能1
機能2
func3
[編集] では、これは正しい説明ですか?
また?
c# - デリゲートはクラスより軽量ですか?
C#で作成した実行ファイルを逆アセンブルしてみましたが、結論が出ませんでした。私が知りたいのは、CLR c# のデリゲートが本当に特別なエンティティなのか、それとも単なるコンパイラ シュガーなのかということです。
私は C# にコンパイルする言語を実装しているので、これを尋ねます。無名関数をデリゲートとしてではなく、クラスとしてコンパイルする方がはるかに興味深いでしょう。しかし、後で後悔するデザインは使用したくありません。メモリが重くなる可能性があるためです (Java の PermGen が私の質問の基になると思います。CLR にはそのようなものがないことはわかっていますが)。
ありがとうございました!
- 編集
もう少し明確にするために、次の違いがあるかどうか (および違いがあるかどうか) を知りたいです。
そして、例えば
- 編集
次のような大きな違いがあると思います。
と
しかし、私はどこかで、構文Func<int, int, int> add = Program.add;
はFunc<int, int, int> add = delegate(int a, int b) { return Program.add; };
. しかし、それが本当に正しいかどうかはわかりません。また、C# コンパイラはこれらすべてのインスタンスを既にキャッシュしているため、一度だけ構築されることも確認できました。ただし、コンパイラでも同じことができます。
c# - Microsoft ILGenerator の出力ファイルはどこにありますか?
Microsoft ILGenerator とその Emit メンバーを使用しました。それによって生成された出力ilファイルがどこにあるのか知りたいです。