2013-08-08 12 views
8

Ho letto molti post sulla decompilazione (anche se nessuna esperienza) ma non ho capito perché tutti in generale hanno menzionato che è più facile decompilare C# rispetto a C++ eseguibile. Qualcuno potrebbe spiegare la differenza?Decompila C# vs C++

+0

Vedere anche le risposte a [questa domanda] (http://reverseengineering.stackexchange.com/q/311/60). –

risposta

10

C# viene compilato in CIL, non direttamente in un codice nativo come un normale compilatore C++.

produce un .NET assembly, che contiene molto più di meta dati di un C++ eseguibile fa (attraverso il incorporato manifest) - questo è metadati sui tipi contenuti nel montaggio, che cosa fa riferimento e di più, rendendo molto più facile per decompilare di un eseguibile "normale".

Come indicato nei commenti, CIL è di per sé un linguaggio di livello superiore rispetto all'assemblaggio ed è un linguaggio orientato agli oggetti, che semplifica la comprensione e la decompilazione.

+2

Come sidenote, .NET 'assembly' e' assembly language' sono completamente separati :-) – xanatos

+1

IMO, la differenza più importante è che CIL è ancora orientato agli oggetti mentre il linguaggio macchina non lo è. –

+1

Inoltre: praticamente l'intera struttura delle classi C# può essere riflessa, il che rende la decompilazione molto più semplice perché devi solo decompilare il CIL nella funzione corpi – x4rf41

0

È semplicemente. Il codice C# contiene le informazioni necessarie per il ripristino del codice sorgente, ma C/C++ non ce l'ha.