問題タブ [cil]
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.
stack - 誰かがMSILのこれらの数行を説明できますか?
誰かがMSILのこれらの数行を説明できますか?値を評価スタックからローカル変数に移動し、すぐに戻して返すだけなのはなぜですか?
次のMSILコードは、単一の引数(文字列)をロードし、boolを返すメソッドを呼び出してから、そのbool値を返します。私が理解していないのは、なぜstloc.0を呼び出してメソッドの戻り値をローカル変数に格納し、次にラベル付けされた次の行に明示的な無条件の制御転送を実行して(不要のようです)、値を元に戻すだけです。返す前の評価スタック。
なぜこれが行われるのかについての私の最も良い推測は、評価スタックの値が実際にブール値であることを確認してから返す前に、ある種の型チェックを実行することです。しかし、私は次の行への明示的なジャンプについてはわかりません。つまり、とにかくそこに行きませんか?メソッドのC#ソースコードは1行だけで、メソッドの結果を返します。
jvm - Java と ASP.NET
JVM と MSIL の違いを教えてください。
.net - .Net 2.0 以降、.Net IL はまったく変更されましたか?
私は、.Net 3.5 がコンパイル先の IL に変更を加えていないという主張を聞いたことがあります。私が知っているすべてのコンパイラ機能が導入されたことを考えると、実際には、それらはすべて同じ古い IL で実装できるように見えますが、この主張を裏付ける公式ソースは見つかりません。本当ですか?
assemblies - CIL とネイティブ コードのリンク
C++/CLI では、同じファイル内でネイティブ コードとマネージド コードをリンクするサンプル コードを次に示します。
他の言語をマネージド コードにリンクする実験を試みています。利用可能なツールを使用して他の言語をコンパイルしたり、ilasm を使用して CIL をコンパイルしたりできます。Ilasm は最終的な .dll/.exe を直接生成しますが、他のコンパイラから .obj ファイルをリンクする方法がわかりません。
c# - .NET 2.0/C# のジェネリック メソッドのメタデータの署名形式は何ですか?
たとえばout
、C# でキーワードを使用するメソッドのパラメーターは、アンパサンドが前に付いたメタデータ シグネチャに表示され&
ます。汎用メソッドの署名を作成しようとしていますが、これを理解するためにメタデータ API を使用したくありません。確かにどこかに文書化されていますか?
Socket クラスの BeginReceiveFrom の意味の例を次に示します。
c# - 動的イベントハンドラーで「this」を参照します
'myClass'クラスでは、Reflection.Emitを使用して、myClassクラス'メンバーの1つのイベントハンドラーを動的に記述しています。
私はこれを成功させました。
ここで、myClassクラスのインスタンスメソッドの1つを呼び出すようにイベントハンドラーを変更します。
ただし、Reflection.Emitを使用して「this」への参照をMSILスタックにプッシュする方法を理解できません。イベントハンドラー内では、Ldarg_0は「this」への参照ではなく、イベントハンドラーの最初のパラメーターです。
インスタンスメソッドを呼び出すことができるように、スタック上の「this」への参照をプッシュする方法を知っている人はいますか?たとえば、これは私がc#コードを次のように見せたいものです。
ありがとう!
.net - メソッドに .entrypoint ディレクティブを追加する方法 (動的アセンブリ)
System.Reflection.Emit のクラスを使用して単純なアプリケーションを作成したいと考えています。Enrypoint ディレクティブを Main メソッドに追加するにはどうすればよいですか?
AssemblyBuilder.SetEntryPoint はこれを達成していないようです。
c# - イテレータブロックはILでtry-faultを生成します
イテレータブロックを試した後、生成されたILコードが期待したものではないことに気付きました。try-finallyブロックの代わりに、私が見たことがないtry-faultブロックが生成されます。コンパイラが「手書き」C#でfaultキーワードを使用することを許可していないことに気づきました。
2つの間に違いはありますか?
C#コード:
MSILコード:
興味深い行は、障害ハンドラーが指定されているILの最後の行です。通常のtry-finallyブロックでは、finallyハンドラーが指定されています。
c# - ILGenerator へのオブジェクト リテラルのフィード
obj を評価スタックにきれいにプッシュすることは明らかに不可能ですが、移植性などを損なう可能性のある醜いハックに対してオープンです。ModuleBuilder.DefineInitializedData を使用すると、System.Byte[] を .sdata に格納できます。何か案は?
編集: 生成されたメソッドは、新しいアセンブリの一部として発行されています。
c# - 「操作によってランタイムが不安定になる可能性がある」および値型のDynamicMethod
私は次のILを一般化しようとしています(Reflectorから):
ただし、DynamicMethodを使用してこのILを再現しようとすると、次のようになります。
「操作によってランタイムが不安定になる可能性がある」という例外が発生します。ILは私と同じように見えますが、何かアイデアはありますか?ValueSourceは値型であるため、ここでrefパラメーターを実行しています。
編集
ValueSourceタイプは次のとおりです。