2

ILAsm ファイルの変更に基づいた難読化プログラムにまだ取り組んでいます。(参照。難読化すべきではない C# メソッド名はどれですか? )

ILAsm コードを見ると、.property ステートメントは何にも (少なくともプログラムの実行には) 使用されていないという印象を受けます。Visual Studio のメタデータを提供するためだけに存在すると考えているのは正しいですか? その場合、ILAsm コードが Visual Studio で使用されることのない製品モジュールを生成するためにのみ使用される場合、単純にそれらを削除しても問題ありませんか?

4

1 に答える 1

4

何かがプロパティとして宣言されているという事実は、プログラムの実行には影響しません。『 Inside Microsoft .NET IL Assembler』という本がプロパティに関する章の導入部で述べているように、JIT コンパイラと実行エンジンはプロパティをまったく認識せず、プロパティの概念を参照する IL 命令はありません。

メタデータのコンシューマーは Visual Studio だけではないことに注意してください。ストリップ.propertyして再アセンブルすると、ゲッター メソッドとセッター メソッドが得られますが、明らかにプロパティではなくなります。これが問題になる最も明白な例: オブジェクトのインスタンスが、リフレクションを使用してクラスの各プロパティを呼び出す別のメソッドに渡された場合はどうなるでしょうか? 提案された難読化方法の結果として、プロパティが見つからず、実行時の動作が変更されました。

もちろん、リフレクションやシリアライゼーションなどのシナリオは、前の質問で説明したように、難読化ツールでよくある落とし穴です。だから、私が言っているのは問題があるということですが、他のスレッドで議論されているものと同様の一連のシナリオ、特に実行時にメタデータが消費されているかシリアライゼーションが実行されているシナリオでは問題があります。

上記の本の最新版は別の名前です: Expert .NET 2.0 IL Assembler ; 参考になるかもしれません。 .NET 共通言語ランタイム用にコンパイルすることも価値がある場合があります。

于 2011-04-23T06:21:16.453 に答える