Question
D'accord, donc je suis en train d'écrire une DeObfuscator chaîne générique (similaire à ce que .NET a avec Simple Explorateur Assemblée)
Ce que je veux faire est de saisir par BCEL et les exécuter les instructions d'une méthode avec des arguments que je propose et avoir accès à la sortie de cette méthode. Est-ce possible de faire avec les bibliothèques existantes? Si oui, puis-je obtenir de l'aide?
Merci
La solution
Une combinaison de BCEL et de réflexion / appel pourrait faire le travail. Utilisez BCEL pour obtenir les noms des classes et méthodes (votre LDC
, tour de invokestatic
ou similiar quelque chose) et invoquer le droit de méthode après. Vous pouvez le faire si vous mettez vos « classes de test » sur le chemin de classe. Pour moi, il n'y a pas besoin d'exécuter du code d'octets.
Si vous avez une classe et un nom de méthode, il va comme ceci:
Class clazz = Class.forName(yourClassName);
// either (for public methods)
Method method = clazz.getMethod(yourMethodName);
// or for protected / private methods:
Method method = clazz.getDeclaredMethod(yourMethodName, yourArgumentTypes);
method.setAccessible(true);
// assuming the method is static
Object result = method.invoke(null, yourMethodArgs);
// otherwise: pass a object reference instead of null
// to call the method "on" that object