https://de.wikipedia.org/w/index.php?action=history&feed=atom&title=Bytecode Bytecode - Versionsgeschichte 2025-06-05T19:23:56Z Versionsgeschichte dieser Seite in Wikipedia MediaWiki 1.45.0-wmf.4 https://de.wikipedia.org/w/index.php?title=Bytecode&diff=253432210&oldid=prev 95.222.83.134: Deutlicher. Binär ist zweiwertig: ist eine zweielementige Menge binär? deren Kardinalität ist jedenfalls unär dual 10. Auch der schönste Text ist dem Computer ein Muster von Strom / Nicht-Strom, auf der Ebene sehen Textdateien nicht weniger binär aus als ausführbare Dateien ... 2025-02-17T21:50:03Z <p>Deutlicher. Binär ist zweiwertig: ist eine zweielementige Menge binär? deren Kardinalität ist jedenfalls unär dual 10. Auch der schönste Text ist dem Computer ein Muster von Strom / Nicht-Strom, auf der Ebene sehen Textdateien nicht weniger binär aus als ausführbare Dateien ...</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 17. Februar 2025, 23:50 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 1:</td> <td colspan="2" class="diff-lineno">Zeile 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''Bytecode''' ist in der [[Informatik]] die Bezeichnung für eine Sammlung von [[Befehlssatz|Befehlen]] <del style="font-weight: bold; text-decoration: none;">in</del> <del style="font-weight: bold; text-decoration: none;">binärer</del> <del style="font-weight: bold; text-decoration: none;">Form</del> für eine [[virtuelle Maschine]]. <del style="font-weight: bold; text-decoration: none;">Es</del> <del style="font-weight: bold; text-decoration: none;">kann</del> sowohl <del style="font-weight: bold; text-decoration: none;">ein</del> <del style="font-weight: bold; text-decoration: none;">Programm</del> als auch die <del style="font-weight: bold; text-decoration: none;">Vorgabe</del> <del style="font-weight: bold; text-decoration: none;">bezeichnen</del>, <del style="font-weight: bold; text-decoration: none;">mit der</del> die <del style="font-weight: bold; text-decoration: none;">Programme</del> <del style="font-weight: bold; text-decoration: none;">codiert sind</del>. Bytecode ist im Gegensatz zu [[Quelltext]]en oder [[Skriptsprache|Skripten]] nicht „menschenlesbar“, Programmanweisungen und Werte sind wie in [[Maschinensprache|Maschinencode]] als <del style="font-weight: bold; text-decoration: none;">„Bytes“</del> codiert<del style="font-weight: bold; text-decoration: none;">,</del> <del style="font-weight: bold; text-decoration: none;">allerdings</del> <del style="font-weight: bold; text-decoration: none;">mit</del> <del style="font-weight: bold; text-decoration: none;">dem Unterschied, dass Maschinencode</del> direkt von einem [[Prozessor]] ausgeführt <del style="font-weight: bold; text-decoration: none;">wird. Wenn</del> <del style="font-weight: bold; text-decoration: none;">man von „Bytecode“ spricht,</del> betont<del style="font-weight: bold; text-decoration: none;"> es normalerweise</del>, dass <del style="font-weight: bold; text-decoration: none;">es</del> <del style="font-weight: bold; text-decoration: none;">sich</del> <del style="font-weight: bold; text-decoration: none;">nicht um Maschinencode handelt, und dieser</del> von einem speziellen Programm „[[Interpreter|interpretiert]]“<del style="font-weight: bold; text-decoration: none;"> werden soll bzw. allgemein:</del> in Maschinencode übersetzt wird. <del style="font-weight: bold; text-decoration: none;">Es</del> <del style="font-weight: bold; text-decoration: none;">schließt</del> <del style="font-weight: bold; text-decoration: none;">aber</del> <del style="font-weight: bold; text-decoration: none;">nicht</del> <del style="font-weight: bold; text-decoration: none;">aus</del>, <del style="font-weight: bold; text-decoration: none;">dass</del> <del style="font-weight: bold; text-decoration: none;">ein</del> <del style="font-weight: bold; text-decoration: none;">Bytecode</del> <del style="font-weight: bold; text-decoration: none;">durch</del> <del style="font-weight: bold; text-decoration: none;">passende</del> <del style="font-weight: bold; text-decoration: none;">Prozessoren</del> <del style="font-weight: bold; text-decoration: none;">ausführbar</del> <del style="font-weight: bold; text-decoration: none;">wäre</del>.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''Bytecode''' ist in der [[Informatik]] die Bezeichnung für eine Sammlung von [[Befehlssatz|Befehlen]]<ins style="font-weight: bold; text-decoration: none;">,</ins> <ins style="font-weight: bold; text-decoration: none;">also</ins> <ins style="font-weight: bold; text-decoration: none;">die</ins> <ins style="font-weight: bold; text-decoration: none;">Maschinensprache</ins> für eine [[virtuelle Maschine]]. <ins style="font-weight: bold; text-decoration: none;">Bytecode</ins> <ins style="font-weight: bold; text-decoration: none;">bezeichnet</ins> sowohl <ins style="font-weight: bold; text-decoration: none;">die</ins> <ins style="font-weight: bold; text-decoration: none;">Vorschrift wie der Quellcode von Programmen in diesen Objektcode zu kodieren ist,</ins> als auch die <ins style="font-weight: bold; text-decoration: none;">Ergebnisse</ins> <ins style="font-weight: bold; text-decoration: none;">dieser Kodierung</ins>, <ins style="font-weight: bold; text-decoration: none;">also</ins> die <ins style="font-weight: bold; text-decoration: none;">ausführbaren</ins> <ins style="font-weight: bold; text-decoration: none;">Programme</ins>. Bytecode ist im Gegensatz zu [[Quelltext]]en oder [[Skriptsprache|Skripten]] nicht „menschenlesbar“, Programmanweisungen und Werte sind wie in [[Maschinensprache|Maschinencode]] als <ins style="font-weight: bold; text-decoration: none;">Bytes</ins> codiert<ins style="font-weight: bold; text-decoration: none;">.</ins> <ins style="font-weight: bold; text-decoration: none;">Maschinencode</ins> <ins style="font-weight: bold; text-decoration: none;">wird</ins> <ins style="font-weight: bold; text-decoration: none;">jedoch</ins> direkt von einem<ins style="font-weight: bold; text-decoration: none;"> (Hardware)</ins> [[Prozessor]] ausgeführt<ins style="font-weight: bold; text-decoration: none;">,</ins> <ins style="font-weight: bold; text-decoration: none;">Bytecode</ins> <ins style="font-weight: bold; text-decoration: none;">dagegen</ins> betont, dass <ins style="font-weight: bold; text-decoration: none;">das</ins> <ins style="font-weight: bold; text-decoration: none;">Programm</ins> <ins style="font-weight: bold; text-decoration: none;">zunächst</ins> von einem speziellen<ins style="font-weight: bold; text-decoration: none;"> anderen</ins> Programm „[[Interpreter|interpretiert]]“<ins style="font-weight: bold; text-decoration: none;">,</ins> in Maschinencode übersetzt wird. <ins style="font-weight: bold; text-decoration: none;">Ein</ins> <ins style="font-weight: bold; text-decoration: none;">Bytecode</ins> <ins style="font-weight: bold; text-decoration: none;">kann</ins> <ins style="font-weight: bold; text-decoration: none;">jedoch</ins> <ins style="font-weight: bold; text-decoration: none;">von passenden Hardware-Prozessoren direkt ausgeführt werden</ins>, <ins style="font-weight: bold; text-decoration: none;">und</ins> <ins style="font-weight: bold; text-decoration: none;">Maschinencode</ins> <ins style="font-weight: bold; text-decoration: none;">wird</ins> <ins style="font-weight: bold; text-decoration: none;">meist,</ins> <ins style="font-weight: bold; text-decoration: none;">sozusagen</ins> <ins style="font-weight: bold; text-decoration: none;">als</ins> <ins style="font-weight: bold; text-decoration: none;">Bytecode, auf Software-Prozessoren</ins> <ins style="font-weight: bold; text-decoration: none;">entwickelt</ins>.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Bei [[Compiler|Kompilierung]] eines Quelltextes mancher [[Programmiersprache]]n oder Umgebungen –&amp;nbsp;wie beispielsweise [[Java (Programmiersprache)|Java]]&amp;nbsp;– wird nicht direkt Maschinencode, sondern ein [[Zwischencode]], der Bytecode, erstellt.&lt;ref name="itwissen"&gt;{{Internetquelle |url=https://www.itwissen.info/Bytecode-bytecode.html |titel=Bytecode |werk=itwissen.info |datum=2013-11-02 |zugriff=2018-10-19}}&lt;/ref&gt; Dieser Code ist in der Regel unabhängig 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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Bei [[Compiler|Kompilierung]] eines Quelltextes mancher [[Programmiersprache]]n oder Umgebungen –&amp;nbsp;wie beispielsweise [[Java (Programmiersprache)|Java]]&amp;nbsp;– wird nicht direkt Maschinencode, sondern ein [[Zwischencode]], der Bytecode, erstellt.&lt;ref name="itwissen"&gt;{{Internetquelle |url=https://www.itwissen.info/Bytecode-bytecode.html |titel=Bytecode |werk=itwissen.info |datum=2013-11-02 |zugriff=2018-10-19}}&lt;/ref&gt; Dieser Code ist in der Regel unabhängig 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.</div></td> </tr> </table> 95.222.83.134 https://de.wikipedia.org/w/index.php?title=Bytecode&diff=252737674&oldid=prev OnionObserver: /* growthexperiments-addlink-summary-summary:2|0|0 */ 2025-01-27T13:45:08Z <p>Linkvorschlag-Funktion: 2 Links hinzugefügt.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 27. Januar 2025, 15:45 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 8:</td> <td colspan="2" class="diff-lineno">Zeile 8:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Java ist nur eines der prominenteren Beispiele für eine Bytecode-basierte Programmiersprache. Andere Sprachen, die Bytecodes verwenden, sind etwa [[P-Code]], [[Lua]], die [[.Net-Framework]]-Sprachen [[C-Sharp|C#]], [[F-Sharp|F#]] und [[Visual Basic .NET|Visual Basic]], [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache)|Ruby]], [[Perl (Programmiersprache)|Perl]], [[PHP]], [[Prolog (Programmiersprache)|Prolog]], [[Limbo (Programmiersprache)|Limbo]], [[Gambas (Programmiersprache)|Gambas]] sowie [[Tcl]].&lt;ref name="itwissen" /&gt; Während bei Java, Python und .NET der Bytecode als „Kompilat“ gespeichert und dann unabhängig vom Quellcode ausgeführt wird, wird bei den [[Skriptsprache]]n Perl (bis Version&amp;nbsp;5) und Tcl beim Programmstart der Quellcode in Bytecode übersetzt und nur im Arbeitsspeicher vorgehalten.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Java ist nur eines der prominenteren Beispiele für eine Bytecode-basierte Programmiersprache. Andere Sprachen, die Bytecodes verwenden, sind etwa [[P-Code]], [[Lua]], die [[.Net-Framework]]-Sprachen [[C-Sharp|C#]], [[F-Sharp|F#]] und [[Visual Basic .NET|Visual Basic]], [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache)|Ruby]], [[Perl (Programmiersprache)|Perl]], [[PHP]], [[Prolog (Programmiersprache)|Prolog]], [[Limbo (Programmiersprache)|Limbo]], [[Gambas (Programmiersprache)|Gambas]] sowie [[Tcl]].&lt;ref name="itwissen" /&gt; Während bei Java, Python und .NET der Bytecode als „Kompilat“ gespeichert und dann unabhängig vom Quellcode ausgeführt wird, wird bei den [[Skriptsprache]]n Perl (bis Version&amp;nbsp;5) und Tcl beim Programmstart der Quellcode in Bytecode übersetzt und nur im Arbeitsspeicher vorgehalten.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die Verwendung von Bytecode macht es möglich, dieselbe virtuelle Maschine für mehrere Sprachen zu verwenden, beispielsweise die JVM für Java, [[Scala (Programmiersprache)|Scala]], [[Groovy]] und viele andere. Der Aufwand, nur einen Bytecode-Compiler für eine höhere Programmiersprache zu entwickeln, ist dann deutlich reduziert. Dagegen wäre der Aufwand, wenn ein Compiler eine direkte Übersetzung in Maschinencode für mehrere Betriebssysteme und Architekturen bereitstellen soll, sehr viel höher. Ein Bytecode kann auch unabhängig von einer speziellen Sprache für einen bestimmten Einsatzzweck entwickelt worden sein, zum Beispiel [[WebAssembly]].</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die Verwendung von Bytecode macht es möglich, dieselbe virtuelle Maschine für mehrere Sprachen zu verwenden, beispielsweise die JVM für Java, [[Scala (Programmiersprache)|Scala]], [[Groovy]] und viele andere. Der Aufwand, nur einen Bytecode-Compiler für eine <ins style="font-weight: bold; text-decoration: none;">[[</ins>höhere Programmiersprache<ins style="font-weight: bold; text-decoration: none;">]]</ins> zu entwickeln, ist dann deutlich reduziert. Dagegen wäre der Aufwand, wenn ein Compiler eine direkte Übersetzung in Maschinencode für mehrere Betriebssysteme und Architekturen bereitstellen soll, sehr viel höher. Ein Bytecode kann auch unabhängig von einer speziellen Sprache für einen bestimmten Einsatzzweck entwickelt worden sein, zum Beispiel [[WebAssembly]].</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Ausführung von Bytecode durch das Programm, das die virtuelle Maschine repräsentiert, geht auf Kosten von dessen Startzeit, welche im Allgemeinen aber eher nur messbar als wahrnehmbar beeinträchtigt wird. Spezielle [[Just-in-time-Kompilierung|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 reduzieren.&lt;ref&gt;{{Internetquelle |autor=Carles Mateo |url=http://blog.carlesmateo.com/2014/10/13/performance-of-several-languages/ |titel=Performance of several languages |werk=carlesmateo.com |datum=2017-03-26 |abruf=2021-04-08 |sprache=en |kommentar=Blogeintrag}}&lt;/ref&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Ausführung von Bytecode durch das Programm, das die virtuelle Maschine repräsentiert, geht auf Kosten von dessen Startzeit, welche im Allgemeinen aber eher nur messbar als wahrnehmbar beeinträchtigt wird. Spezielle [[Just-in-time-Kompilierung|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 reduzieren.&lt;ref&gt;{{Internetquelle |autor=Carles Mateo |url=http://blog.carlesmateo.com/2014/10/13/performance-of-several-languages/ |titel=Performance of several languages |werk=carlesmateo.com |datum=2017-03-26 |abruf=2021-04-08 |sprache=en |kommentar=Blogeintrag}}&lt;/ref&gt;</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 20:</td> <td colspan="2" class="diff-lineno">Zeile 20:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt zu beachten: Bei Programmiersprachen, wie beispielsweise [[C (Programmiersprache)|C]], die direkt zu Maschinencode kompiliert werden, ist es normalerweise nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen.&lt;ref&gt;{{Internetquelle |url=https://whatis.techtarget.com/definition/bytecode |werk=techtarget.com|titel=What Is: bytecode |sprache=en |datum=2005-09 |zugriff=2018-10-19}}&lt;/ref&gt; Dazu müssten mindestens die Algorithmen des verwendeten Compilers bekannt sein. Funktionsbezeichner und Variablennamen können allerdings nur dann ermittelt werden, wenn dem Compilat Daten für einen Debugger hinzugefügt wurden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt zu beachten: Bei Programmiersprachen, wie beispielsweise [[C (Programmiersprache)|C]], die direkt zu Maschinencode kompiliert werden, ist es normalerweise nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen.&lt;ref&gt;{{Internetquelle |url=https://whatis.techtarget.com/definition/bytecode |werk=techtarget.com|titel=What Is: bytecode |sprache=en |datum=2005-09 |zugriff=2018-10-19}}&lt;/ref&gt; Dazu müssten mindestens die Algorithmen des verwendeten Compilers bekannt sein. Funktionsbezeichner und Variablennamen können allerdings nur dann ermittelt werden, wenn dem Compilat Daten für einen <ins style="font-weight: bold; text-decoration: none;">[[</ins>Debugger<ins style="font-weight: bold; text-decoration: none;">]]</ins> hinzugefügt wurden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Bei Kompilierung zu Bytecode ist dieses sogenannte [[Decompiler|Dekompilieren]] hingegen viel einfacher, da dieser sich weniger an der abstrakten Maschinensprache orientiert, sondern meistens deutlich näher an der zugrundeliegenden Programmiersprache liegt. Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden, allerdings ist es häufig möglich, zumindest äquivalenten Code in der Quellsprache zurückzugewinnen, teilweise mit verblüffenden Ähnlichkeiten. Beispielsweise bei Java und .NET ist dies in den meisten Fällen sehr gut möglich; in Prolog mit [[Warren’s Abstract Machine|WAM]]-Bytecode ist eine Rückgewinnung immer möglich;&lt;ref&gt;{{Internetquelle |url=http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |seiten=5 |werk=ac.uk |sprache=en |archiv-url=https://web.archive.org/web/20140328021346/http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |archiv-datum=2014-03-28 |titel=CS1Bh Lecture Note 7 Compilation I: Java Byte Code |datum=2003-02-06 |zugriff=2018-10-19 |format=PDF}}&lt;/ref&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Bei Kompilierung zu Bytecode ist dieses sogenannte [[Decompiler|Dekompilieren]] hingegen viel einfacher, da dieser sich weniger an der abstrakten Maschinensprache orientiert, sondern meistens deutlich näher an der zugrundeliegenden Programmiersprache liegt. Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden, allerdings ist es häufig möglich, zumindest äquivalenten Code in der Quellsprache zurückzugewinnen, teilweise mit verblüffenden Ähnlichkeiten. Beispielsweise bei Java und .NET ist dies in den meisten Fällen sehr gut möglich; in Prolog mit [[Warren’s Abstract Machine|WAM]]-Bytecode ist eine Rückgewinnung immer möglich;&lt;ref&gt;{{Internetquelle |url=http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |seiten=5 |werk=ac.uk |sprache=en |archiv-url=https://web.archive.org/web/20140328021346/http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |archiv-datum=2014-03-28 |titel=CS1Bh Lecture Note 7 Compilation I: Java Byte Code |datum=2003-02-06 |zugriff=2018-10-19 |format=PDF}}&lt;/ref&gt;</div></td> </tr> </table> OnionObserver https://de.wikipedia.org/w/index.php?title=Bytecode&diff=250370974&oldid=prev Invisigoth67: typo 2024-11-15T16:12:29Z <p>typo</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. November 2024, 18:12 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 20:</td> <td colspan="2" class="diff-lineno">Zeile 20:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt zu beachten: Bei Programmiersprachen, wie beispielsweise [[C (Programmiersprache)|C]], die direkt zu Maschinencode kompiliert werden, ist es normalerweise nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen.&lt;ref&gt;{{Internetquelle |url=https://whatis.techtarget.com/definition/bytecode |werk=techtarget.com|titel=What Is: bytecode |sprache=en |datum=2005-09 |zugriff=2018-10-19}}&lt;/ref&gt;<del style="font-weight: bold; text-decoration: none;">.</del> Dazu müssten mindestens die Algorithmen des verwendeten Compilers bekannt sein. Funktionsbezeichner und Variablennamen können allerdings nur dann ermittelt werden, wenn dem Compilat Daten für einen Debugger hinzugefügt wurden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt zu beachten: Bei Programmiersprachen, wie beispielsweise [[C (Programmiersprache)|C]], die direkt zu Maschinencode kompiliert werden, ist es normalerweise nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen.&lt;ref&gt;{{Internetquelle |url=https://whatis.techtarget.com/definition/bytecode |werk=techtarget.com|titel=What Is: bytecode |sprache=en |datum=2005-09 |zugriff=2018-10-19}}&lt;/ref&gt; Dazu müssten mindestens die Algorithmen des verwendeten Compilers bekannt sein. Funktionsbezeichner und Variablennamen können allerdings nur dann ermittelt werden, wenn dem Compilat Daten für einen Debugger hinzugefügt wurden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Bei Kompilierung zu Bytecode ist dieses sogenannte [[Decompiler|Dekompilieren]] hingegen viel einfacher, da dieser sich weniger an der abstrakten Maschinensprache orientiert, sondern meistens deutlich näher an der zugrundeliegenden Programmiersprache liegt. Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden, allerdings ist es häufig möglich, zumindest äquivalenten Code in der Quellsprache zurückzugewinnen, teilweise mit verblüffenden Ähnlichkeiten. Beispielsweise bei Java und .NET ist dies in den meisten Fällen sehr gut möglich; in Prolog mit [[Warren’s Abstract Machine|WAM]]-Bytecode ist eine Rückgewinnung immer möglich;&lt;ref&gt;{{Internetquelle |url=http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |seiten=5 |werk=ac.uk |sprache=en |archiv-url=https://web.archive.org/web/20140328021346/http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |archiv-datum=2014-03-28 |titel=CS1Bh Lecture Note 7 Compilation I: Java Byte Code |datum=2003-02-06 |zugriff=2018-10-19 |format=PDF}}&lt;/ref&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Bei Kompilierung zu Bytecode ist dieses sogenannte [[Decompiler|Dekompilieren]] hingegen viel einfacher, da dieser sich weniger an der abstrakten Maschinensprache orientiert, sondern meistens deutlich näher an der zugrundeliegenden Programmiersprache liegt. Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden, allerdings ist es häufig möglich, zumindest äquivalenten Code in der Quellsprache zurückzugewinnen, teilweise mit verblüffenden Ähnlichkeiten. Beispielsweise bei Java und .NET ist dies in den meisten Fällen sehr gut möglich; in Prolog mit [[Warren’s Abstract Machine|WAM]]-Bytecode ist eine Rückgewinnung immer möglich;&lt;ref&gt;{{Internetquelle |url=http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |seiten=5 |werk=ac.uk |sprache=en |archiv-url=https://web.archive.org/web/20140328021346/http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |archiv-datum=2014-03-28 |titel=CS1Bh Lecture Note 7 Compilation I: Java Byte Code |datum=2003-02-06 |zugriff=2018-10-19 |format=PDF}}&lt;/ref&gt;</div></td> </tr> </table> Invisigoth67 https://de.wikipedia.org/w/index.php?title=Bytecode&diff=250370423&oldid=prev Sebastian.Dietrich: /* Rückgewinnung von Quelltext aus Kompilaten */ Reverse Engineering ist was anderes, unenzyklopädisches entfernt, detto Anglizismus, Dekompilierung wird sogar verhindert,.NET Reflector entfernt (derartige Programme gibt es viele, gehört wenn dann in Decompiler) 2024-11-15T15:49:02Z <p><span class="autocomment">Rückgewinnung von Quelltext aus Kompilaten: </span> Reverse Engineering ist was anderes, unenzyklopädisches entfernt, detto Anglizismus, Dekompilierung wird sogar verhindert,.NET Reflector entfernt (derartige Programme gibt es viele, gehört wenn dann in Decompiler)</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. November 2024, 17:49 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 20:</td> <td colspan="2" class="diff-lineno">Zeile 20:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt zu beachten: Bei Programmiersprachen, wie beispielsweise [[C (Programmiersprache)|C]], die direkt zu Maschinencode kompiliert werden, ist es normalerweise nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen.&lt;ref&gt;{{Internetquelle |url=https://whatis.techtarget.com/definition/bytecode |werk=techtarget.com|titel=What Is: bytecode |sprache=en |datum=2005-09 |zugriff=2018-10-19}}&lt;/ref&gt;. Dazu müssten mindestens die Algorithmen des verwendeten Compilers bekannt sein. Funktionsbezeichner und Variablennamen<del style="font-weight: bold; text-decoration: none;">, auch „Symbolnamen“ genannt,</del> können allerdings <del style="font-weight: bold; text-decoration: none;">nicht</del> ermittelt werden, <del style="font-weight: bold; text-decoration: none;">sofern</del> dem Compilat<del style="font-weight: bold; text-decoration: none;"> keine</del> Daten für einen Debugger hinzugefügt wurden<del style="font-weight: bold; text-decoration: none;"> Also praktisch vom Programmierer vergessen wurde, den Compiler auf normale Kompilierung umzustellen. Maschinencode verwendet statt den menschenlesbaren Symbolnamen Speicheradressen. In diesem Fall verwendet man einfach für das so genannte [[Reverse Engineering]] einen Disassembler, welcher den Maschinencode in Assembler umsetzt. Dadurch kann man nachvollziehen was ein Programm macht, tut sich damit allerdings ungleich schwerer als mit der Formulierung in einer Hochsprache</del>.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt zu beachten: Bei Programmiersprachen, wie beispielsweise [[C (Programmiersprache)|C]], die direkt zu Maschinencode kompiliert werden, ist es normalerweise nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen.&lt;ref&gt;{{Internetquelle |url=https://whatis.techtarget.com/definition/bytecode |werk=techtarget.com|titel=What Is: bytecode |sprache=en |datum=2005-09 |zugriff=2018-10-19}}&lt;/ref&gt;. Dazu müssten mindestens die Algorithmen des verwendeten Compilers bekannt sein. Funktionsbezeichner und Variablennamen können allerdings <ins style="font-weight: bold; text-decoration: none;">nur dann</ins> ermittelt werden, <ins style="font-weight: bold; text-decoration: none;">wenn</ins> dem Compilat Daten für einen Debugger hinzugefügt wurden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Bei Kompilierung zu Bytecode ist <del style="font-weight: bold; text-decoration: none;">das</del> Dekompilieren hingegen viel einfacher, da dieser sich weniger an der abstrakten Maschinensprache orientiert, sondern meistens deutlich näher an der zugrundeliegenden Programmiersprache liegt. Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden, allerdings ist es häufig möglich, zumindest äquivalenten Code in der Quellsprache zurückzugewinnen, teilweise mit verblüffenden Ähnlichkeiten. Beispielsweise bei Java und .NET ist dies in den meisten Fällen sehr gut möglich; in Prolog mit [[Warren’s Abstract Machine|WAM]]-Bytecode ist eine Rückgewinnung immer möglich;&lt;ref&gt;{{Internetquelle |url=http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |seiten=5 |werk=ac.uk |sprache=en |archiv-url=https://web.archive.org/web/20140328021346/http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |archiv-datum=2014-03-28 |titel=CS1Bh Lecture Note 7 Compilation I: Java Byte Code |datum=2003-02-06 |zugriff=2018-10-19 |format=PDF}}&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Bei Kompilierung zu Bytecode ist <ins style="font-weight: bold; text-decoration: none;">dieses</ins> <ins style="font-weight: bold; text-decoration: none;">sogenannte [[Decompiler|</ins>Dekompilieren<ins style="font-weight: bold; text-decoration: none;">]]</ins> hingegen viel einfacher, da dieser sich weniger an der abstrakten Maschinensprache orientiert, sondern meistens deutlich näher an der zugrundeliegenden Programmiersprache liegt. Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden, allerdings ist es häufig möglich, zumindest äquivalenten Code in der Quellsprache zurückzugewinnen, teilweise mit verblüffenden Ähnlichkeiten. Beispielsweise bei Java und .NET ist dies in den meisten Fällen sehr gut möglich; in Prolog mit [[Warren’s Abstract Machine|WAM]]-Bytecode ist eine Rückgewinnung immer möglich;&lt;ref&gt;{{Internetquelle |url=http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |seiten=5 |werk=ac.uk |sprache=en |archiv-url=https://web.archive.org/web/20140328021346/http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |archiv-datum=2014-03-28 |titel=CS1Bh Lecture Note 7 Compilation I: Java Byte Code |datum=2003-02-06 |zugriff=2018-10-19 |format=PDF}}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Mithilfe eines sogenannten [[Obfuskation (Software)|<del style="font-weight: bold; text-decoration: none;">Obfuscators</del>]] kann die Nutzbarkeit des durch das Dekompilieren erhaltenen Quelltextes sehr stark eingeschränkt werden<del style="font-weight: bold; text-decoration: none;">;</del> <del style="font-weight: bold; text-decoration: none;">ein</del> <del style="font-weight: bold; text-decoration: none;">Dekompilieren</del> <del style="font-weight: bold; text-decoration: none;">in</del> die Quellsprache <del style="font-weight: bold; text-decoration: none;">soll</del> <del style="font-weight: bold; text-decoration: none;">dadurch</del> <del style="font-weight: bold; text-decoration: none;">so</del> <del style="font-weight: bold; text-decoration: none;">gut</del> <del style="font-weight: bold; text-decoration: none;">wie</del> <del style="font-weight: bold; text-decoration: none;">unmöglich</del> <del style="font-weight: bold; text-decoration: none;">gemacht</del> <del style="font-weight: bold; text-decoration: none;">werden</del>.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Mithilfe eines sogenannten [[Obfuskation (Software)|<ins style="font-weight: bold; text-decoration: none;">Obfuskators</ins>]] kann die Nutzbarkeit des durch das Dekompilieren erhaltenen Quelltextes sehr stark eingeschränkt werden<ins style="font-weight: bold; text-decoration: none;">.</ins> <ins style="font-weight: bold; text-decoration: none;">Mitunter</ins> <ins style="font-weight: bold; text-decoration: none;">werden</ins> <ins style="font-weight: bold; text-decoration: none;">Befehlsfolgen eingebaut,</ins> die<ins style="font-weight: bold; text-decoration: none;"> in der</ins> Quellsprache <ins style="font-weight: bold; text-decoration: none;">nicht</ins> <ins style="font-weight: bold; text-decoration: none;">existieren</ins> <ins style="font-weight: bold; text-decoration: none;">(beispielsweise</ins> <ins style="font-weight: bold; text-decoration: none;">Code</ins> <ins style="font-weight: bold; text-decoration: none;">nach</ins> <ins style="font-weight: bold; text-decoration: none;">Ende</ins> <ins style="font-weight: bold; text-decoration: none;">einer</ins> <ins style="font-weight: bold; text-decoration: none;">Methode), was ein Dekompilieren in die Quellsprache gar nicht mehr möglich macht</ins>.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Für eigene .NET-Projekte kann der [[.NET Reflector]] verwendet werden um den Quellcode wiederherzustellen. Dieser unterstützt die drei .NET-Sprachen C#, Visual Basic .NET und [[Delphi.NET]]. Alternativ bietet sich das quelloffene dnSpy an.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> </tr> </table> Sebastian.Dietrich https://de.wikipedia.org/w/index.php?title=Bytecode&diff=250369129&oldid=prev 2A02:810D:5A40:33C:1476:E85D:729E:48A: /* Rückgewinnung von Quelltext aus Kompilaten */ 2024-11-15T14:54:43Z <p><span class="autocomment">Rückgewinnung von Quelltext aus Kompilaten</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. November 2024, 16:54 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 20:</td> <td colspan="2" class="diff-lineno">Zeile 20:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt zu beachten: Bei Programmiersprachen, wie beispielsweise [[C (Programmiersprache)|C]], die direkt zu Maschinencode kompiliert werden, ist es <del style="font-weight: bold; text-decoration: none;">in der Regel</del> nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen.&lt;ref&gt;{{Internetquelle |url=https://whatis.techtarget.com/definition/bytecode |werk=techtarget.com|titel=What Is: bytecode |sprache=en |datum=2005-09 |zugriff=2018-10-19}}&lt;/ref&gt; <del style="font-weight: bold; text-decoration: none;">Bei</del> <del style="font-weight: bold; text-decoration: none;">Kompilierung</del> <del style="font-weight: bold; text-decoration: none;">zu</del> <del style="font-weight: bold; text-decoration: none;">Bytecode</del> <del style="font-weight: bold; text-decoration: none;">ist</del> <del style="font-weight: bold; text-decoration: none;">dies</del> <del style="font-weight: bold; text-decoration: none;">hingegen</del> <del style="font-weight: bold; text-decoration: none;">oftmals</del> <del style="font-weight: bold; text-decoration: none;">kein</del> <del style="font-weight: bold; text-decoration: none;">allzu</del> <del style="font-weight: bold; text-decoration: none;">großes</del> <del style="font-weight: bold; text-decoration: none;">Problem.</del> <del style="font-weight: bold; text-decoration: none;">Hierbei</del> <del style="font-weight: bold; text-decoration: none;">kann</del> <del style="font-weight: bold; text-decoration: none;">zwar</del> <del style="font-weight: bold; text-decoration: none;">nicht</del> <del style="font-weight: bold; text-decoration: none;">der</del> <del style="font-weight: bold; text-decoration: none;">exakte</del> <del style="font-weight: bold; text-decoration: none;">Quellcode</del> <del style="font-weight: bold; text-decoration: none;">rekonstruiert</del> werden, <del style="font-weight: bold; text-decoration: none;">allerdings</del> <del style="font-weight: bold; text-decoration: none;">ist</del> <del style="font-weight: bold; text-decoration: none;">es</del> <del style="font-weight: bold; text-decoration: none;">häufig</del> <del style="font-weight: bold; text-decoration: none;">möglich,</del> <del style="font-weight: bold; text-decoration: none;">zumindest</del> <del style="font-weight: bold; text-decoration: none;">äquivalenten</del> <del style="font-weight: bold; text-decoration: none;">Code</del> <del style="font-weight: bold; text-decoration: none;">in</del> <del style="font-weight: bold; text-decoration: none;">der</del> <del style="font-weight: bold; text-decoration: none;">Quellsprache</del> <del style="font-weight: bold; text-decoration: none;">zurückzugewinnen,</del> <del style="font-weight: bold; text-decoration: none;">teilweise</del> <del style="font-weight: bold; text-decoration: none;">mit</del> <del style="font-weight: bold; text-decoration: none;">verblüffenden</del> <del style="font-weight: bold; text-decoration: none;">Ähnlichkeiten.</del> <del style="font-weight: bold; text-decoration: none;">Beispielsweise</del> <del style="font-weight: bold; text-decoration: none;">bei</del> <del style="font-weight: bold; text-decoration: none;">Java</del> <del style="font-weight: bold; text-decoration: none;">und</del> .<del style="font-weight: bold; text-decoration: none;">NET</del> <del style="font-weight: bold; text-decoration: none;">ist</del> <del style="font-weight: bold; text-decoration: none;">dies</del> <del style="font-weight: bold; text-decoration: none;">in</del> den <del style="font-weight: bold; text-decoration: none;">meisten</del> <del style="font-weight: bold; text-decoration: none;">Fällen</del> <del style="font-weight: bold; text-decoration: none;">sehr</del> <del style="font-weight: bold; text-decoration: none;">gut</del> <del style="font-weight: bold; text-decoration: none;">möglich;</del> <del style="font-weight: bold; text-decoration: none;">in</del> <del style="font-weight: bold; text-decoration: none;">Prolog</del> <del style="font-weight: bold; text-decoration: none;">mit</del> [[<del style="font-weight: bold; text-decoration: none;">Warren’s</del> <del style="font-weight: bold; text-decoration: none;">Abstract Machine|WAM</del>]]<del style="font-weight: bold; text-decoration: none;">-Bytecode</del> <del style="font-weight: bold; text-decoration: none;">ist</del> <del style="font-weight: bold; text-decoration: none;">eine</del> <del style="font-weight: bold; text-decoration: none;">Rückgewinnung</del> <del style="font-weight: bold; text-decoration: none;">immer</del> <del style="font-weight: bold; text-decoration: none;">möglich;&lt;ref&gt;{{Internetquelle</del> <del style="font-weight: bold; text-decoration: none;">|url=http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf</del> <del style="font-weight: bold; text-decoration: none;">|seiten=5</del> <del style="font-weight: bold; text-decoration: none;">|werk=ac</del>.<del style="font-weight: bold; text-decoration: none;">uk</del> <del style="font-weight: bold; text-decoration: none;">|sprache=en</del> <del style="font-weight: bold; text-decoration: none;">|archiv-url=https://web.archive.org/web/20140328021346/http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf</del> <del style="font-weight: bold; text-decoration: none;">|archiv-datum=2014-03-28</del> <del style="font-weight: bold; text-decoration: none;">|titel=CS1Bh</del> <del style="font-weight: bold; text-decoration: none;">Lecture</del> <del style="font-weight: bold; text-decoration: none;">Note</del> <del style="font-weight: bold; text-decoration: none;">7</del> <del style="font-weight: bold; text-decoration: none;">Compilation</del> <del style="font-weight: bold; text-decoration: none;">I:</del> <del style="font-weight: bold; text-decoration: none;">Java</del> <del style="font-weight: bold; text-decoration: none;">Byte</del> <del style="font-weight: bold; text-decoration: none;">Code</del> <del style="font-weight: bold; text-decoration: none;">|datum=2003-02-06</del> <del style="font-weight: bold; text-decoration: none;">|zugriff=2018-10-19</del> <del style="font-weight: bold; text-decoration: none;">|format=PDF}}&lt;/ref&gt;</del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt zu beachten: Bei Programmiersprachen, wie beispielsweise [[C (Programmiersprache)|C]], die direkt zu Maschinencode kompiliert werden, ist es <ins style="font-weight: bold; text-decoration: none;">normalerweise</ins> nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen.&lt;ref&gt;{{Internetquelle |url=https://whatis.techtarget.com/definition/bytecode |werk=techtarget.com|titel=What Is: bytecode |sprache=en |datum=2005-09 |zugriff=2018-10-19}}&lt;/ref&gt;<ins style="font-weight: bold; text-decoration: none;">.</ins> <ins style="font-weight: bold; text-decoration: none;">Dazu</ins> <ins style="font-weight: bold; text-decoration: none;">müssten</ins> <ins style="font-weight: bold; text-decoration: none;">mindestens</ins> <ins style="font-weight: bold; text-decoration: none;">die</ins> <ins style="font-weight: bold; text-decoration: none;">Algorithmen</ins> <ins style="font-weight: bold; text-decoration: none;">des</ins> <ins style="font-weight: bold; text-decoration: none;">verwendeten</ins> <ins style="font-weight: bold; text-decoration: none;">Compilers</ins> <ins style="font-weight: bold; text-decoration: none;">bekannt</ins> <ins style="font-weight: bold; text-decoration: none;">sein.</ins> <ins style="font-weight: bold; text-decoration: none;">Funktionsbezeichner</ins> <ins style="font-weight: bold; text-decoration: none;">und</ins> <ins style="font-weight: bold; text-decoration: none;">Variablennamen,</ins> <ins style="font-weight: bold; text-decoration: none;">auch</ins> <ins style="font-weight: bold; text-decoration: none;">„Symbolnamen“</ins> <ins style="font-weight: bold; text-decoration: none;">genannt,</ins> <ins style="font-weight: bold; text-decoration: none;">können</ins> <ins style="font-weight: bold; text-decoration: none;">allerdings</ins> <ins style="font-weight: bold; text-decoration: none;">nicht</ins> <ins style="font-weight: bold; text-decoration: none;">ermittelt</ins> werden, <ins style="font-weight: bold; text-decoration: none;">sofern</ins> <ins style="font-weight: bold; text-decoration: none;">dem</ins> <ins style="font-weight: bold; text-decoration: none;">Compilat</ins> <ins style="font-weight: bold; text-decoration: none;">keine</ins> <ins style="font-weight: bold; text-decoration: none;">Daten</ins> <ins style="font-weight: bold; text-decoration: none;">für</ins> <ins style="font-weight: bold; text-decoration: none;">einen</ins> <ins style="font-weight: bold; text-decoration: none;">Debugger</ins> <ins style="font-weight: bold; text-decoration: none;">hinzugefügt</ins> <ins style="font-weight: bold; text-decoration: none;">wurden</ins> <ins style="font-weight: bold; text-decoration: none;">Also</ins> <ins style="font-weight: bold; text-decoration: none;">praktisch</ins> <ins style="font-weight: bold; text-decoration: none;">vom</ins> <ins style="font-weight: bold; text-decoration: none;">Programmierer</ins> <ins style="font-weight: bold; text-decoration: none;">vergessen</ins> <ins style="font-weight: bold; text-decoration: none;">wurde,</ins> <ins style="font-weight: bold; text-decoration: none;">den</ins> <ins style="font-weight: bold; text-decoration: none;">Compiler</ins> <ins style="font-weight: bold; text-decoration: none;">auf</ins> <ins style="font-weight: bold; text-decoration: none;">normale</ins> <ins style="font-weight: bold; text-decoration: none;">Kompilierung umzustellen</ins>. <ins style="font-weight: bold; text-decoration: none;">Maschinencode</ins> <ins style="font-weight: bold; text-decoration: none;">verwendet</ins> <ins style="font-weight: bold; text-decoration: none;">statt</ins> den <ins style="font-weight: bold; text-decoration: none;">menschenlesbaren</ins> <ins style="font-weight: bold; text-decoration: none;">Symbolnamen</ins> <ins style="font-weight: bold; text-decoration: none;">Speicheradressen.</ins> <ins style="font-weight: bold; text-decoration: none;">In</ins> <ins style="font-weight: bold; text-decoration: none;">diesem</ins> <ins style="font-weight: bold; text-decoration: none;">Fall</ins> <ins style="font-weight: bold; text-decoration: none;">verwendet</ins> <ins style="font-weight: bold; text-decoration: none;">man einfach für das so genannte</ins> [[<ins style="font-weight: bold; text-decoration: none;">Reverse</ins> <ins style="font-weight: bold; text-decoration: none;">Engineering</ins>]] <ins style="font-weight: bold; text-decoration: none;">einen</ins> <ins style="font-weight: bold; text-decoration: none;">Disassembler,</ins> <ins style="font-weight: bold; text-decoration: none;">welcher</ins> <ins style="font-weight: bold; text-decoration: none;">den</ins> <ins style="font-weight: bold; text-decoration: none;">Maschinencode</ins> <ins style="font-weight: bold; text-decoration: none;">in</ins> <ins style="font-weight: bold; text-decoration: none;">Assembler</ins> <ins style="font-weight: bold; text-decoration: none;">umsetzt</ins>. <ins style="font-weight: bold; text-decoration: none;">Dadurch</ins> <ins style="font-weight: bold; text-decoration: none;">kann</ins> <ins style="font-weight: bold; text-decoration: none;">man</ins> <ins style="font-weight: bold; text-decoration: none;">nachvollziehen</ins> <ins style="font-weight: bold; text-decoration: none;">was</ins> <ins style="font-weight: bold; text-decoration: none;">ein</ins> <ins style="font-weight: bold; text-decoration: none;">Programm</ins> <ins style="font-weight: bold; text-decoration: none;">macht,</ins> <ins style="font-weight: bold; text-decoration: none;">tut</ins> <ins style="font-weight: bold; text-decoration: none;">sich</ins> <ins style="font-weight: bold; text-decoration: none;">damit</ins> <ins style="font-weight: bold; text-decoration: none;">allerdings</ins> <ins style="font-weight: bold; text-decoration: none;">ungleich</ins> <ins style="font-weight: bold; text-decoration: none;">schwerer als</ins> <ins style="font-weight: bold; text-decoration: none;">mit der Formulierung in einer Hochsprache.</ins></div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Bei Kompilierung zu Bytecode ist das Dekompilieren hingegen viel einfacher, da dieser sich weniger an der abstrakten Maschinensprache orientiert, sondern meistens deutlich näher an der zugrundeliegenden Programmiersprache liegt. Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden, allerdings ist es häufig möglich, zumindest äquivalenten Code in der Quellsprache zurückzugewinnen, teilweise mit verblüffenden Ähnlichkeiten. Beispielsweise bei Java und .NET ist dies in den meisten Fällen sehr gut möglich; in Prolog mit [[Warren’s Abstract Machine|WAM]]-Bytecode ist eine Rückgewinnung immer möglich;&lt;ref&gt;{{Internetquelle |url=http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |seiten=5 |werk=ac.uk |sprache=en |archiv-url=https://web.archive.org/web/20140328021346/http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf |archiv-datum=2014-03-28 |titel=CS1Bh Lecture Note 7 Compilation I: Java Byte Code |datum=2003-02-06 |zugriff=2018-10-19 |format=PDF}}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"><a class="mw-diff-movedpara-left" title="Der Absatz wurde verschoben. Klicken, um zur neuen Stelle zu springen." href="#movedpara_5_1_rhs">&#x26AB;</a></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><a name="movedpara_4_0_lhs"></a>Mithilfe eines sogenannten [[Obfuskation (Software)|<del style="font-weight: bold; text-decoration: none;">Obfuskators</del>]] kann die Nutzbarkeit des durch das Dekompilieren erhaltenen Quelltextes sehr stark eingeschränkt werden;<del style="font-weight: bold; text-decoration: none;"> mitunter ist</del> ein Dekompilieren in die Quellsprache <del style="font-weight: bold; text-decoration: none;">gar</del> <del style="font-weight: bold; text-decoration: none;">nicht</del> <del style="font-weight: bold; text-decoration: none;">mehr</del> <del style="font-weight: bold; text-decoration: none;">möglich</del>.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker"><a class="mw-diff-movedpara-right" title="Der Absatz wurde verschoben. Klicken, um zur alten Stelle zu springen." href="#movedpara_4_0_lhs">&#x26AB;</a></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><a name="movedpara_5_1_rhs"></a>Mithilfe eines sogenannten [[Obfuskation (Software)|<ins style="font-weight: bold; text-decoration: none;">Obfuscators</ins>]] kann die Nutzbarkeit des durch das Dekompilieren erhaltenen Quelltextes sehr stark eingeschränkt werden; ein Dekompilieren in die Quellsprache <ins style="font-weight: bold; text-decoration: none;">soll</ins> <ins style="font-weight: bold; text-decoration: none;">dadurch</ins> <ins style="font-weight: bold; text-decoration: none;">so</ins> <ins style="font-weight: bold; text-decoration: none;">gut wie unmöglich gemacht werden</ins>.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Für eigene .NET-Projekte kann der [[.NET Reflector]] verwendet werden um den Quellcode wiederherzustellen. Dieser unterstützt die drei .NET-Sprachen C#, Visual Basic .NET und [[Delphi.NET]]. Alternativ bietet sich das quelloffene dnSpy an.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Für eigene .NET-Projekte kann der [[.NET Reflector]] verwendet werden um den Quellcode wiederherzustellen. Dieser unterstützt die drei .NET-Sprachen C#, Visual Basic .NET und [[Delphi.NET]]. Alternativ bietet sich das quelloffene dnSpy an.</div></td> </tr> </table> 2A02:810D:5A40:33C:1476:E85D:729E:48A https://de.wikipedia.org/w/index.php?title=Bytecode&diff=249317097&oldid=prev Carrot account: /* Hintergründe */ Grammatik 2024-10-10T21:34:28Z <p><span class="autocomment">Hintergründe: </span> Grammatik</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 10. Oktober 2024, 23:34 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 15:</td> <td colspan="2" class="diff-lineno">Zeile 15:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Auch dieses Verfahren ist sehr alt: Bereits für [[Lisp]] wurde in den 1960er Jahren Bytecompiling eingesetzt: Die 256 [[Lispatom|<del style="font-weight: bold; text-decoration: none;">atomare</del>]] Funktionen wurden in einem Byte kodiert. Frühe [[BASIC]]-Versionen der 1970er und 1980er Jahre verwendeten anstelle der Schlüsselwörter bestimmte Byte-Werte, sogenannte [[Token (Übersetzerbau)|Tokens]], um die Ausführung ihrer Programme zu beschleunigen und den Programmtext in einer kompakteren Form abzuspeichern. Der restliche Text&amp;nbsp;– zum Beispiel Variablen, mathematische Ausdrücke und Zeichenketten&amp;nbsp;– 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 [[Texas Instruments TI-99/4A|TI 99/4a]] von [[Texas Instruments]].</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Auch dieses Verfahren ist sehr alt: Bereits für [[Lisp]] wurde in den 1960er Jahren Bytecompiling eingesetzt: Die 256 [[Lispatom|<ins style="font-weight: bold; text-decoration: none;">atomaren</ins>]] Funktionen wurden in einem Byte kodiert. Frühe [[BASIC]]-Versionen der 1970er und 1980er Jahre verwendeten anstelle der Schlüsselwörter bestimmte Byte-Werte, sogenannte [[Token (Übersetzerbau)|Tokens]], um die Ausführung ihrer Programme zu beschleunigen und den Programmtext in einer kompakteren Form abzuspeichern. Der restliche Text&amp;nbsp;– zum Beispiel Variablen, mathematische Ausdrücke und Zeichenketten&amp;nbsp;– 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 [[Texas Instruments TI-99/4A|TI 99/4a]] von [[Texas Instruments]].</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Aufgrund des stark begrenzten Speicherplatzes der ersten Homecomputer war es unumgänglich, beispielsweise BASIC-Programme als Bytecode in den [[Random-Access Memory|RAM]] zu überführen. Alternativ konnte man nur mit direkt eingegebenen Maschinencode programmieren. Reiner Text wäre sehr schnell an die Speichergrenze gestoßen. Die Platzersparnis von Quelltexten in Bytecodeform war aber auch später noch angesichts langsamer und begrenzter Massenspeicher von Vorteil. Hinzu kommt der große Vorteil, dass Bytecode deutlich schneller ausgeführt 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 repräsentieren.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Aufgrund des stark begrenzten Speicherplatzes der ersten Homecomputer war es unumgänglich, beispielsweise BASIC-Programme als Bytecode in den [[Random-Access Memory|RAM]] zu überführen. Alternativ konnte man nur mit direkt eingegebenen Maschinencode programmieren. Reiner Text wäre sehr schnell an die Speichergrenze gestoßen. Die Platzersparnis von Quelltexten in Bytecodeform war aber auch später noch angesichts langsamer und begrenzter Massenspeicher von Vorteil. Hinzu kommt der große Vorteil, dass Bytecode deutlich schneller ausgeführt 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 repräsentieren.</div></td> </tr> </table> Carrot account https://de.wikipedia.org/w/index.php?title=Bytecode&diff=249316981&oldid=prev Carrot account: /* Technische Details */ Lesbarkeit erhöht. 2024-10-10T21:28:10Z <p><span class="autocomment">Technische Details: </span> Lesbarkeit erhöht.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 10. Oktober 2024, 23:28 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 8:</td> <td colspan="2" class="diff-lineno">Zeile 8:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Java ist nur eines der prominenteren Beispiele für eine Bytecode-basierte Programmiersprache. Andere Sprachen, die Bytecodes verwenden, sind etwa [[P-Code]], [[Lua]], die [[.Net-Framework]]-Sprachen [[C-Sharp|C#]], [[F-Sharp|F#]] und [[Visual Basic .NET|Visual Basic]], [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache)|Ruby]], [[Perl (Programmiersprache)|Perl]], [[PHP]], [[Prolog (Programmiersprache)|Prolog]], [[Limbo (Programmiersprache)|Limbo]], [[Gambas (Programmiersprache)|Gambas]] sowie [[Tcl]].&lt;ref name="itwissen" /&gt; Während bei Java, Python und .NET der Bytecode als „Kompilat“ gespeichert und dann unabhängig vom Quellcode ausgeführt wird, wird bei den [[Skriptsprache]]n Perl (bis Version&amp;nbsp;5) und Tcl beim Programmstart der Quellcode in Bytecode übersetzt und nur im Arbeitsspeicher vorgehalten.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Java ist nur eines der prominenteren Beispiele für eine Bytecode-basierte Programmiersprache. Andere Sprachen, die Bytecodes verwenden, sind etwa [[P-Code]], [[Lua]], die [[.Net-Framework]]-Sprachen [[C-Sharp|C#]], [[F-Sharp|F#]] und [[Visual Basic .NET|Visual Basic]], [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache)|Ruby]], [[Perl (Programmiersprache)|Perl]], [[PHP]], [[Prolog (Programmiersprache)|Prolog]], [[Limbo (Programmiersprache)|Limbo]], [[Gambas (Programmiersprache)|Gambas]] sowie [[Tcl]].&lt;ref name="itwissen" /&gt; Während bei Java, Python und .NET der Bytecode als „Kompilat“ gespeichert und dann unabhängig vom Quellcode ausgeführt wird, wird bei den [[Skriptsprache]]n Perl (bis Version&amp;nbsp;5) und Tcl beim Programmstart der Quellcode in Bytecode übersetzt und nur im Arbeitsspeicher vorgehalten.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die Verwendung von Bytecode macht es möglich, dieselbe virtuelle Maschine für mehrere Sprachen zu verwenden, beispielsweise die JVM für Java, [[Scala (Programmiersprache)|Scala]], [[Groovy]] und viele andere. Der Aufwand nur einen Bytecode-Compiler für eine höhere Programmiersprache zu entwickeln ist dann deutlich reduziert. Dagegen wäre der Aufwand, wenn ein Compiler eine direkte Übersetzung in Maschinencode für mehrere Betriebssysteme und Architekturen bereitstellen soll, sehr viel höher. Ein Bytecode kann auch unabhängig von einer speziellen Sprache für einen bestimmten Einsatzzweck entwickelt worden sein, zum Beispiel [[WebAssembly]].</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die Verwendung von Bytecode macht es möglich, dieselbe virtuelle Maschine für mehrere Sprachen zu verwenden, beispielsweise die JVM für Java, [[Scala (Programmiersprache)|Scala]], [[Groovy]] und viele andere. Der Aufwand<ins style="font-weight: bold; text-decoration: none;">,</ins> nur einen Bytecode-Compiler für eine höhere Programmiersprache zu entwickeln<ins style="font-weight: bold; text-decoration: none;">,</ins> ist dann deutlich reduziert. Dagegen wäre der Aufwand, wenn ein Compiler eine direkte Übersetzung in Maschinencode für mehrere Betriebssysteme und Architekturen bereitstellen soll, sehr viel höher. Ein Bytecode kann auch unabhängig von einer speziellen Sprache für einen bestimmten Einsatzzweck entwickelt worden sein, zum Beispiel [[WebAssembly]].</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Ausführung von Bytecode durch das Programm, das die virtuelle Maschine repräsentiert, geht auf Kosten von dessen Startzeit, welche im Allgemeinen aber eher nur messbar als wahrnehmbar beeinträchtigt wird. Spezielle [[Just-in-time-Kompilierung|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 reduzieren.&lt;ref&gt;{{Internetquelle |autor=Carles Mateo |url=http://blog.carlesmateo.com/2014/10/13/performance-of-several-languages/ |titel=Performance of several languages |werk=carlesmateo.com |datum=2017-03-26 |abruf=2021-04-08 |sprache=en |kommentar=Blogeintrag}}&lt;/ref&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Ausführung von Bytecode durch das Programm, das die virtuelle Maschine repräsentiert, geht auf Kosten von dessen Startzeit, welche im Allgemeinen aber eher nur messbar als wahrnehmbar beeinträchtigt wird. Spezielle [[Just-in-time-Kompilierung|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 reduzieren.&lt;ref&gt;{{Internetquelle |autor=Carles Mateo |url=http://blog.carlesmateo.com/2014/10/13/performance-of-several-languages/ |titel=Performance of several languages |werk=carlesmateo.com |datum=2017-03-26 |abruf=2021-04-08 |sprache=en |kommentar=Blogeintrag}}&lt;/ref&gt;</div></td> </tr> </table> Carrot account https://de.wikipedia.org/w/index.php?title=Bytecode&diff=249287336&oldid=prev Carrot account: /* Technische Details */ Aufzählung möglicherweise nicht vollständig. 2024-10-09T20:55:03Z <p><span class="autocomment">Technische Details: </span> Aufzählung möglicherweise nicht vollständig.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 9. Oktober 2024, 22:55 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 6:</td> <td colspan="2" class="diff-lineno">Zeile 6:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die virtuelle Maschine –&amp;nbsp;im Fall von Java die [[Java Virtual Machine]] (JVM)&amp;nbsp;– führt dann dieses Zwischenergebnis aus, indem sie zur [[Laufzeit (Informatik)|Laufzeit]] den Bytecode entweder in Maschinensprache für den jeweiligen [[Prozessor]] übersetzt ([[Just-in-time-Kompilierung]]) oder entsprechende Maschinencode-Routinen ausführt ([[Interpreter]]). Dabei muss die virtuelle Maschine für jede Rechnerplattform, auf der das Kompilat ausgeführt werden soll, vorhanden sein.&lt;ref&gt;{{Internetquelle |url=https://techterms.com/definition/bytecode |werk=techterms.com |titel=Bytecode |sprache=en |datum=2018-01-23 |zugriff=2018-10-19}}&lt;/ref&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die virtuelle Maschine –&amp;nbsp;im Fall von Java die [[Java Virtual Machine]] (JVM)&amp;nbsp;– führt dann dieses Zwischenergebnis aus, indem sie zur [[Laufzeit (Informatik)|Laufzeit]] den Bytecode entweder in Maschinensprache für den jeweiligen [[Prozessor]] übersetzt ([[Just-in-time-Kompilierung]]) oder entsprechende Maschinencode-Routinen ausführt ([[Interpreter]]). Dabei muss die virtuelle Maschine für jede Rechnerplattform, auf der das Kompilat ausgeführt werden soll, vorhanden sein.&lt;ref&gt;{{Internetquelle |url=https://techterms.com/definition/bytecode |werk=techterms.com |titel=Bytecode |sprache=en |datum=2018-01-23 |zugriff=2018-10-19}}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Java ist nur eines der prominenteren Beispiele für eine Bytecode-basierte Programmiersprache. Andere Sprachen, die Bytecodes verwenden, sind [[P-Code]], [[Lua]], die [[.Net-Framework]]-Sprachen [[C-Sharp|C#]], [[F-Sharp|F#]] und [[Visual Basic .NET|Visual Basic]], [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache)|Ruby]], [[Perl (Programmiersprache)|Perl]], [[PHP]], [[Prolog (Programmiersprache)|Prolog]], [[Limbo (Programmiersprache)|Limbo]], [[Gambas (Programmiersprache)|Gambas]] sowie [[Tcl]].&lt;ref name="itwissen" /&gt; Während bei Java, Python und .NET der Bytecode als „Kompilat“ gespeichert und dann unabhängig vom Quellcode ausgeführt wird, wird bei den [[Skriptsprache]]n Perl (bis Version&amp;nbsp;5) und Tcl beim Programmstart der Quellcode in Bytecode übersetzt und nur im Arbeitsspeicher vorgehalten.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Java ist nur eines der prominenteren Beispiele für eine Bytecode-basierte Programmiersprache. Andere Sprachen, die Bytecodes verwenden, sind<ins style="font-weight: bold; text-decoration: none;"> etwa</ins> [[P-Code]], [[Lua]], die [[.Net-Framework]]-Sprachen [[C-Sharp|C#]], [[F-Sharp|F#]] und [[Visual Basic .NET|Visual Basic]], [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache)|Ruby]], [[Perl (Programmiersprache)|Perl]], [[PHP]], [[Prolog (Programmiersprache)|Prolog]], [[Limbo (Programmiersprache)|Limbo]], [[Gambas (Programmiersprache)|Gambas]] sowie [[Tcl]].&lt;ref name="itwissen" /&gt; Während bei Java, Python und .NET der Bytecode als „Kompilat“ gespeichert und dann unabhängig vom Quellcode ausgeführt wird, wird bei den [[Skriptsprache]]n Perl (bis Version&amp;nbsp;5) und Tcl beim Programmstart der Quellcode in Bytecode übersetzt und nur im Arbeitsspeicher vorgehalten.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Verwendung von Bytecode macht es möglich, dieselbe virtuelle Maschine für mehrere Sprachen zu verwenden, beispielsweise die JVM für Java, [[Scala (Programmiersprache)|Scala]], [[Groovy]] und viele andere. Der Aufwand nur einen Bytecode-Compiler für eine höhere Programmiersprache zu entwickeln ist dann deutlich reduziert. Dagegen wäre der Aufwand, wenn ein Compiler eine direkte Übersetzung in Maschinencode für mehrere Betriebssysteme und Architekturen bereitstellen soll, sehr viel höher. Ein Bytecode kann auch unabhängig von einer speziellen Sprache für einen bestimmten Einsatzzweck entwickelt worden sein, zum Beispiel [[WebAssembly]].</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Verwendung von Bytecode macht es möglich, dieselbe virtuelle Maschine für mehrere Sprachen zu verwenden, beispielsweise die JVM für Java, [[Scala (Programmiersprache)|Scala]], [[Groovy]] und viele andere. Der Aufwand nur einen Bytecode-Compiler für eine höhere Programmiersprache zu entwickeln ist dann deutlich reduziert. Dagegen wäre der Aufwand, wenn ein Compiler eine direkte Übersetzung in Maschinencode für mehrere Betriebssysteme und Architekturen bereitstellen soll, sehr viel höher. Ein Bytecode kann auch unabhängig von einer speziellen Sprache für einen bestimmten Einsatzzweck entwickelt worden sein, zum Beispiel [[WebAssembly]].</div></td> </tr> </table> Carrot account https://de.wikipedia.org/w/index.php?title=Bytecode&diff=249267065&oldid=prev 2001:638:804:2084:BD71:978E:3F93:A88F am 9. Oktober 2024 um 08:31 Uhr 2024-10-09T08:31:23Z <p></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 9. Oktober 2024, 10:31 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 1:</td> <td colspan="2" class="diff-lineno">Zeile 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''Bytecode''' ist in der [[Informatik]] die Bezeichnung für eine Sammlung von [[Befehlssatz|Befehlen]] in binärer Form für eine [[virtuelle Maschine]]. Es kann sowohl ein Programm als auch die Vorgabe bezeichnen, mit der die Programme codiert sind. Bytecode ist im Gegensatz zu [[Quelltext]]en oder [[Skriptsprache|Skripten]] nicht „menschenlesbar“, Programmanweisungen und Werte sind wie in [[Maschinensprache|Maschinencode]] als „Bytes“ codiert<del style="font-weight: bold; text-decoration: none;">.</del> <del style="font-weight: bold; text-decoration: none;">Allerdings</del> mit dem Unterschied, dass Maschinencode direkt von einem [[Prozessor]] ausgeführt wird. Wenn man von „Bytecode“ spricht, betont es normalerweise, dass es sich nicht um Maschinencode handelt, und dieser von einem speziellen Programm „[[Interpreter|interpretiert]]“ werden soll bzw. allgemein: in Maschinencode übersetzt wird. Es schließt aber nicht aus, dass ein Bytecode durch passende Prozessoren ausführbar wäre.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''Bytecode''' ist in der [[Informatik]] die Bezeichnung für eine Sammlung von [[Befehlssatz|Befehlen]] in binärer Form für eine [[virtuelle Maschine]]. Es kann sowohl ein Programm als auch die Vorgabe bezeichnen, mit der die Programme codiert sind. Bytecode ist im Gegensatz zu [[Quelltext]]en oder [[Skriptsprache|Skripten]] nicht „menschenlesbar“, Programmanweisungen und Werte sind wie in [[Maschinensprache|Maschinencode]] als „Bytes“ codiert<ins style="font-weight: bold; text-decoration: none;">,</ins> <ins style="font-weight: bold; text-decoration: none;">allerdings</ins> mit dem Unterschied, dass Maschinencode direkt von einem [[Prozessor]] ausgeführt wird. Wenn man von „Bytecode“ spricht, betont es normalerweise, dass es sich nicht um Maschinencode handelt, und dieser von einem speziellen Programm „[[Interpreter|interpretiert]]“ werden soll bzw. allgemein: in Maschinencode übersetzt wird. Es schließt aber nicht aus, dass ein Bytecode durch passende Prozessoren ausführbar wäre.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Bei [[Compiler|Kompilierung]] eines Quelltextes mancher [[Programmiersprache]]n oder Umgebungen –&amp;nbsp;wie beispielsweise [[Java (Programmiersprache)|Java]]&amp;nbsp;– wird nicht direkt Maschinencode, sondern ein [[Zwischencode]], der Bytecode, erstellt.&lt;ref name="itwissen"&gt;{{Internetquelle |url=https://www.itwissen.info/Bytecode-bytecode.html |titel=Bytecode |werk=itwissen.info |datum=2013-11-02 |zugriff=2018-10-19}}&lt;/ref&gt; Dieser Code ist in der Regel unabhängig 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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Bei [[Compiler|Kompilierung]] eines Quelltextes mancher [[Programmiersprache]]n oder Umgebungen –&amp;nbsp;wie beispielsweise [[Java (Programmiersprache)|Java]]&amp;nbsp;– wird nicht direkt Maschinencode, sondern ein [[Zwischencode]], der Bytecode, erstellt.&lt;ref name="itwissen"&gt;{{Internetquelle |url=https://www.itwissen.info/Bytecode-bytecode.html |titel=Bytecode |werk=itwissen.info |datum=2013-11-02 |zugriff=2018-10-19}}&lt;/ref&gt; Dieser Code ist in der Regel unabhängig 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.</div></td> </tr> </table> 2001:638:804:2084:BD71:978E:3F93:A88F https://de.wikipedia.org/w/index.php?title=Bytecode&diff=237783954&oldid=prev 2A02:810D:5A40:33C:6025:7F5:9574:61: /* Hintergründe */ 2023-10-01T14:15:55Z <p><span class="autocomment">Hintergründe</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 1. Oktober 2023, 16:15 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 15:</td> <td colspan="2" class="diff-lineno">Zeile 15:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>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.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Auch dieses Verfahren ist sehr alt: Bereits für [[Lisp]] wurde in den 1960er Jahren Bytecompiling eingesetzt: Die 256 [[Lispatom|atomare]] Funktionen wurden in einem Byte kodiert<del style="font-weight: bold; text-decoration: none;">; was Anlass für die Namensgebung war</del>. Frühe [[BASIC]]-Versionen der 1970er und 1980er Jahre <del style="font-weight: bold; text-decoration: none;">verwandten</del> anstelle der Schlüsselwörter bestimmte Byte-Werte, sogenannte [[Token (Übersetzerbau)|Tokens]], um die Ausführung ihrer Programme zu beschleunigen und den Programmtext in einer kompakteren Form abzuspeichern. Der restliche Text&amp;nbsp;– zum Beispiel Variablen, mathematische Ausdrücke und Zeichenketten&amp;nbsp;– wurde jedoch unverändert gespeichert. Bei Ausgabe durch den LIST-Befehl wurden die Tokens wieder in lesbare Schlüsselwörter umgewandelt.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Auch dieses Verfahren ist sehr alt: Bereits für [[Lisp]] wurde in den 1960er Jahren Bytecompiling eingesetzt: Die 256 [[Lispatom|atomare]] Funktionen wurden in einem Byte kodiert. Frühe [[BASIC]]-Versionen der 1970er und 1980er Jahre <ins style="font-weight: bold; text-decoration: none;">verwendeten</ins> anstelle der Schlüsselwörter bestimmte Byte-Werte, sogenannte [[Token (Übersetzerbau)|Tokens]], um die Ausführung ihrer Programme zu beschleunigen und den Programmtext in einer kompakteren Form abzuspeichern. Der restliche Text&amp;nbsp;– zum Beispiel Variablen, mathematische Ausdrücke und Zeichenketten&amp;nbsp;– wurde jedoch unverändert gespeichert. Bei Ausgabe durch den LIST-Befehl wurden die Tokens wieder in lesbare Schlüsselwörter umgewandelt<ins style="font-weight: bold; text-decoration: none;">. Ein bekannter früher [[Heimcomputer]], der Bytecode verwendet, ist der [[Texas Instruments TI-99/4A|TI 99/4a]] von [[Texas Instruments]]</ins>.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Aufgrund des stark begrenzten Speicherplatzes der ersten Homecomputer war es unumgänglich, beispielsweise BASIC-Programme als Bytecode in den [[Random-Access Memory|RAM]] zu überführen. Alternativ konnte man nur mit direkt eingegebenen Maschinencode programmieren. Reiner Text wäre sehr schnell an die Speichergrenze gestoßen. Die Platzersparnis von Quelltexten in Bytecodeform war aber auch später noch angesichts langsamer und begrenzter Massenspeicher von Vorteil. Hinzu kommt der große Vorteil, dass Bytecode deutlich schneller ausgeführt 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 repräsentieren.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein bekannter früher [[Heimcomputer]], der Bytecode verwendet, ist der [[Texas Instruments TI-99/4A|TI 99/4a]] von [[Texas Instruments]].</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Rückgewinnung von Quelltext aus Kompilaten ==</div></td> </tr> </table> 2A02:810D:5A40:33C:6025:7F5:9574:61