2013-08-08 20 views
8

Przeczytałem wiele postów dotyczących dekompilacji (choć bez doświadczenia), ale nie rozumiem, dlaczego wszyscy z nich ogólnie wspomnieli, że łatwiej jest dekompilować plik wykonywalny C# niż C++. Czy ktoś mógłby wyjaśnić różnicę?Decompile C# vs C++

+0

Zobacz także odpowiedzi na [to pytanie] (http://reverseengineering.stackexchange.com/q/311/60). –

Odpowiedz

10

C# kompiluje się do CIL, a nie bezpośrednio do natywnego kodu takiego jak kompilator C++.

produkuje .NET assembly, która zawiera dużo więcej meta danych niż C++ wykonywalny robi (za pośrednictwem wbudowanego manifest) - jest to metadane dotyczące typów zawartych w zespole, co to referencje i więcej, co sprawia, że ​​znacznie łatwiej dekompilować niż "normalny" plik wykonywalny.

Jak zauważono w komentarzach, CIL jako takie jest językiem wyższego poziomu niż montaż i jest językiem zorientowanym obiektowo, co ułatwia zrozumienie i dekompilację poprawnie.

+2

Jako sidenote, .NET 'assembly' i' asembler' są całkowicie oddzielnymi rzeczami :-) – xanatos

+1

IMO, najważniejszą różnicą jest to, że CIL jest nadal zorientowana obiektowo, podczas gdy język maszynowy nie jest. –

+1

Ponadto: prawie cała struktura klas C# może zostać odzwierciedlona, ​​co powoduje, że dekompilacja jest znacznie łatwiejsza, ponieważ wystarczy dekompilować CIL w ciałach funkcyjnych – x4rf41

0

To po prostu. Kod C# zawiera niezbędne informacje dotyczące kodu źródłowego odtwarzania, ale C/C++ go nie ma.