Update – 17.11.2011: Dodano powiązane posty z innych blogów.
Dawno dawno temu było…Reflector i długo długo nic (de facto na początku był jest ildasm ale nie o nim dziś).
Na szczęście pewnego lutowego dnia pojawiła się informacja, że już niedługo nie będzie on dostępny za darmo i się zaczęło. Flame’y, groźby i krzyki :). Stało się też sporo dobrego bo o to na rynku pojawiły się alternatywy. Ilspy, dotPeek oraz JustDecompile. Przyjrzyjmy się im z bliska i zobaczmy co mają do zaoferowania.
Reflector – umarł król…
Reflector to zdecydowanie najlepszy, z racji swojej “dorosłości” decompiler na rynku. Rozwijany na początku przez Lutz’a Roeder’a a następnie przejęty przez firmę Red-Gate. Posiadacze darmowej wersji muszą się zadowolić wydaniem 6.0 bez widoków na aktualizacje, co sprawi, że, w przypadku rozwoju .NET, Reflector straci na używalności a zastąpią go alternatywy. Płatna wersja narzędzia jest i (miejmy nadzieję) będzie rozwijana dalej.
Siła Reflector’a nie tkwi (narzędzie jest super to fakt) w nim samym, ale w ogromie dodatków, które powstały przez cały ten czas kiedy miał monopol wśród tego typu narzędzi. Jakiekolwiek czynności, które chcielibyśmy zrobić na podglądanym kodzie można szybko wykonać bo na na 99% istnieje dodatek który nam w tym pomoże. Np. modyfikacja kodu? Jest Reflexil.
Reflector podczas pracy |
Obsługuje możliwość wyświetlania kodu zarówno w C#, VB.NET oraz F# (w zasadzie pokazuje jeszcze Delphi, MC++ oraz Oxygene, ale nie wiem czy ktoś z tego w ogóle korzysta?). Można także pokazać ILa jeśli ktoś ma taką potrzebę.
ILSpy – dobra alternatywa…
ilSpy – Pełni OpenSource’owe narzędzie oparte na bibliotece Mono.Cecil. Dzięki dostępności kodu możemy je sobie rozwijać według potrzeb. Startuje długo jakby był napisany w Java (joke :]), ale potem oferuje pełnię swoich możliwości. Umożliwia wyświetlenie kodu w C# jak też IL (maniacy jak ja, którzy czytają gołego ILa to docenią).
ILSpy |
Do plusów można zaliczyć przejście do dokumentacji MSDN po kliknięciu w daną instrukcję ILa, jak również przeskakiwanie pomiędzy etykietami w tymże widoku. Zdecydowanie ułatwia nawigację w kodzie i pozwala łatwiej śledzić flow programu.
dotPeek
dotPeek – Narzędzie ze stajni panów z JetBrains. Wspiera jedynie C#. Jako duży plus należy zaliczyć tu możliwość otwierania podglądu jako zakładki. Bardzo ułatwia to nawigowanie się podczas przeglądania kodu. Posiada multum (jak na tego typu narzędzia) opcji i konfiguracji, co na początku utrudnia rozeznanie się w nim.
dotPeek |
Umożliwia drukowanie wygenerowanego kodu, co choć na pierwszy rzut oka może wydawać się niepotrzebną opcją, czasem się przydaje. Umożliwia dość rozbudowaną nawigację po kodzie znaną z innego narzędzia JetBrains’a – R#. Możemy zatem przejść do konkretnego typu czy pliku, przenawigować się po właściwościach czy metodach danej klasy za pomocą ALT+strzałka w dół, a nawet zobaczyć hierarchię typów jeśli zajdzie taka potrzeba.
Hierarchia typów w dotPeeku |
Jako jedyne narzędzie, nie jest oparte na bibliotece Mono.Cecil (czy to plus czy minus).
JustDecompile
JustDecompile – Tutaj Telerik zwietrzył okazję i wypuścił swoje narzędzie do podglądu. Jako jedyny posiada instalator – co trochę denerwuje. Zwykle przy tego typu narzędziach chcemy je ściągnąć i zacząć używać bez konieczności instalacji. Na szczęście da się go wrzucić na usb’a i uruchamiać z niego. Inaczej potrzeba instalacji wykluczałaby to narzędzie praktycznie. na pierwszy rzut oka narzędzie to wyróżnia się całkiem przyjemnym UI ewidentnie napisanym w WPFie.
JustDecompile |
Z dostępnych języków docelowych mamy: IL, C# oraz VB. Edytor podobnie jak IlSpy umożliwia, po kliknięciu w daną instrukcję, przekierowanie na strony MSDN do dokumentacji danego OpCode’u. Dodatkowo każdy typ jest “klikalny” i możemy nawigować po kodzie klikając na odpowiednie typy parametrów czy też zawracanych wartości. Narzędzie to jako jedyne (albo u innych tego nie znalazłem) umożliwia konfigurację kolorów, tak więc możemy sobie wynikowy kod dostosować do naszych ulubionych kolorów.
CodeReflect
CodeReflect – mało znane (chyba) narzędzie od firmy DevExtras. Wyglądem dość znacznie przypomina .NET Reflector’a, co można uznać za plus jeśli ktoś był przyzwyczajony do tego układu i działania.
CodeReflect |
Podobnie jak powyżej umożliwia przechodzenie po dll’kach dzięki kliknięciom w odpowiednią nazwę typu. Dzięki temu możemy w dość prosty sposób nawigować po kodzie i przechodzić od jednej metody do drugiej za pomocą myszki. W IL’u brakuje jednak możliwości przejścia do dokumentacji w MSDN aby dowiedzieć się czegoś więcej o konkretnej instrukcji. Brakuje podstawowych opcji konfiguracji, ale gdyby nie było pod ręką nic innego to oczywiście narzędzie zda egzamin i pokaże nam co siedzi pod spodem naszego kodu…
… niech żyje król?
Czy jest jednogłośny zwycięzca tegoż rankingu? Nie wiem – ja nadal mam zainstalowanego Reflectora ale coraz częściej sięgam po ilSpy’a (tak w ogóle to mam wszystkie zainstalowane :]). Każdy chyba powinien sam wybrać, ale warto wiedzieć o ich mocnych i słabych stronach aby wybór był świadomy i celowy. Pomijając Reflector’a, pozostałe narzędzia są w fazie Beta lub Pre-Release więc jeszcze sporo może się w nich zmienić. Oby na lepsze…
Powiązane wpisy
Narzędzia do analizy aplikacji .NET – Security News
Darmowe dekompilatory .NET – Grzegorz Trybulski
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl