なぜで簡単ンジニアリング、逆アセンブル.純ILコードについて教えてください。

StackOverflow https://stackoverflow.com/questions/671407

質問

なぜで簡単ンジニアリング、逆アセンブル.純IL-コードをソースコードと比べ、decompilingネイティブのx86ナンス?(リフレクタ出かなり良いソースコードのほとんどの時間がdecompilingの出力をC++コンパイラはほとんど不可能である。)

でIL多く含まれるメタデータはもらえますか?ものでIL高抽象化によx86指示?った研究から以下の二つの置する記事が、もし回答が私の質問です。

役に立ちましたか?

解決

として名前が上がっていた最も重要なビットです。

  • あなたの言葉を借りれがありますメタデータの利用可能。私は非常に良いのではないかと思いから放射されるC/C++コンパイラがないか 名前等の情報が含まれています。ていたようにdecompilerについて知っていうのは、特定のスタックフレームは、例えばどのx86関するお知らどのようにスタックは 使用 ;ILステムについての内容をスタック 代表 少なくとも、タイプの意味ります。)
  • まとまっ既に述べたように、ILはより高いレベルの抽象化によx86.x86は骨なしモモ肉を焼肉用方法や機能の呼び出しは、イベント、または財産等ILは、すべての情報をもとよばれるものです。
  • 通常、CおよびC++コンパイラ最適化もくよう)のC#コンパイラです。これはC#のコンパイラはほとんどの最適化が行われ、後にJIT.一方でそれはそうではC#のコンパイラ ない うおおみねおくがけみち)を最適化があり、様々なビットの情報をJITのC#コンパイラです。最適化されたコードがより難しくなっている逆コンパイルで更について自然な表現のソースコード。
  • ILことができるように設計されてJITコンパイルされた;x86ことができるように設計されて実行されネイティブ(チ経由でのマイクロコードとします。の情報は、JITコンパイラのニーズに似ているdecompilerいので、decompilerはやIL.一方でこれが本当にただの訂正のポイント。

他のヒント

あるものの逆ilかなり簡単です。

  • タイプ情報です。これは大規模なものでした。るx86アセンブラには、推定の種類の変数に基づかなければならないものを使用します。

  • 構造。情報の構造によりアプリケーションの利用にil disassemblies.この結タイプの情報を与量のデータです。まで働かなりの高レベルでのこの点の対比でx86アセンブラ).ネイティブアセンブラには、解の構造のレイアウトというありがたくもないということもあり、構造物)に基づかなければならないのデータを使用します。なしかし、その活動は、さらに多くの時間がかかります。

  • 名です。知の物の名前できます。

これらのものを合わせることで多くのデータの実行形式にまとめたものです。Ilは基本的に作業レベルをより近くにはコンパイラのネイティブコードとなってしまいます。高レベルのbytecode作ではより容易に逆行分析は、一般的に言えば.

C#およびILは、ほぼ1対1にマッピングします。マッピングの近さ(およびC#コンパイラでオプティマイザの欠如)(これは。小さいので、いくつかの新しいC#3.0の機能を持つです)物事はそう「リバーシブル」になります。

ブライアンの正しい答えを拡張する

あなたはすべてのILを簡単にdecompilableだと思うならば、私は非自明なF#のプログラムを書き込み、そのコードをコンパイルしようとすることをお勧めします。 F#は、コード変換の多くを行い、従って、実際の放出されたILと元のコードベースから非常に悪いマッピングを有しています。私見では、逆コンパイルF#コードを見て、それがC#またはVB.Netのためであるよりも、元のプログラムを取り戻すためにはるかに困難です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top