我正在尝试使用JPF来验证运行时使用javassist生成的字节码。
我正在尝试验证的代码是在我的程序运行时由用户提供的。因为我无法检查所有OOP模型和类似的东西,所以在运行代码之前我需要验证过程。
目前我只是从他的类中使用javassist生成字节码。
我现在的问题是我有时会遇到异常,因为用户做了一些继承错误和事情,我的应用程序关闭了异常,因为我试图加载并执行他的类。
因此,我想在运行时验证生成的字节码,以避免此类异常,并提前知道用户提供的类是否有错(或包含任何问题)。
在运行时,JPF可以实现吗?
关于此的任何其他解决方案?
谢谢!
答案 0 :(得分:2)
由于JPF使用BCEL Stand-alone Bytecode Verifier可能会有所帮助。只需以编程方式调用Verifier类 - 甚至可以深入了解此类的详细信息。 HTH
答案 1 :(得分:1)
有许多要检查的要点:
从我的观点来看,ClassLoader
执行所有这些步骤,但它通常一次只加载一个类,并且只在需要时加载。
在您的上下文中,我建议您编写一个ClassLoader
,按顺序加载生成的字节码中的所有类,并使用捕获的异常报告每个失败的类名。 ClassLoader通过对相关父ClassLoader的引用进行实例化,并在测试通过后被丢弃,然后生成的字节码由运行时上下文的原始ClassLoader加载。
由于OSGi可能会实现此类加载检查,但它需要比独立的ClassLoader更多的努力。
答案 2 :(得分:0)
如果您没有绝对要求使用JPF,则ASM库包含可以验证字节代码的CheckClassAdapter。然而,这只是一种健全性检查 - 我不相信这会导致继承等问题。