lokale Varbiablen mit Reflections auslesen nicht möglich - Belege
-
Soweit ich weiß landen lokale Variablen auch in Java auf einem Funktionsstack und haben, aus diesem Grund, einfach keinen Namen mehr in der .class-Datei und können auch nicht mehr über Reflections ausgelesen werden.
Aber wo ist das Festgelegt, dass das so ist? Kann es möglicherweise sein, dass irgendeine Implementierung von einem Javacompiler dennoch diese Informationen in die .class-Datei packt?
Schlage mich gerade durch die language specifications ( http://java.sun.com/docs/books/jls/download/langspec-3.0.pdf ) werde aber einfach nicht fündig =S
Für alle Ideen, Informationen, Nachweise, Links, Belege bin ich dankbar
-
Hi
Welche lokalen Variablen meinst du? Die die in einer Klasse private sind?
Ich weiß das man mittels Reflections auch private Methoden aufrufen kann. Somit könnte ich mir sehr gut vorstellen auch private Variablen abzufragen bzw. deren Wert zu verändern.
-
meines wissens nach kann man mit reflections sehr wohl auf private variablen (lokale variablen? ) zugreifen
class SecretClass { private final String secretID; public SecretClass(String secretID) { this.secretID = secretID; } } class Hack { public static void main(String[] args) throws ... { SecretClass secret = new SecretClass("geheim"); hackIt(secret); } static void hackIt(Class secret) throws ...{ Field f = SecretClass.class.getDeclaredField("secretID"); f.setAccessible(true); System.out.println("SecretID: " + f.get(secret); } }
PS: das läuft nicht aber ich denke/hoffe die theorie sollte klar sein. was alles an exceptions kommen kann etc pp sollte klar sein? und im sinne des erfinders ist es auch nicht wirklich. theoretisch kommt man aber auch an private variablen ran.
-
Dumm nur dass es hier um lokale variablen und nicht um private geht. Und wozu will man überhaupt lokale Variablen per Reflection ansprechen? :xmas2:
-
Hallo,
ich meinte lokale Variablen einer Methode.
Habe die "Java Virtual Machine Specification" ( http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html ) gefunden und darin ein bisschen gestöbert.
Die Antwort steht einerseits in 3.6.1 ( http://java.sun.com/docs/books/jvms/second_edition/html/Overview.doc.html#15722 )Local variables are addressed by indexing. The index of the first local variable is zero. An integer is be considered to be an index into the local variable array if and only if that integer is between zero and one less than the size of the local variable array.
Beziehungsweise in 4.7.9 ( http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#5956 ) wiederum:
The LocalVariableTable attribute is an optional variable-length attribute of a Code (§4.7.3) attribute. It may be used by debuggers to determine the value of a given local variable during the execution of a method.
Sofern ich das richtig verstanden habe, sind die Namen von lokalen (Methodenebene) Variablen nicht in der .class-Datei enthalten, es sei denn irgend ein Debugmodus wird beim Compilieren aktiviert =S
Vielleicht hilft das ja noch jemandem, der auch auf der Suche dannach ist
-
Hi
Was willst du den eigentlich mit den namen der lokalen Variablen in den Funktionen willst?