Einen String als Funktions oder Methodendefinition in Java nutzen

Hallo,

Ich habe da mal eine sehr seltsame Frage.
Kann man in Java einen String in einen Funktion umwandeln?
Da die Frage sehr schwer zu formulieren geht mache ich mal ein Bsp.:

Kann ich den Text
„System.out.println(„Hallo World“);“
in den Methodenaufruf :
System.out.println(„Hallo World“);

umfunktionieren. Die Frage stellt sich mir da ich in einem wissenschaftlichen Projekt an den Quellcode des Systems nicht mehr herankomme. Super wäre es aber wenn ich eine spezielle Funktion die ich heute noch nicht kenne über eine Stringeingabe oder einen Reader später ausführen könnte. Dies soll eher als Backdoor und niemals zum normalen Betrieb sein. Über die Gefahr bin ich mir völlig bewußt.
Habt Ihr ne Idee??? Ich habe soetwas schon über batch und Fremdstartdatein gemacht. in diesem Fall aber MUSS ich an die Parameter des Programmes an sich heren und will den Linuxweg _ Alle Parameter in eine Textdatei_ nicht ran. Hier wäre der Speicher schlichtweg nicht vorhanden.

Danke für eure Ideen

Hallo!

Was du möchtest, ist klar: Du möchtest JAVA-Quellcode, der in einem String vorliegt, aus einem JAVA-Programm heraus ausführen. Dazu verweise ich mal auf diese Frage auf Stackoverflow, bzw das dort genannte javaparser.

Ich bin mir allerdings nicht sicher, ob das auch das leistet, was du möchtest.

Python bringt eine entsprechende Funktion direkt mit, und man kann daraus auch auf Variablen und Funktionen aus dem aufrufenden Code zugreifen:

 > a=5
 > exec("print a")
 5

In C geht sowas überhaupt nicht, alleine schon, da nach dem Kompilieren die Variablen- und Funktionsnamen futsch sind.

Bei Java wäre ich mir da auch nicht so sicher, schließlich ist das auch mit Hinblick auf gewisse Sicherheiten entwickelt worden.

Ich frage mich aber, ob es keine besseren Möglichkeiten für dich gibt.

Denkbar wäre, wenn es nur um Parameter geht, eine Funktion zu schreiben, die versteht, welchen Parameter du gerne hättest, und diesen dann rausgibt. Das geht aber i.A. auch nicht ganz automatisch.

Je nachdem, was du später willst, könntest du den späteren Code auch in eine Bibliothek mit Zugriff auf deine Funktionen und Variablen packen, und dein jetziger Code prüft die Existenz der Bibliothek, und führt den Inhalt aus. Das ist etwas mehr Aufwand, aber auch sehr mächtig.

Hi!

In einer Interpretersprache o.ä. wäre das Ganze kein Problem, aber da JAVA-Code compiliert werden muß, stellt sich die Frage, wie ein nicht-compilierter Code ausgeführt werden soll?

Es ist natürlich möglich, allerdings nur über Umwege und dazu äußerst gefährlich, da es Tür und Tor für eine Code-Injection öffnet.

Das wären die richtigen (und sicheren) Ansätze für das Problem.

Natürlich gibt es Fälle, in denen so etwas unumgänglich ist (mache ich täglich mit Oracle-SQL-Abfragen), allerdings sollte das System rundherum auch dementsprechend abgesichert sein.

Grüße,
Tomh

Vielen Dank.
Hat auch super funktioniert. Eine Sicherheitslücke gibt es durch den Sicherheitsbereich in dem ein Systemzugriff besteht nicht.

Dieser hinweis ist aber super wichtig wenn man hier mit Usern oder öffentlichen Zugriffen arbeitet.

Leider kann ich aus Systemgründen nur auf Java zurückgreifen.

Moin,

Hab das getestet und es funktioniert wirklich gut. Ein paar keine Macken aber es hat ansich alles was man als Normalo so braucht.

Danke

Eigentlich funktioniert ja so jede Shell, d.h. alle Sprachen, in denen ein Shell programmiert werden kann (z.B. C…), müssen das können. zB mit system-Aufrufen, weiterleiten an die Systemebenen …

Das Programm kann sich aber eher (noch) nicht während der Laufzeit selbst modifizieren, oder geht das heute schon, zB wenn ich add und vllt ein bisschen code danach soll das Programm damit addieren lernen können…? Sich dahingehend umbauen?