問題タブ [intermediate-language]
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.
.net - ilアセンブラのvs2008構文の強調表示
Visual Studio 2008に中間言語の優れた構文強調表示を実行させる方法はありますか?
compiler-construction - 複合命令とは何ですか?
中間コードの章でクラスコンパイラの設計をしています。ネットで調べていたら、こんな一文を見つけました。
ソースプログラムに複合命令を含めることができる場合は、再帰的な解釈が必要です。
Googleで複合命令が何であるかを見つけることができません。
c# - MSIL コードへの C# コンパイル
Microsoft C# コンパイラ (CSC.exe) には、中間言語ファイルを出力するオプションがありますか? -S スイッチがGCCで行うようなものですか?
c# - C#でメソッドを動的に呼び出すためのオプション
このようなメソッドを呼び出す方法に関連する質問をたくさん見てきました。私が見つけていないのは、リフレクションまたはcsharpの他の手段を介してメソッドを呼び出す方法のさまざまなオプションのリストです。
誰かがcsharpでメソッドを動的に呼び出すさまざまな方法を詳細に説明できますか?反射からILの放出、およびその間のその他の方法まで。リソースの面で最も高価なものから最も安価なものまで、さまざまな方法をすべて知りたいと思います。
.net - .NET用のILコンパイラ?
これはばかげた質問かもしれませんが、ILモードのReflectorによって示されるものと同様のILコード用のコンパイラはありますか?
c# - 参照を保存しない場合の.maxstackが大きくなりますか?
私はいかなる種類のILマスターでもありません。私が書いたコードをコンパイラーがどのように作成するかを確認するために、時々それを使用します。私が疑問に思っていることの1つは、なぜ.maxstack
それが時々得る価値を得るのかということです。次のクラスについて考えてみます。
次に、私はこのようなプログラムを持っています:
上記のコードは、次のIL(リリースコンパイル済み)を提供します。
ここで、プログラムコードを次のように変更すると、次のようになります。
...次のILコードになります。
2番目のILコードは短く、予想どおりでした。しかし、私が少し不思議に思うのは、なぜ.maxstack
私は2番目のコードサンプルでは8であるのに、最初のコードサンプルでは1であるのかということです。2番目のコードが、システムが操作のためにより大きなスタックを予約することにつながるのはなぜですか?
.net - 変数比較
次の C# スニペット:
この MSIL を生成します。
なぜ2つのceq
呼び出しがあるのですか?
ありがとう
c# - ildasmおよび動的exeファイル
ILのプロパティを変更して、わずかに異なる実行可能ファイルを作成できるアプリケーションを作成しようとしています。たとえば、クライアントAはアプリを実行し、WinFormラベルのラベルは「クライアントA:」と表示されます。クライアントBがアプリを実行し、ラベルは「クライアントB」と言います。簡単私は設定ファイルまたはリソースファイルを使用することを知っていますが、それはこのプロジェクトのオプションではありません。メインプログラムは、ユーザーが入力したいくつかのフォームフィールドに基づいて動的に.exeファイルを生成できる必要があります。
私の解決策は、動的にするために必要なすべての要素を含むスタンドアロンの実行可能ファイルを作成することでした。次に、ildasmを使用してILを生成し、このILを使用して、動的にしたい要素の代わりにタグを使用できると考えました。ユーザーが正規表現などを使用してフォームに入力した後、実行時にこれらのタグを置き換えることができます。問題は、ILDASMによって生成されたILファイルをexeとして保存し、実行しようとした場合です。コンソールを起動するだけで何もしません。
私はこれを間違った方法で行っていますか?動的な.exeは非常に単純なものであり、ildasmを使用したILのリバースエンジニアリングが最も迅速な方法であるため、Reflectionについて詳しく調べたくありませんでした。
あなたの考えとポインタは大歓迎です。トニー
c# - Mono.Cecilは、AppDomainにすでにロードされているコードを変更できますか?
実行時に特定のクラスに動作を追加したいと思います。Reflection.Emitを使用して実行時にサブクラス化する方法を知っていますが、それだけでは不十分です。一部の外部構成によっては、タイプTのメソッドにオペコードを挿入して、それを継承するすべてのクラスが自動的にこの動作を取得するようにする必要があります。(.NETプロファイリングAPIを使用できません)。
このようなことはMono.Cecilで行うことができますか?
ロードされたアセンブリのコードを変更できない場合は、アセンブリをロードする前に変更を加えてから、変更したアセンブリをメモリにロードできれば問題ありませんが、アセンブリのロードを制御する方法がわかりません。
c# - 実際のキャストはCLRレベルでどのように機能しますか?
アップキャストまたはダウンキャストを行うとき、舞台裏で実際に何が起こりますか?私は次のように何かをするときの考えを持っていました:
最後の行のキャストは、目的がコンパイラーに安全であることを伝えるためだけのものであり、何も悪いことはしていません。そのため、実際にはキャストコードはコード自体に埋め込まれないという考えがありました。私は間違っていたようです:
なぜCLRは次のようなものが必要なのcastclass string
ですか?
ダウンキャストには2つの可能な実装があります。
- が必要です
castclass something
。を実行するコード行に到達するとcastclass
、CLRはキャストを作成しようとします。しかし、キャストクラスの文字列行を省略してコードを実行しようとするとどうなるでしょうか。 - は必要ありません
castclass
。すべての参照型は同様の内部構造を持っているため、Formインスタンスで文字列を使用しようとすると、誤った使用法の例外がスローされます(Formが文字列またはそのサブタイプではないことを検出するため)。
また、一言で言えば、C#4.0の次の統計は正しいですか?
それは本当に新しい参照を作成しますか?同じ参照であり、異なるタイプの変数にのみ格納されると思いました。
ありがとう