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++
Odpowiedz
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.
Jako sidenote, .NET 'assembly' i' asembler' są całkowicie oddzielnymi rzeczami :-) – xanatos
IMO, najważniejszą różnicą jest to, że CIL jest nadal zorientowana obiektowo, podczas gdy język maszynowy nie jest. –
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
To po prostu. Kod C# zawiera niezbędne informacje dotyczące kodu źródłowego odtwarzania, ale C/C++ go nie ma.
Zobacz także odpowiedzi na [to pytanie] (http://reverseengineering.stackexchange.com/q/311/60). –