2

以下は、dotNetリフレクターが正しく分解されないまれなケースの例であることに注意してください。ほとんどの場合、これは完全に機能します。これが必ずしもリフレクターのバグであるとは限りません。問題のアセンブリの保護、難読化、または管理されていないコードの結果である可能性があります。

ドットネットリフレクターでSystem.Web.UI.WebControls.XmlHierarchicalEnumerableを分解しようとしています。ジェネリックはすべて台無しになっているようです。例:

// Nested Types
[CompilerGenerated]
private sealed class GetEnumerator>d__0 : IEnumerator<object>, 
    IEnumerator, IDisposable
{
    // Fields
    private int <>1__state;
    private object <>2__current;
    public XmlHierarchicalEnumerable <>4__this;
    public IEnumerator <>7__wrap2;
    public IDisposable <>7__wrap3;
    public XmlNode <node>5__1;

他のアセンブリでは、クラス名の代わりに小さな正方形(これらは通常「不明なシンボル」を表すことを知っています)を取得することがあります。例:

    dictionary1.Add("autopostbackonselect", 0x34);
    ᜀ.ᜌ = dictionary1;
}

if (ᜀ.ᜌ.TryGetValue(key, out num))
{
    switch (num)

何が得られますか?誰もが知っていますか?

4

4 に答える 4

4

最初の例では、これは完全に予期されたものです。これらのクラスは、ステートメントIEnumerable<T>を使用する際の実装に使用されます。実装によってインスタンス出力で呼び出されたyield returnときに、状態を保存し、新しい値を取得するクラスを生成します(これらは同じものであることに注意してください)。MoveNextIEnumerator<T>IEnumerable<T>.GetEnumerator

表示されているのは、CLR の観点からは完全に正当な命名構文であることに注意してください。ただし、C# の観点からは、合法ではありません。ただし、これらのクラスは内部的なものであり、(インターフェイスの実装を介してのみ) 直接アクセスする必要はないため、正当な C# 名である必要はありません。

2 つ目については、その動作は見たことがありません。アセンブリが難読化されている可能性がありますが、どのバージョンの .NET でも見たことはありません。アセンブリ (.NET フレームワークかどうか) を確認している .NET フレームワークのバージョンと、使用しているリフレクターのバージョンを明確にすると、役に立ちます。

于 2010-02-16T04:57:06.157 に答える
1

これは、難読化されたアセンブリを見たときに見たことがあります。このプロセスの間、変数名は人間の目には判読できないことがよくあり、その結果、未知の文字が生成されます。

于 2010-02-16T04:57:57.430 に答える
0

コンパイラによって自動生成されるものはかなりあります。自動プロパティ、匿名タイプ/メソッド、および列挙子ブロックに基づく列挙子。それらはすべて名前が必要であり、それは開発者による名前と衝突しないものでなければなりません。<> _はCLR用語では完全に有効な名前ですが、C#では自動生成されて<> _で名前が付けられたものの前に付けられないため、コンパイラーは開発者がすでに使用している名前を誤って選択することはありません。

于 2010-02-16T05:42:27.343 に答える
0

このアセンブリは難読化されている可能性があります。これらのリンクを確認できますhttp://cooprotector.com/ http://intelliside.com/

于 2010-02-16T05:10:51.743 に答える