Angesichts der .class-Datei der Java-Klasse A gibt es einen Weg (mit BCEL, ASM, etc. zum Beispiel), eine bestimmte Bytecode-Sequenz zu extrahieren (angenommen, es ist ein Basisblock) , platzieren Sie es an einem separaten Ort, und führen Sie später diese Sequenz von Bytecodes aus?Extrahieren und Ausführen einer beliebigen Folge von Java-Bytecodes
Beispiel: Quellcode hat die Zeilen ... a + = b; b + = 21; . .
Ich habe nur Zugriff auf die Bytecode-Darstellung. Ich möchte diese Bytecodes extrahieren und sie als Blackbox behandeln. In den Anweisungen der Klasse A anstelle der Quellzeile 'a + = b;' Ich möchte, dass es auf diese externe Black Box X zeigt, die die passende fehlende Bytecode-Sequenz enthält. Ich möchte der Black Box alle notwendigen Variablen auf dem Stack-Frame zuführen (zum Beispiel die aktuellen Werte von a, b, vielleicht Methodenparameter, die in der Blackbox X zu verwenden sind ...) und dann nach der Ausführung der Bytecode-Sequenz Die Blackbox gibt die Kontrolle an die ursprüngliche Klasse A zusammen mit den neu aktualisierten Rahmenvariablen zurück ...
Danke für jede Idee.
Edit:
Wie unten vorgeschlagen, die Black Box am vernünftigsten wäre innerhalb einer Stub-Klasse-Datei eine Stub-Methode sein. Die Frage wird dann, wie kann ich diese wohlgeformte Stub-Klasse und -Methode aus dieser Befehlssequenz am vernünftigsten erzeugen, und wie steuere ich die Steuerung von der ursprünglichen Klasse A. Idealerweise würde dies 'offline' beim Kompilieren erfolgen Zeit.
Großer Artikel. Ein großer Grund, warum ASM ein so gutes Werkzeug ist, ist die hervorragende Dokumentation. – ChaimKut