問題タブ [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.
disassembly - DLL バイナリ ファイルから IL コードを取得する
私はILをちりばめています。
私は RedGate の .Net Reflector ツールが好きです (最初は Lutz)。私はすでに Serge Lidin の本と Ecma-335 の本を持っています。これらは、IL で作業する必要があるすべてのようです (もちろん、ILAsm と ILDasm を除く)。
私の仕事は、アセンブリ バイナリ ファイルを解析し、IL コードを取得することです。アセンブリがバイナリ ファイルであることは明らかです。したがって、これは単なるバイトのチェーンです。私が望むことを行うには、アセンブリ構造を知る必要があります。どのヘッダーが存在するか、それらが占めるバイト数、バイトごとに読み取るためのバイト単位のオフセットなどです。
Lidin の本にはそれが説明されていますが、私には 100% 明確ではありません。誰かが DLL をバイト ストリームとして解析しようとしましたか? メタデータと IL コードをバイト ストリームとして保持するには、IL バイト ストリームを解析して IL ソースを取得しますか? ここではリフレクションを使用したくありません。むしろ、バイナリファイルだけで作業したいと思います。
モノセシルも同じですか?あったとしても、やり方が知りたいです。
はい、私は .NET Reflector のような別のホイールを作成しようとしており、その作成方法を知りたいです。誰かが言ったように、「世界でルッツだけが作り方を知っているとは限らない」.
ところで、ISDasm はどのように機能しますか? .netでコーディングされましたか?
考え、リソース、例はありますか?
ありがとうございました。
c# - C#スイッチのケースを繰り返す
スイッチのすべてのケースをプログラムで取得することは可能ですか? おそらくILによるものですが、どうすればよいかわかりません...
実際、私のグローバルな問題は次のとおりです。プロパティ名として文字列を使用した siwtch ケースを取得しました。この方法は非常に重要であり、回帰は許されません。これを壊すリファクタリングはしたくないので、すべてのケース文字列が実際にオブジェクトの実際のプロパティであることをテストするメソッドが必要です。(NB : デフォルト値は何かを返すため、リファクタリングされた無効な値に対して exception をスローすることはできません)。
.net - MSILでコーディングすることは可能ですか?
これができるかどうか知りたいだけです。それがいくつかの重要なパフォーマンス上の利点を詰め込まないのであれば、私はそれをするつもりはありません。私はWebおよびゲームの開発者ですが、通常、C#でゲームを開発することはありません。
c# - MSIL の質問 (基本)
次の C# コードがあるとしましょう。
イル:
さて、私の理解では、ldarg.# はメソッドに提供された引数をスタックに置くので、それらを操作できますか? しかし、メソッドが 1 つの引数しかとらないのに、なぜ ldarg.1 と ldarg.0 を呼び出すのでしょうか?
c# - オブジェクトをILの特定のクラスにキャストしますか?
私が作成しているDynamicMethodで「操作によりランタイムが不安定になる可能性がある」という理由を発見しました。簡単に修正できましたが、一見単純な質問が残りました。
- 「Object」型のオブジェクト参照を特定の型にキャストして、オブジェクト参照でその型からメソッドを呼び出せるようにするにはどうすればよいですか?
以下はサンプルプログラムです。これを実行すると、メソッドのコンパイル時に「操作によりランタイムが不安定になる可能性があります」という例外でクラッシュします。
この問題は、宣言されている変数の型を のTestClass
代わりに型に変更するだけで修正されますObject
が、コード内の適切な型への参照をキャストする方法を知りたいです。
コードでは、アスタリスクで行をマークしました。メソッド呼び出しが通過するように、代わりにObject
スタック上の参照を参照にするその時点で、コードから何を発行できますか?TestClass
問題を引き起こすのはメソッド呼び出しであることを知っていることに注意してください。行を完全にコメントアウトすると、変数の型は関係ありません。メソッドはコンパイルされ、正常に実行されます。
これがコードです。
.net - .NET CLR と CIL に関するおすすめの書籍を教えてください。
特定の .NET 言語とは対照的に、CLR、 .NET Framework、およびCILの動作に関する優れた本を知っていますか?
static - .net アセンブリの静的解析
他のパブリック メソッドから直接または間接的に呼び出されないすべてのプライベート メソッドを見つける必要がある C# プロジェクトがあります。
さらに、パブリック メソッドから呼び出されるプライベート メソッドごとに、それがどのパブリック メソッドであるかを知る必要があります。次に、そのメソッドがクラスのクライアントから本当に呼び出されているかどうかを判断し、そうでない場合は削除できます。
以前は、Reflector のベースである Lutz Rorder のコードを使用していました。これには、IL コードを分析するオプションがあり、その上にオブジェクト モデルがありました。私は今このコードを見つけることができません。
なにか提案を?多分そのルッツ・ローダーコードへのポイントですか?
ザール
.net - IL / CLR / DLRリファレンス?
内部でILとCLR/DLRについてもっと知りたいです。私の友人は「InsideMicrosoft.NETIL Assembler」という本を勧めましたが、2002年に出版されて以来、現時点ではかなり時代遅れになっているのではないかと心配しています。
.NET言語を理解している人が、ILとCLRの内部動作について詳しく知るために使用できる、最新の本やWebサイトを持っている人はいますか?
compiler-construction - EXE ファイル内のセクションとメモリの整列
Mosa IL コンパイラを使用して作成するときに指定する必要がある EXE ファイル内のセクションとメモリのアライメントは何ですか?
ありがとう。
c# - ConstructorInfo.Invoke の DynamicMethod、何を考慮する必要がありますか?
私の質問はこれです:
ConstructorInfo.Invoke呼び出しに対応するDynamicMethodオブジェクトを構築する場合、すべての (またはほとんどの) 型の引数に対処するには、どの型の IL を実装する必要がありますか?呼び出しを行う前に、引数の数が渡されますか?
バックグラウンド
私は IoC コンテナーの 3 回目の反復を行っており、現在、使用されている大量の時間を簡単に削減できる領域があるかどうかを把握するために、いくつかのプロファイリングを行っています。
私が気づいたことの 1 つは、具象型に解決するときに、最終的にConstructorInfo.Invokeを使用してコンストラクターが呼び出され、解決した引数の配列を渡すことになるということです。
私が気づいたのは、invoke メソッドにはかなりのオーバーヘッドがあるということです。これのほとんどは、私が行っているのと同じチェックの別の実装にすぎないのではないかと考えています。
たとえば、コードに一致するコンストラクターがあるため、渡した定義済みのパラメーター名、型、および値に一致するコンストラクターを見つけるために、この特定の呼び出し呼び出しができるはずのもので終わらない方法はありません。適切な数の引数、適切な順序、適切な型、および適切な値に対処するためです。
解決メソッドへの 100 万回の呼び出しを含むプロファイリング セッションを実行し、それを Invoke 呼び出しを模倣するDynamicMethod実装に置き換えると、プロファイリングのタイミングは次のようになりました。
- ConstructorInfo.Invoke: 1973ms
- ダイナミックメソッド: 93ms
これは、このプロファイリング アプリケーションの合計実行時間の約 20% を占めています。つまり、ConstructorInfo.Invoke 呼び出しを同じことを行う DynamicMethod に置き換えることで、基本的なファクトリ スコープのサービスを処理するときに 20% のランタイムを削減できます (つまり、すべての解決呼び出しはコンストラクター呼び出しで終了します)。
これはかなり重要なことであり、このコンテキストでコンストラクター用の安定した DynamicMethod ジェネレーターを構築するのにどれだけの作業が必要かを詳しく調べる必要があると思います。
したがって、動的メソッドはオブジェクト配列を受け取り、構築されたオブジェクトを返します。問題の ConstructorInfo オブジェクトは既にわかっています。
したがって、動的メソッドは次の IL で構成されるように見えます。
他に考慮すべきことはありますか?
アプリケーションを「アクセス制限モード」で実行している場合、動的メソッドの作成はおそらく利用できないことを認識していることに注意してください(脳がこれらの用語をあきらめない場合があります)が、その場合、それを簡単に検出して、オーバーヘッドとすべてを使用して、以前と同じように元のコンストラクターを呼び出します。