动态字节码执行

时间:2010-12-09 07:13:37

标签: java bcel

好吧所以我正在尝试编写一个通用字符串反混淆器(类似于.NET与Simple Assembly Explorer的相似)

我想要做的是通过BCEL获取方法的指令,并使用我提供的参数执行它们,并且可以访问该方法的输出。这可能与任何现有的库有关吗?如果是这样,我可以得到一些帮助吗?

由于

1 个答案:

答案 0 :(得分:1)

BCEL和反射/调用的组合可以完成这项工作。使用BCEL获取类和方法的名称(您的LDCinvokestatic技巧或类似的东西)并立即调用该方法。如果将“测试类”放在类路径上,则可以执行此操作。对我来说,不需要执行字节代码。


如果你有一个类和一个方法名,它就是这样的:

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