2013-08-08 12 views
8

私は逆コンパイルについて多くの記事を読んだことがありますが(経験はありませんが)、C#をC++よりもコンパイルしやすいと一般に言われている理由は分かりませんでした。誰もその違いを説明できますか?Decompile C#vs C++

+0

[この質問](http://reverseengineering.stackexchange.com/q/311/60)の回答も参照してください。 –

答えて

10

C#は通常はC++コンパイラのようにネイティブコードに直接変換されるのではなく、CILにコンパイルされます。

これはC++実行可能ファイルよりもはるかに多くのメタデータを含んでいます(組み込みのmanifestを介して) - これは、アセンブリに含まれる型に関するメタデータ、参照先などのため、逆コンパイルがはるかに簡単です。 「通常の」実行可能ファイルよりも

コメントに記載されているように、CIL自体はアセンブリ言語よりも上位の言語であり、オブジェクト指向言語であり、正しく理解して正しく逆コンパイルすることができます。

+2

サイドローブとして、.NETの 'assembly'と' assembly language'は全く別のものです:-) – xanatos

+1

IMO、最も重要な相違点は、CILはオブジェクト指向であり、機械語はそうではないということです。 –

+1

また、C#クラスの構造全体が反映されているので、関数本体のCILを逆コンパイルする必要があるため、逆コンパイルがはるかに簡単になります – x4rf41

0

これは単純です。 C#コードにはソースコードの復元に必要な情報がありますが、C/C++にはそれがありません。