2

.net 実行可能ファイルを解析し、外部メソッドへの呼び出しのリストを生成する比較的小さなプログラムを作成する必要があります。たとえばSystem.Console.WriteLine、ファイル内で が呼び出された場合、ツールはSystem.Console.WriteLineどこかで呼び出されたものを出力する必要があります。実際の逆アセンブルを実装することはできません (頭脳と時間が限られている) 必要もありません (必要なのは呼び出しのリストだけです)。呼び出された関数の名前と呼び出しが発生したオフセットを書き込む、grep フレンドリーで perl フレンドリーな比較的短いソリューションが必要です

私がすでに試したこと:

  1. MSDN から仕様をダウンロードします。0x28これで、静的呼び出しがバイトコードに変換されることがわかりました。:) その後にメソッド記述子が続きますが、メソッド記述子が何を意味するのかを理解するには、おそらく仕様全体を読む必要があります。

  2. Reflector で単純な exe を開きます。Reflector は元のアプリケーションのコードを正確に再現しましたが、呼び出しのバイトコードを確認できません。

限られた時間と知識で、必要な限られた機能を実装することは可能ですか?

もしそうなら、私はそれを実装するために何を知っていますか? 「ダミー用の CIL アセンブリ」ガイドはありますか?

4

3 に答える 3

4

Ceci l プロジェクトは、あなたがやりたいことを正確に行うためのライブラリです。

于 2009-10-15T20:32:40.673 に答える
2

grep/perl に適したものが必要な場合は、ildasm を (コマンド ライン モードで、つまり /out または /text を使用して) 使用して、バイト コードをテキスト IL に逆アセンブルします。次に、grep、perl、または選択した言語を使用して、呼び出し命令を見つけることができます。(呼び出し命令がどのメソッドにあるかを特定するには、おそらく grep では十分ではありませんが、perl はできるはずです。)

于 2009-10-15T20:39:24.763 に答える
1

CommonCompilerインフラストラクチャも役立つかもしれません:http ://ccimetadata.codeplex.com/ 。

アセンブリを.ilファイルに分解し、それが探している場合はgrepを使用して解析するという、itowlsonの2番目の提案です。ILDasmはすべてのタイプの完全な名前空間を表示するため、それが自分のタイプであるか参照されているタイプであるかをかなり迅速に把握できるはずです。

于 2009-10-16T00:10:17.727 に答える