2010-12-28 1 views
3

J'écris une interface C dans une bibliothèque Java qui appelle System.exit(). J'appelle:Comment piéger System.exit() dans le code appelé à partir de JNI

/* Calls the main method for the class */ 
printf("about to call main\n"); 
(*env)->CallStaticVoidMethod(env, mainClass, mainMethod, args); 
printf("returning from main\n"); 

I (malheureusement) n'ont pas la possibilité de changer la bibliothèque, mais je voudrais encore pour la machine virtuelle Java pour revenir le contrôle à la fonction d'appel C (je peux faire divers nettoyage tâches, etc.). Y a-t-il un moyen d'amener JNI à le faire, ou suis-je SOL?

Merci,

+1

Pourquoi la réponse pessimiste et incorrecte est-elle toujours acceptée? – Philippe

+0

parce que je n'ai pas accès à la source de la bibliothèque pour faire les changements que vous suggérez. À moins que je ne manque quelque chose. – PerilousApricot

Répondre

8

Vous n'avez pas besoin de l'édition bytecode pour le cas si simple, beaucoup de mesures de sécurité qui est mis en œuvre dans le bon vieux java.

System.setSecurityManager(SecurityManager) lancer une erreur (comme ThreadDeath) dans checkExit() et en supposant System.exit(int) [erm Runtime.getRuntime().exit(int)] est invoqué dans le même fil, il devrait le faire.

+0

Effectivement. Plus clair que moi. – bmargulies

Questions connexes