Bytecode - LinkFang.de





Bytecode


Der Bytecode ist in der Informatik eine Sammlung von Befehlen für eine virtuelle Maschine. Bei Kompilierung eines Quelltextes mancher Programmiersprachen oder Umgebungen – wie beispielsweise Java – wird nicht direkt Maschinencode, sondern ein Zwischencode, der Bytecode, erstellt. Dieser Code ist in der Regel unabhängig von realer Hardware und im Vergleich zum Quelltext oft relativ kompakt.

Technische Details

Die virtuelle Maschine – im Fall von Java die Java Virtual Machine (JVM) – führt dann dieses Zwischenergebnis aus, indem sie zur Laufzeit den Bytecode in Maschinensprache für den jeweiligen Prozessor übersetzt. Dabei muss die Virtual Machine für jede Rechnerplattform, auf der das Kompilat laufen soll, vorhanden sein.

Java ist nur eines der prominenteren Beispiele für eine Bytecode-basierte Programmiersprache. Andere Sprachen, die Bytecodes verwenden, sind P-Code, Lua, die .NET-Sprachen C# und Visual Basic, Python, Ruby, Perl, PHP, Prolog, Limbo, Gambas sowie Tcl. Während bei Java, Python, und .NET der Bytecode als Kompilat gespeichert und dann unabhängig vom Quellcode ausgeführt wird, wird bei den Skriptsprachen Perl (bis Version 5) und Tcl beim Programmstart der Quellcode in Bytecode übersetzt und nur im Arbeitsspeicher vorgehalten.

Die Ausführung von Bytecode durch das Programm, das die virtuelle Maschine repräsentiert, geht auf Kosten der Ausführungszeit. Spezielle Just-in-time-Compiler (JIT-Compiler) übersetzen Bytecode-Stücke einmal während der Programmausführung in entsprechende Maschinencodestücke und führen diese dann aus. Dadurch lassen sich die Ausführungszeiten, jedoch nicht die Startzeiten, oft in den Bereich von vorübersetztem Maschinencode drücken.

Hintergründe

Viele interpretierte Sprachen verwenden auch intern Bytecode. Das bedeutet, dass der Bytecode an sich unsichtbar für den Programmierer und Endbenutzer gehalten wird und automatisch als Zwischenschritt der Interpretation des Programmes erzeugt wird. Beispiele für aktuelle Sprachen, die diese Technik verwenden, sind: Perl, PHP, Prolog, Tcl und Python. In Python wird der Bytecode nach dem ersten Parsen in .pyc-Dateien (welche den Bytecode enthalten) abgelegt; das Vorgehen ähnelt damit prinzipiell dem bei Java. Dieser Schritt ist jedoch optional.

Auch dieses Verfahren ist sehr alt: Bereits für Lisp wurde in den 1960er Jahren Bytecompiling eingesetzt: 256 atomare Funktionen wurden in einem Byte kodiert. Frühe BASIC-Versionen der 1970er- und 1980er Jahre verwandten anstelle der Schlüsselwörter bestimmte Byte-Werte, sogenannte Tokens, um die Ausführung ihrer Programme zu beschleunigen und den Programmtext in einer kompakteren Form abzuspeichern. Der restliche Text – zum Beispiel Variablen, mathematische Ausdrücke und Zeichenketten – wurde jedoch unverändert gespeichert. Bei Ausgabe durch den LIST-Befehl wurden die Tokens wieder in lesbare Schlüsselwörter umgewandelt.

Ein bekannter früher Heimcomputer, der Bytecode verwendet, ist der TI 99/4a von Texas Instruments.

Rückgewinnung von Quelltext aus Kompilaten

Dieser Artikel oder Abschnitt ist nicht ausreichend belegt.

Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt: Bei Programmiersprachen, die direkt zu Maschinencode kompiliert werden, ist es in der Regel nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen. Bei Kompilierung zu Bytecode ist dies oftmals kein allzu großes Problem. Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden, allerdings ist es oftmals möglich, zumindest äquivalenten Code in der Quellsprache zurückzugewinnen, oftmals mit verblüffenden Ähnlichkeiten. Sehr gut scheint dies beispielsweise bei Java und .NET möglich zu sein; in Prolog mit WAM-Bytecode funktioniert es immer.

Für eigene .NET-Projekte kann der .NET Reflector verwendet werden. Dieser unterstützt drei .NET-Sprachen: C#, Visual Basic .NET und Delphi.NET.

Eine derartige Dekompilierung kann nicht verhindert werden, jedoch besteht die Möglichkeit, mithilfe eines sogenannten Obfuscator die Nutzbarkeit des hierdurch erhaltenden Quelltextes sehr stark einzuschränken.

Weblinks


Kategorien: Compilerbau

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Bytecode (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.