問題タブ [ildasm]

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.

0 投票する
1 に答える
222 参照

.net - 異なる型は CIL で同じシグネチャを持ちます

次のように CIL で定義された 1 つのフィールドがあります。

これをアセンブリにコンパイルします。今、私はそれを次のように変更します:

両方とも、ILDASM が (16 進数で表示されている場合)両方のフィールドを次のように報告することができるようになったのはなぜですか?

このコードは、両方のフィールドをまったく同じように検索します (実際には、報告された署名と一致するように 2 番目のフィールドを作成しました)。署名は明らかに 2 番目のフィールドと一致しますが、最初のフィールドの署名は次のようになります06 20 0f 01 08。ここで何が欠けていますか?

編集:

C# はこのタイプのフィールドを生成できず、カスタム型修飾子でサポートされていないポインターおよび配列型に関する例外をスローするため、これによりシグネチャの不一致が明らかに解決されます。しかし、なぜ ILDASM が逆コンパイルできない無効な署名の作成を許可するのかという疑問が残ります。

編集#2:

ILASM が実際に正しい IL を作成しているようです。前回見逃した 16 進ダンプに違いがあります。

したがって、ILDASM 16 進ダンプには、間違ったメンバー署名を報告するバグがあります (ただし06、間違った署名がどこから来たのか疑問に思います)。

0 投票する
2 に答える
642 参照

.net - ildasm で System.Collections.Generic IL コードを表示するにはどこに行けばよいですか?

この質問に好奇心をそそられ、List.Clear() の実装を探しに行きました。私がそのように走っildasmたとき:System.Collections.dll

を見てSystem.Collections.Generic.List`1::Clear : void()、これが私が見つけたものです:

それは私が探しているものではありません。

一部の .NET dll は間接的なレベルであるため、フレームワークのさまざまなバージョンに向けることができることを認識しています。ここに当てはまる場合、実際のコードがどこにあるかをどのように把握できますか? または、何か他のことが起こっている場合はildasm、この種のタスクに使用する方法についてのヒントをいただければ幸いです。私はildasm自分のものを見るために使用することはできますが、フレームワーク コードを調べるために使用する経験はありません。

アップデート

ハンスのポインターを正しい方向に使用すると、次のようになりました。

これにより、 の Clear() メソッドについて次のことがわかりましたSystem.Collections.Generic.List`1::Clear : void()

そのため、 を見てSystem.Array::Clear()、次のことがわかりました。

これも行き止まりですが、少なくともこの種の情報をどこで入手すればよいかはわかりました。

0 投票する
0 に答える
312 参照

.net-assembly - iladsm+ilasm を使用すると、別のアセンブリが生成されます

既にコンパイルされたアセンブリの属性を変更したい (将来、ソースを 2 回コンパイルできるようになるかもしれませんが、現時点ではできません...)。この回答ildasmは、 を使用し、テキスト ファイル内のプロパティを変更してから、 を使用して再アセンブルすることを示唆していますilasmIldasm および Ilasm を使用してサード パーティ ライブラリに署名するというブログ投稿では、同様の問題に対する同様の解決策が提案されています。

[編集]以下を使用してそれを行いました:

それは機能しましたが、結果のアセンブリにはいくつかのものが欠けているようです.4608バイトではなく4096バイトです.DLL内のいくつかのテキストブロックを比較したところ、次のものが欠けているようです:

  • AssemblyCultureAttribute- 元の assemblyinfo.cs には がありますが[assembly: AssemblyCulture("")]、ildasm はそれを無視していると思います。
  • AssemblyVersionAttribute-私は ILSpyを使用して AssemblyVersion を見ているので、これは奇妙です。
  • System.Diagnostics, DebuggableAttribute, DebuggingModes- ILSpy は欠落している[assembly: Debuggable]属性を表示します。.asm ファイルには次のようにも書かれています。

-

私の質問: これらのものが欠けていると、どのような影響がありますか?