Jar injecten

Mether

Cadet 3rd Year
Registriert
Mai 2013
Beiträge
57
Hallo, ich muss einer bereits laufenden jar ein paar Werte hinzufügen und mir wurde dazu Javassist und Agent nähergelegt.

Ich habe es jetzt mal an einem einfach Programm versucht, was auch funktioniert hat. Wobei die zu injectende Klasse innerhalb der Agent jar liegt.

Nun habe ich eine eigene jar erstellt mit while(true) syso(hello); und wollte dieser mit meinem Agent false übergeben, was ich aber irgendwie nicht hinbekomme, weil ich sie nicht ausführen kann.

Ich starte mit: java -javaagent:Agent.jar Schleif
Dabei startet der Agent, aber Hauptklasse Schleif wird nicht gefunden. Ich schätze mal, dass ich irgendwas mit den packages machen muss, hab aber keine Ahnung was.

Im Manifest von Agent steht die Premain-Class: Agent sowie der BootClassPath für javassist und die Main-Class, die dann wohl injection.Schleife.Schleif ist oder?

Meine Projektstruktur sieht so aus:
injection
-Agent
--src
-Schleife
--src
---Schleif

Wenn ich in meinem Transformer die Abfrage: "className.equals("Schleif"), habe reicht, dass schon? Das heißt dann doch nur, dass er in der JVM nachschaut obs so eine Klasse gibt oder nicht.

Wenn ich Werte von ein paar Variablen haben möchte wie kann ich das am Besten machen? Ich kenne zwar die Klasse CtField aber im Endeffekt bekomme ich da wohl nur die Variablen der Klasse, wie kann ich es machen wenn die Variablen, an die ich möchte nur innerhalb der Methode existieren?
Das einzige was ich dazu gefunden habe ist von objectweb.asm, was ich mir wenn es möglich ist aber nicht unbedingt antun möchte.

2.)
Habe ich das richtig verstanden, dass der Agent nur eine Klasse ist, die eben die JVM kennt und weiß, dass sie ausgeführt werden muss, und der Agent dann auf meinen Transformer refernziert.

mfg
 
Zurück
Oben