用于在现有项目中进行字节码验证的Java Path Finder,Bytecode验证

时间:2012-03-26 13:53:31

标签: java bytecode

我正在尝试使用JPF来验证运行时使用javassist生成的字节码。

我正在尝试验证的代码是在我的程序运行时由用户提供的。因为我无法检查所有OOP模型和类似的东西,所以在运行代码之前我需要验证过程。

目前我只是从他的类中使用javassist生成字节码。

我现在的问题是我有时会遇到异常,因为用户做了一些继承错误和事情,我的应用程序关闭了异常,因为我试图加载并执行他的类。

因此,我想在运行时验证生成的字节码,以避免此类异常,并提前知道用户提供的类是否有错(或包含任何问题)。

在运行时,JPF可以实现吗?

关于此的任何其他解决方案?

谢谢!

3 个答案:

答案 0 :(得分:2)

由于JPF使用BCEL Stand-alone Bytecode Verifier可能会有所帮助。只需以编程方式调用Verifier类 - 甚至可以深入了解此类的详细信息。 HTH

答案 1 :(得分:1)

有许多要检查的要点:

从我的观点来看,ClassLoader执行所有这些步骤,但它通常一次只加载一个类,并且只在需要时加载。

在您的上下文中,我建议您编写一个ClassLoader,按顺序加载生成的字节码中的所有类,并使用捕获的异常报告每个失败的类名。 ClassLoader通过对相关父ClassLoader的引用进行实例化,并在测试通过后被丢弃,然后生成的字节码由运行时上下文的原始ClassLoader加载。

由于OSGi可能会实现此类加载检查,但它需要比独立的ClassLoader更多的努力。

答案 2 :(得分:0)

如果您没有绝对要求使用JPF,则ASM库包含可以验证字节代码的CheckClassAdapter。然而,这只是一种健全性检查 - 我不相信这会导致继承等问题。