Frage

Ich versuche, die Java Byte Code Engineering-Bibliothek verwenden ASM statische Analyse durchzuführen. Ich habe die Situation, wenn Ich mag würde die Variablen überprüfen, um ein Feld zugeordnet ist.

Ich habe MethodVisitor die die visitFieldInsn() Methode implementiert. Ich bin auf der Suche speziell für den putfield Befehl. Das ist kein Problem. Das Problem ist, dass, wenn ich putfield begegnen, möchte ich die Variable zugreifen können, die auf das Feld zugeordnet sind los werden. Insbesondere möchte ich Informationen über den Zugriff der type der Variablen.

Im Moment brauche ich wirklich nur schauen, was ist an der Spitze des Stapels, aber wenn es eine allgemeinere Art und Weise ist es zu untersuchen, das ist noch besser.

Gibt es eine Möglichkeit ASM mit den Variablen auf dem Stapel zu untersuchen?

War es hilfreich?

Lösung

Vor allem, wenn Sie, dass Bytecode gültig ist die Art von Wert zu einem Feld zugewiesen nehmen können, sollte den Feldtyp entspricht, die Sie im Voraus mit ClassReader API lesen können.

Allerdings, wenn Sie verfolgen müssen, wo jeder einzelne Wert auf einen Stapel oder variable Schlitz für gegebene Befehlszeiger herkommt, können Sie den Analyzer API mit SourceInterpreter verwenden. Grundsätzlich wäre es erlauben Anweisung zu finden, die bestimmten Wert erzeugt und Sie können Informationen über diesen Befehl verwenden, um einen Typ ableiten (zB wenn es aus einer Variablen liest, die sich auf ein Verfahren Parameter entspricht oder wenn der Wert von einem Methodenaufruf zurückgegeben worden, so in beide Fälle können Sie die Art von Methodenbeschreiber) erhalten. siehe auch meine alte Blog-Post, die ein Beispiel für die Verwendung SourceInterpreter hat.

Andere Tipps

Ich bin nicht vertraut mit ASM, aber ich habe etwas getan, das mit dem Eclipse-Java AST Rahmen ähnlich klingt. Um zu wissen, über Variablen, hatte ich den Überblick über Variablendeklarationen zu halten mich in der entsprechenden visitX () Methoden des AST Besucher. Es war nicht sehr schwer, wenn ich wusste, dass die AST-Knoten Variablendeklarationen entspricht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top