Frage

Wie benenne ich die Dinge BCEL verwenden? Bis jetzt, was ich tue, ist in einer Klasse durch jede Methode gehen und eine neue NameAndType Konstante im Konstanten-Pool erstellen, dann ersetze ich die alte NameAndType konstant mit, dass man

int nameRef = cpg.addNameAndType(newName, m.getSignature());
cpg.setConstant(m.getNameIndex(), cpg.getConstant(nameRef));

Dies scheint, wie es funktionieren soll, aber meine Decompiler sagen mir der ständige Pool ist beschädigt danach. Bin ich einen Schritt oder etwas fehlt?

War es hilfreich?

Lösung

Sie gehen davon aus, dass der ConstantPoolGen ist nur eine Tabelle von Indizes und Werten. Aber ich glaube, dass tatsächlich hat es eine viel kompliziertere innere Struktur. Mit Blick auf die ConstantPoolGen Methode ist es klar, dass es auch Hinweise auf MethodGen Objekte hält, die mich oder nicht aktualisiert, wenn Sie Ihren Code ausführen.

Ich rate Ihnen, nicht die Constant Pool direkt zu manipulieren, aber jede Methode der Klasse (als MethodGen Objekt) zu erhalten, und die Methode setName() verwenden. Der konstante Pool wird automatisch aktualisiert.

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