Was ist ASM (Java-Bytecode)? Bibliotheks-Erklärung

ASM ist eine Java-Bibliothek zum Lesen und Schreiben von JVM-Bytecode zur Laufzeit. Hier ist, was sie tut, wie sie funktioniert und warum Minecraft-Mods darauf angewiesen sind.

Librariesby trqUpdated June 4, 2026
Key takeaways
  • ASM ist eine Java-Bibliothek zum Lesen, Ändern und Schreiben von JVM-Bytecode.
  • Sie arbeitet mit kompilierten .class-Dateien und kann so eine Klasse umschreiben, ohne sie neu kompilieren zu müssen.
  • Mods verwenden sie, um das bereits kompilierte Spiel beim Laden zu patchen.
  • Die meisten Modder nutzen Mixin, das auf ASM aufbaut und die Details verbirgt.

ASM ist eine Java-Bibliothek zum Lesen, Ändern und Schreiben von JVM-Bytecode. Sie arbeitet mit kompilierten .class-Dateien anstelle von Quellcode, sodass sie eine Klasse inspizieren oder umschreiben kann, ohne sie neu kompilieren zu müssen. Minecraft-Mods nutzen sie, da sie es ihnen ermöglicht, das Spiel zur Laufzeit zu patchen, nachdem es bereits kompiliert wurde.

Wo Opal passt

Opal ist ein Fabric Mod, und Fabric-Mods greifen über diese Bytecode-Schicht in den Spielcode ein. Sie müssen diese Schicht nicht direkt anpassen: Die Skript-Engine bietet Ihnen eine saubere Möglichkeit, Opal zu erweitern, ohne Bytecode schreiben zu müssen.

Was ASM tatsächlich tut

ASM wandelt eine kompilierte Klasse in etwas um, das ein Programm bearbeiten kann. Eine .class-Datei ist lediglich Bytecode, die Anweisungen, die die Java Virtual Machine ausführt. ASM parst diesen Bytecode, übergibt Ihnen die Methoden und Felder und ermöglicht es Ihnen, Anweisungen hinzuzufügen, zu entfernen oder zu ändern. Anschließend schreibt es eine neue, gültige Klasse zurück.

Plain Java kann dies nicht von selbst. Der Compiler wandelt Ihren Quellcode einmal in Bytecode um, und danach ist der Bytecode fixiert. ASM greift auf Bytecode-Ebene ein, was die Schicht unterhalb des Quellcodes ist, den Sie normalerweise schreiben

Wie es funktioniert

ASM liest eine Klasse mit einem ClassReader und schreibt eine mit einem ClassWriter. Zwischen diesen beiden durchläuft Ihr Code die Teile der Klasse und entscheidet, was geändert werden soll. Es gibt zwei Möglichkeiten, dies zu tun.

Der Visitor-Ansatz durchläuft die Klasse Element für Element. Er ist schnell und benötigt wenig Speicher, da er die gesamte Klasse nie auf einmal hält. Der Tree-Ansatz lädt die Klasse in Objekte, die Sie frei durchlaufen und bearbeiten können, was für größere Änderungen leichter nachzuvollziehen ist, aber mehr Speicher verbraucht.

AnsatzFunktionsweiseAm besten geeignet für
Visitor APIÜberträgt Klasse-Ereignisse während des LesensKleine, schnelle Änderungen mit wenig Speicherbedarf
Tree APIErstellt ein bearbeitbares Objektmodell der KlasseGrößere oder komplexere Neuschreibungen

Warum Minecraft-Mods es verwenden

Mods müssen Spielcode ändern, den sie nicht geschrieben und nicht neu kompilieren können. Das Spiel wird als kompilierte Klassen ausgeliefert, sodass der einzige Weg hinein auf Bytecode-Ebene liegt, und genau das bietet ASM. Ein Mod kann einen Hook in eine Spielmethode einfügen, einen Aufruf umleiten oder ein Feld hinzufügen, alles zur Laufzeit.

Die meisten Modder rufen ASM nicht manuell auf. Sie verwenden Mixin, ein höherwertiges Framework, das auf ASM aufbaut und einfache Annotationen in die darunterliegenden Bytecode-Änderungen umwandelt. Sie schreiben eine kleine Java-Klasse, die die Änderung beschreibt, und das Framework erledigt die Low-Level-Arbeit mit ASM für Sie. Fabric-Mods stützen sich insbesondere auf diese Kette.

Wann Sie ASM direkt ansprechen würden

Sie schreiben selten rohes ASM als Mod-Autor. Es taucht auf, wenn ein Tool mehr Kontrolle benötigt, als eine Annotation ausdrücken kann, wie z. B. ein Loader, ein Obfuskator oder ein Patcher, der Klassen komplett neu schreibt. Für alltägliche Mods reicht die Annotationsebene aus, und sie ist viel weniger fehleranfällig.

FAQ