Ein Dekompilierer (englisch Decompiler oder auch Reverse Compiler, Reverse Engineering Compiler) ist ein Computerprogramm, das aus Maschinen- oder Objektcode für den Menschen wieder lesbaren Quelltext in einer Hochsprache erzeugt. Er versucht, den Vorgang des Kompilierens umzukehren.

Ein Dekompilierer ist nicht zu verwechseln mit einem Disassembler, da die Assemblersprache nur eine alternative Darstellungsform des Maschinencodes ist.

Funktionsweise

Bearbeiten

Da es für die Kompilierung meist keine Umkehrfunktion gibt, ist eine Dekompilierung eine Reverse-Engineering-Technik. Sie wird zum erneuten nachträglichen Erzeugen von Quellcode benutzt, der auf einem ausführbaren Programm basiert. Der gewonnene Quellcode hat in gewissen Grenzen Ähnlichkeit mit der Ursprungsfassung des Quellcodes, der zur Erzeugung des ausführbaren Programms benutzt wurde. Wenn in diesem ausführbaren Programm zusätzlich noch Debuginformationen gespeichert sind, dann können oft sogar die vom ursprünglichen Autor verwendeten Variablennamen, Funktionsnamen und Module wieder zurückgewonnen werden. Verlorengegangen sind üblicherweise Kommentare sowie die ursprüngliche Formatierung, da beide Informationen typischerweise nicht mehr im Kompilat enthalten sind.

Die Dekompilierung von Bytecode, wie z. B. Java- und .Net-Framework-Programmen, ist in der Regel unkomplizierter als die Dekompilierung von Maschinencode, da diese Systeme relativ viele Informationen des Originalquellcodes mit in die Objektdatei übernehmen, vergleichbar mit der Debug-Version eines C- oder C++-Programms. Insbesondere die Typinformation und die Namen von öffentlichen Bezeichnern bleiben erhalten. Der dekompilierte Programmcode ist jedoch nur funktional identisch mit der ursprünglichen Quelldatei.

Einschränkungen

Bearbeiten

Wurde das Programm mit einer Optimierungsoption des Compilers übersetzt und sind keine Debuginformationen enthalten, oder es wurde gar mit einem Obfuscator verschleiert, dann kann der zurückgewonnene Quelltext in Einzelfällen bis zur Unbenutzbarkeit entstellt sein.

Aufgrund der genannten Einschränkungen eignet sich Dekompilierung normalerweise nicht, um verlorengegangene Quelltexte zu restaurieren. Diese sollten ohnehin immer in vielfachen Sicherungen vorhanden sein. Unter normalen Umständen wird ein Programmierer selten einen Decompiler einsetzen. Bei sehr alter Software kommt es jedoch hin und wieder vor, dass die Ursprungsquellen verloren wurden oder sich auf Datenträgern befinden, für die keine passenden Lesegeräte mehr verfügbar sind. In den Anfangszeiten der elektronischen Datenverarbeitung war es außerdem üblich, kleine Fehler durch patchen der Objektdateien zu beheben. Diese Fälle sind neben dem Rückentwickeln fremder Software die einzigen Anwendungsfälle, für die Decompiler zum Einsatz kommen.

Rechtliches

Bearbeiten

Kommerzielle Softwareanbieter weisen in ihren Lizenzen oft darauf hin, dass das Dekompilieren ihrer Produkte verboten sei (sei es auch nur zu Studienzwecken oder um die Software für den Eigengebrauch zu verändern).

Allerdings ist es im Recht Deutschlands nach § 69e UrhG unter bestimmten Bedingungen erlaubt, ein Programm zu dekompilieren, soweit dies notwendig ist, um die „Interoperabilität“ mit einem unabhängig vom ursprünglichen Programm geschaffenen Computerprogramm zu erhalten. Lizenzvereinbarungen, die dem widersprechen, sind nichtig.

Siehe auch

Bearbeiten
Bearbeiten
  • http://www.program-transformation.org/Transform/DeCompilation - Das DeCompilation Wiki diskutiert verschiedene Aspekte der Dekompilierung: Geschichte, Forschung, Mustersuche, die generelle Herangehensweise, Java-Decompiler (und warum diese so viel besser als Binary-Decompiler funktionieren) usw.
  • Nicolas Harrand, César Soto-Valero, Martin Monperrus, Benoit, Baudry: The Strengths and Behavioral Quirks of Java Bytecode Decompilers. In: IEEE (Hrsg.): 19th IEEE International Working Conference on Source Code Analysis and Manipulation. 2019, ISBN 978-1-7281-4938-7, doi:10.1109/SCAM.2019.00019 (englisch, researchgate.net [PDF; abgerufen am 18. November 2020]).

📚 Artikel Terkait di Wikipedia

Spiel mir das Lied vom Tod

Registry Listing | Film Registry. In: National Film Preservation Board | Programs at the Library of Congress. Library of Congress, abgerufen am 7. September

Taj Mahal

Supplementum of Persian passages planned for release by the Aga Khan Program 1989. The Aga Khan Program for Islamic Architecture, Harvard University and Massachusetts

Rasterung von Linien

2007 im Internet Archive; PDF, 400 kB]) Robert F. Sproull: Using program transformations to derive line-drawing algorithms. ACM Transactions on Graphics

Glasgow Haskell Compiler

Conference (HOPL-III) Simon Peyton Jones: Compiling Haskell by program transformation: a report from the trenches (1996) GHC Survey (Memento vom 8. Juni

NATO

engere Bindung mit der Aufnahme der Ukraine in das Enhanced Opportunities Program erklärt, womit dem Land Beteiligungen an NATO-Manövern und Kooperationsprojekten

Cycloheximid

Unterdrückung eukaryotischer Kontaminanten Selektion resistenter Zellen bei Transformations- und Klonierungsexperimenten in Eukaryoten (Pilze) kontrollierte Hemmung

Tagetes

Resources Information Network (GRIN), USDA, ARS, National Genetic Resources Program. National Germplasm Resources Laboratory, Beltsville, Maryland. Datenblatt

Russisch-Ukrainischer Krieg

der Ukraine und markierte nach der Methodik des Uppsala Conflict Data Programs das Überschreiten der Trennlinie zwischen Frieden und bewaffnetem Konflikt