問題タブ [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.
c# - メソッド名は EXE にコンパイルされますか?
Windows アプリ プロジェクトを EXE にコンパイルした後、クラス、メソッド、および変数名は MSIL に含まれますか?
- 難読化の場合- 名前が少なく、リバース エンジニアリングが難しくなります。
- そしてパフォーマンスのために-短い名前、より速いアクセス。
たとえば、メソッドが名前で呼び出される場合:
- 名前を短くして、名前付きルックアップのパフォーマンスを向上させます。
- 名前を暗号化して、逆コンパイルしにくくします。
cil - バイト配列からILを取得するためのAPI
MethodBodyクラスには、メソッドの本体を提供するGetILAsByteArrayメソッドがあります。このバイト配列をより理解しやすいIL命令に(リストなどに)変換することを探しています。このバイト配列を理解して変換する(または私のために行う)のに役立つリソース、オープンソースコード、またはAPIはありますか?
私はこれを見つけましたが、ジェネリックでは機能しません。私は、すべてのフレームワークバージョンでこれらのバイトを理解して変換するためのガイダンスをかなり探しています。
CLIドキュメントは、IL命令の学習にも役立ちますが、これらのバイトを意味のあるものにするためにCLIドキュメントを使用する方法がわかりません。
c# - C# で列挙型を使用して配列にインデックスを付ける
各エントリに定数でアクセスできる固定サイズの数値コレクションがたくさんあります。当然、これは配列と列挙型を指しているようです:
もちろん、これに関する問題は、列挙型を使用してキャストなしで配列にインデックスを付けることができないことです (ただし、コンパイルされた IL はプレーンな int を使用しています)。したがって、これをあちこちに書く必要があります:
キャストせずに同じ簡単な構文を使用する方法を見つけようとしましたが、まだ完全な解決策は見つかりませんでした。配列よりも約 320 倍遅いことがわかったので、辞書の使用は問題外のようです。また、列挙型をインデックスとして配列のジェネリック クラスを作成しようとしました。
または、列挙型を指定する 2 番目のジェネリック パラメーターを持つバリアントですらあります。これは私が望むものに非常に近いですが、問題は、特定されていない列挙型 (ジェネリック パラメーターまたはボックス化された型の列挙型) を int にキャストできないことです。代わりに、最初にオブジェクトへのキャストでボックス化し、次にキャストする必要があります。これは機能しますが、かなり遅いです。インデクサー用に生成された IL は次のようになっていることがわかりました。
ご覧のとおり、不要なボックスとアンボックスの説明があります。バイナリからそれらを取り除くと、コードは正常に機能し、純粋な配列アクセスよりも少し遅くなります。
この問題を簡単に克服する方法はありますか? それとももっと良い方法ですか?このようなインデクサー メソッドにカスタム属性のタグを付けて、コンパイル後にこれら 2 つの命令を削除することも可能だと思います。それに適したライブラリは何でしょうか?もしかしてモノ・セシル?
もちろん、列挙型を削除して、次のように定数を使用する可能性は常にあります。
配列に直接アクセスできるため、これが最速の方法かもしれません。
java - Java の仮想マシンと CLR
MSIL と Java バイトコードの違いと呼ばれる質問への一種のフォローアップとして? 、Java 仮想マシンの動作と。ネットフレームワーク共通言語ランタイム (CLR) は動作しますか?
また、。ネットフレームワークCLRは「仮想マシン」ですか、それとも仮想マシンの属性を持っていませんか?
c# - Visual Studio でコードを選択し、対応する MSIL を表示するツールはありますか?
最近、自分のプログラムの MSIL 出力を調べるために、常に ILDASM を実行していることに気付きました。
これを合理化するユーティリティはありますか? 理想的には、いくつかのソース コードを選択し、選択した C# コードを MSIL でコンパイル、逆アセンブル、および出力できるとよいでしょう。
そのようなことを知っている人はいますか?
properties - CIL (MSIL) のオブジェクト プロパティにどのようにアクセスしますか?
私はまったくの初心者です。スタックに文字列オブジェクトがあり、その中の文字数 (.Length プロパティ) を取得したいとします。内部に隠されているint32番号を取得するにはどうすればよいですか?
よろしくお願いします!
.net - プログラムによる MSIL インジェクション
次のようなバグのあるアプリケーションがあるとします。
アプリケーションはすでにコンパイルされ、実際にデプロイされています。誰かがバグを発見し、修正を要求しています。このアプリケーションを修正して再デプロイすることはできますが、私の制御の及ばない理由で非常に面倒です。代わりに、バグのパッチを書きたいだけです。
具体的には、問題のあるアセンブリ ソース ファイルに独自の MSIL を挿入したいと考えています。私はこれまでにこのようなことをしたことがなく、グーグルで調べても有益な情報は得られませんでした。上記のコードでこれを行う方法のサンプルを見ることができれば、非常に役立ちます:)
コンパイル済みの .NET アセンブリに独自の MSIL をプログラムで挿入するにはどうすればよいですか?
[編集して追加:] 質問者へ: ランタイムのホットスワップは必要ありません。アプリを閉じて、アセンブリを操作してから、プログラムを再起動しても問題ありません。
[もう一度編集:] 一般的なコンセンサスは、「アセンブリを操作することは、プログラムにパッチを適用するための悪い方法である」ということのようです。それが悪い考えなら、私はその道をたどりません。
MSIL インジェクションは他の目的にも役立つ可能性があるため、質問を開いたままにします:)
c# - MSILコードをスキャンして特定の関数呼び出しを見つけるにはどうすればよいですか?
私はSOAGUIフレームワークを構築する予定であり、サービスとクライアントモジュールからのサービス依存関係を自動検出したいと考えています。これまでのところ、クラスモジュールに配置された属性を使用して機能するこのようなコードがあります。
人々がマーカーを追加することを忘れず、実行時にnull参照を取得する可能性があるように、これらを自動的にスキャンする方法を考えています。コードでは、サービスは次のコマンドを介して登録およびフェッチされます。
これらの呼び出しと、渡される型(両方とも型パラメーターを取り、最初の呼び出しに対して暗黙的)を見つけたい...依存関係と構築を行うための残りのコードはすでに完了しています:)
c# - .NET での CIL 知識の利点
CIL を理解する利点は何ですか?
それを理解するにはアセンブリを知っている必要がありますか? これらのファイルのコードは似ています。
それについてもっと知るにはどうすればよいですか?Jon Skeet の C# の本のような本はありますか?