Ta gruba programów nosi nazwę disasemblerów. Kiedyś, gdy tworzyło się programy głównie w asemblerze, były one bardzo popularne. Stosowało się nawet pewne triki, aby utrudnić ciekawskim dekompilację programu. Gdy używasz disasemblera, to musisz wziąć pod uwagę, że on tworzy po swojemu całą symbolikę. Skoki czy wywołania podprogramów nie będą się już nazywały tak ładnie i czytelnie np. start, irq_handler itp., ale nazwie je jakoś tam po swojemu - najczęściej literka i kolejna liczba. Analizowanie takiego programu, zwłaszcza jeśli masz przekopać parę kB, to mordęga. Potrzeba czasu i emulatora, żeby patrzeć jak program działa i poprawiać go po swojemu. A jeśli do tego program jest napisany w języku wysokiego poziomu, który zawsze doda pewien nadmiarowy kod... Naprawdę trzeba na to dużo czasu i wysiłku. Ale da się

.
Niestety, nie ma idealnych disasemblerów. W przeszłości używałem nawet takich, które rzekomo analizowały kod wyodrębniając albo nieczynne fragmenty, albo wspomniane "sztuczki" utrudniające disasemblację, ale to i tak była bardzo żmudna praca. Często wielokrotnie łatwiej było napisać własny program, niż analizować cudzy. Niestety, nie podpowiem ci niczego gotowego, bo w erze emulatorów, symulatorów i tym podobnych narzędzi, tamte narzędzia nie mają już racji bytu.
Moim zdaniem AVR Studio jest dobrym wyborem, ale w połączeniu z jakimś emulatorem sprzętowym. Pozwoli ci ono na uruchomienie programu krok po kroku i obejrzenie jak działa. Pozwoli wreszcie na ręczną edycję kodu programu, dopisanie komentarzy i "ludzkie" nazwanie etykiet. Niestety, zależnie od wielkości kodu wynikowego, twoja praca może trochę POTRWAĆ.