Dekompilátor

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 19. února 2022; ověření vyžaduje 1 úpravu .

Dekompilátor  je program, který překládá spustitelný modul (získaný na výstupu kompilátoru ) do ekvivalentního zdrojového kódu v programovacím jazyce na vysoké úrovni .

Dekompilace  je proces opětovného vytvoření zdrojového kódu dekompilátorem.

Dekompilace se používá zejména v reverzním inženýrství programů.

Úspěch dekompilace závisí na množství informací prezentovaných v dekompilovaném kódu. Bytový kód používaný většinou virtuálních strojů (jako je Java Virtual Machine nebo .NET Framework Common Language Runtime ) často obsahuje rozsáhlá metadata, díky nimž je dekompilace docela proveditelná, zatímco nativní kód je štíhlejší a obtížněji se dekompiluje. Zejména volání podprogramů nebo funkcí s nepřímým adresováním volání (z hlediska programovacích jazyků na vysoké úrovni volání přes ukazatele na funkce/procedury) se zdají být obtížně čitelná.

Pokud je známo, v jakém jazyce byl dekompilovaný program napsán, pak se nejprve rozeberou a analyzují runtime knihovny (RTL - runtime library) kompilátoru z tohoto jazyka , protože v podstatě se kompilace programu redukuje na volání pomocí různé parametry procedur z těchto knihoven. Mnoho kompilátorů vám navíc umožňuje vidět, v jaký kód sestavení se příkazy programu po kompilaci promění. Tyto konstrukce se stávají šablonami pro dekompilátor, takže proces dekompilace je v jistém smyslu podobný rozpoznání konečné množiny takových šablon ve strojovém kódu. Nejjednodušeji lze rozpoznat volání procedur a návraty z nich. Slouží jako hranice pro obnovení výpisů postupu.

Některé kompilátory a post-kompilační nástroje zatemňují kód , aby bylo obtížnější jej dekompilovat.

Dekompilátory lze považovat za složené z několika fází, z nichž každá přispívá k určitým aspektům celkového procesu dekompilace.

Příklady dekompilátoru

Viz také