www.wikidata.de-de.nina.az
Bytecode ist in der Informatik die Bezeichnung fur eine Sammlung von Befehlen in binarer Form fur eine virtuelle Maschine Es kann sowohl ein Programm als auch die Vorgabe bezeichnen mit der die Programme codiert sind Bytecode ist im Gegensatz zu Quelltexten oder Skripten nicht menschenlesbar Programmanweisungen und Werte sind wie in Maschinencode als Bytes codiert Allerdings mit dem Unterschied dass Maschinencode direkt von einem Prozessor ausgefuhrt wird Wenn man von Bytecode spricht betont es normalerweise dass es sich nicht um Maschinencode handelt und dieser von einem speziellen Programm interpretiert werden soll bzw allgemein in Maschinencode ubersetzt wird Es schliesst aber nicht aus dass ein Bytecode durch passende Prozessoren ausfuhrbar ware Bei Kompilierung eines Quelltextes mancher Programmiersprachen oder Umgebungen wie beispielsweise Java wird nicht direkt Maschinencode sondern ein Zwischencode der Bytecode erstellt 1 Dieser Code ist in der Regel unabhangig von realer Hardware Er entsteht als Resultat einer semantischen Analyse des Quelltexts und ist im Vergleich zu diesem deutlich kompakter und zumeist wesentlich effizienter interpretierbar als der originale Quelltext Inhaltsverzeichnis 1 Technische Details 2 Hintergrunde 3 Ruckgewinnung von Quelltext aus Kompilaten 4 Weblinks 5 EinzelnachweiseTechnische Details BearbeitenDie virtuelle Maschine im Fall von Java die Java Virtual Machine JVM fuhrt dann dieses Zwischenergebnis aus indem sie zur Laufzeit den Bytecode entweder in Maschinensprache fur den jeweiligen Prozessor ubersetzt Just in time Kompilierung oder entsprechende Maschinencode Routinen ausfuhrt Interpreter Dabei muss die virtuelle Maschine fur jede Rechnerplattform auf der das Kompilat ausgefuhrt werden soll vorhanden sein 2 Java ist nur eines der prominenteren Beispiele fur eine Bytecode basierte Programmiersprache Andere Sprachen die Bytecodes verwenden sind P Code Lua die Net Framework Sprachen C F und Visual Basic Python Ruby Perl PHP Prolog Limbo Gambas sowie Tcl 1 Wahrend bei Java Python und NET der Bytecode als Kompilat gespeichert und dann unabhangig vom Quellcode ausgefuhrt wird wird bei den Skriptsprachen Perl bis Version 5 und Tcl beim Programmstart der Quellcode in Bytecode ubersetzt und nur im Arbeitsspeicher vorgehalten Die Verwendung von Bytecode macht es moglich dieselbe virtuelle Maschine fur mehrere Sprachen zu verwenden beispielsweise die JVM fur Java Scala Groovy und viele andere Der Aufwand nur einen Bytecode Compiler fur eine hohere Programmiersprache zu entwickeln ist dann deutlich reduziert Dagegen ware der Aufwand wenn ein Compiler eine direkte Ubersetzung in Maschinencode fur mehrere Betriebssysteme und Architekturen bereitstellen soll sehr viel hoher Ein Bytecode kann auch unabhangig von einer speziellen Sprache fur einen bestimmten Einsatzzweck entwickelt worden sein zum Beispiel WebAssembly Die Ausfuhrung von Bytecode durch das Programm das die virtuelle Maschine reprasentiert geht auf Kosten von dessen Startzeit welche im Allgemeinen aber eher nur messbar als wahrnehmbar beeintrachtigt wird Spezielle Just in time Compiler JIT Compiler ubersetzen Bytecode Stucke einmal wahrend der Programmausfuhrung in entsprechende Maschinencodestucke und fuhren diese dann aus Dadurch lassen sich die Ausfuhrungszeiten jedoch nicht die Startzeiten oft in den Bereich von vorubersetztem Maschinencode reduzieren 3 Hintergrunde BearbeitenViele interpretierte Sprachen verwenden auch intern Bytecode Das bedeutet dass der Bytecode an sich unsichtbar fur den Programmierer und Endbenutzer gehalten wird und automatisch als Zwischenschritt der Interpretation des Programmes erzeugt wird Beispiele fur 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 ahnelt damit prinzipiell dem bei Java Dieser Schritt ist jedoch optional Auch dieses Verfahren ist sehr alt Bereits fur Lisp wurde in den 1960er Jahren Bytecompiling eingesetzt Die 256 atomare Funktionen wurden in einem Byte kodiert Fruhe BASIC Versionen der 1970er und 1980er Jahre verwendeten anstelle der Schlusselworter bestimmte Byte Werte sogenannte Tokens um die Ausfuhrung ihrer Programme zu beschleunigen und den Programmtext in einer kompakteren Form abzuspeichern Der restliche Text zum Beispiel Variablen mathematische Ausdrucke und Zeichenketten wurde jedoch unverandert gespeichert Bei Ausgabe durch den LIST Befehl wurden die Tokens wieder in lesbare Schlusselworter umgewandelt Ein bekannter fruher Heimcomputer der Bytecode verwendet ist der TI 99 4a von Texas Instruments Aufgrund des stark begrenzten Speicherplatzes der ersten Homecomputer war es unumganglich beispielsweise BASIC Programme als Bytecode in den RAM zu uberfuhren Alternativ konnte man nur mit direkt eingegebenen Maschinencode programmieren Reiner Text ware sehr schnell an die Speichergrenze gestossen Die Platzersparnis von Quelltexten in Bytecodeform war aber auch spater noch angesichts langsamer und begrenzter Massenspeicher von Vorteil Hinzu kommt der grosse Vorteil dass Bytecode deutlich schneller ausgefuhrt werden kann als ein normaler Quelltext Statt jeden Buchstaben eines Befehls zu vergleichen um erst mal herauszufinden um welchen Befehl es sich handelt muss man nur ein oder wenige Bytes vergleichen die diesen reprasentieren Ruckgewinnung von Quelltext aus Kompilaten BearbeitenFur Programmierer die an Programmen arbeiten deren Quellcode nicht offengelegt werden soll gibt es einen wichtigen Aspekt zu beachten Bei Programmiersprachen wie beispielsweise C die direkt zu Maschinencode kompiliert werden ist es in der Regel nicht moglich aus dem Maschinencode den ursprunglichen Quellcode zuruckzugewinnen 4 Bei Kompilierung zu Bytecode ist dies hingegen oftmals kein allzu grosses Problem Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden allerdings ist es haufig moglich zumindest aquivalenten Code in der Quellsprache zuruckzugewinnen teilweise mit verbluffenden Ahnlichkeiten Beispielsweise bei Java und NET ist dies in den meisten Fallen sehr gut moglich in Prolog mit WAM Bytecode ist eine Ruckgewinnung immer moglich 5 Mithilfe eines sogenannten Obfuskators kann die Nutzbarkeit des durch das Dekompilieren erhaltenen Quelltextes sehr stark eingeschrankt werden mitunter ist ein Dekompilieren in die Quellsprache gar nicht mehr moglich Fur eigene NET Projekte kann der NET Reflector verwendet werden um den Quellcode wiederherzustellen Dieser unterstutzt die drei NET Sprachen C Visual Basic NET und Delphi NET Alternativ bietet sich das quelloffene dnSpy an Weblinks BearbeitenBill Venners Bytecode basics A first look at the bytecodes of the Java virtual machine Memento vom 6 Marz 2016 im Internet Archive in javaworld com vom 1 September 1996 englisch Java Bytecode entschlusseltEinzelnachweise Bearbeiten a b Bytecode In itwissen info 2 November 2013 abgerufen am 19 Oktober 2018 Bytecode In techterms com 23 Januar 2018 abgerufen am 19 Oktober 2018 englisch Carles Mateo Performance of several languages In carlesmateo com 26 Marz 2017 abgerufen am 8 April 2021 englisch Blogeintrag What Is bytecode In techtarget com September 2005 abgerufen am 19 Oktober 2018 englisch CS1Bh Lecture Note 7 Compilation I Java Byte Code PDF In ac uk 6 Februar 2003 S 5 archiviert vom Original am 28 Marz 2014 abgerufen am 19 Oktober 2018 englisch Abgerufen von https de wikipedia org w index php title Bytecode amp oldid 237783954