Conversione di codice Java eseguito per dipendenza in codice nativo

-2

È, almeno teoricamente, possibile convertire un'applicazione Java in codice nativo che può essere eseguito da qualcos'altro scritto in Java? Un esempio di questo potrebbe essere un server Minecraft Spigot. È possibile codificare i plug-in e inserirli nella cartella dei plug-in del server Spigot. Il server quindi esegue e quindi esegue i plug-in che interagiscono con il server. Sarebbe possibile compilarlo al codice nativo? Se è così, come (i plugin Spigot non hanno un metodo principale, ecco perché excelsior jet non lo convertirà, c'è un modo per aggirare questo?)? E il plugin interagirebbe normalmente con il server Java, considerando che il server Java avrebbe dovuto interagire con il codice nativo?

Un'ulteriore domanda è che il codice nativo finisce nell'esecuzione nella JVM, è più sicuro di una normale applicazione Java in esecuzione in memoria? Quello che intendo è quando si esegue un'applicazione Java, è in memoria e si può scaricare il bytecode. Il codice nativo sarebbe diverso se non fosse nativo?

Sto pensando a qualcosa di sbagliato? Ti chiedo di includere anche eventuali riferimenti o articoli nelle tue risposte.

Grazie

EDIT: Quando parlo di conversione di Java in codice nativo, sto parlando di utilizzare qualcosa come Excelsior Jet , spiegato < a href="https://www.excelsiorjet.com/internals"> qui , che è essenzialmente un compilatore AOT che ha anche un compilatore JIT per tutto ciò che deve essere eseguito al volo.

Le mie domande specifiche sono le seguenti:

  • Posso convertire qualcosa che deve essere eseguito da qualcos'altro scritto in Java?
  • Il plug-in convertito interagirà allo stesso modo con il server che se non fosse codice nativo?
  • Il codice nativo viene quindi eseguito nella JVM? O è interagito esclusivamente con JVM?
  • Il bytecode può quindi essere scaricato nello stesso modo in cui è possibile eseguire il bytecode normale? ( esempio qui o modificando OpenJDK)
  • E, infine, il codice nativo potrebbe essere facilmente riprogettato o leggibile come il normale codice Java?
posta WampyCakes 29.05.2018 - 20:19
fonte

2 risposte

0

Am I thinking about any of this wrong?

Sì! Molto sì. Ma questa è un'ipotesi, dal momento che non so davvero cosa stai cercando di fare; la vera risposta è probabilmente.

Can I convert something that needs to be run by something else written in Java?

In che modo questo 'qualcos'altro' sta eseguendo il codice? Se si aspetta il bytecode Java e tu lo dai a nativo, non funzionerà. La shell 'qualcos'altro' richiama il bersaglio? Puoi modificare qualcos'altro? Se così fosse, almeno in teoria, converti l'intera cosa. Questo è ciò che intendeva dire rwong fornendo il punto di ingresso.

Will the converted plugin interact the same way with the server than if it weren't native code?

No! Non senza modifiche aspettarsi codice nativo e un modo per eseguirli. (Supponendo che la conversione sia possibile.)

Is the native code then run in the JVM? Or is it exclusively interacted with by the JVM?

La JVM è scritta in codice nativo e esegue java bytecode non nativo; non eseguirà il codice nativo.

Can the bytecode then be dumped the same way that normal bytecode can be dumped?

Che bytecode, stai parlando della conversione in codice nativo; probabilmente.

And, finally, would the native code be as easily reverse engineered or as readable as normal Java code?

Codice sorgente Java o codice byte java? In entrambi i casi questo è in gran parte irrilevante.

    
risposta data 29.05.2018 - 22:50
fonte
0

Riguardo alla tua prima domanda, è totalmente possibile costruire un plugin e farlo caricare in fase di runtime. In C #, l'ho fatto con successo usando il Managed Extensibility Framework di Microsoft. Sembra che Java abbia alternative per fare la stessa cosa anche se non ho tentato esso.

Non sono a conoscenza di alcuna possibilità di utilizzare questi tipi di framework con codice nativo. In generale, a meno che il codice non sia già stato scritto in una lingua nativa, non ci sarebbe motivo di spostarlo da Java a una lingua nativa, specialmente dato che il programma host è scritto in Java.

Tuttavia, l'applicazione deve ovviamente essere consapevole e osservare questi plugin per caricarli. Ciò significa che dovresti modificare la tua applicazione principale per utilizzare uno di questi framework o in qualche modo implementarlo tu stesso.

    
risposta data 29.05.2018 - 20:53
fonte

Leggi altre domande sui tag