【问题标题】:How to verify Java Bytecode before injecting into the JVM?如何在注入 JVM 之前验证 Java 字节码?
【发布时间】:2012-03-29 13:40:40
【问题描述】:

我正在尝试验证“动态”生成的字节码!

我已经进行了几次尝试,一次尝试是在运行时使用 eclipse 编译器编译我的类,另一种尝试是从内存中编译,如下所述:

Compile From Memory

第一个结果看起来不错,但我仍然不能 100% 确定根据 JAVA 6 准则和安全测量以及正常的 OOP 模型验证过程是否真正有效。

关于如何验证字节码有更好的方法吗?

【问题讨论】:

  • 这与[装配]有什么关系?我猜你的意思是 [java-bytecode-asm],对吧?
  • “验证”是什么意思?你的意思是例如类型检查?
  • 我从来没有使用过汇编标签,不知道为什么会出现这个...
  • 为什么我的意思是验证是我需要确保不存在诸如错误继承之类的原理图问题,所以我只需要确保我的字节码不会违反 java 6 规则

标签: java bytecode javassist java-bytecode-asm bcel


【解决方案1】:

如果您使用标准类加载器加载生成的字节码,JVM 的字节码验证器将为您验证(确保其类型检查,永远不会落在方法的“边缘”等)字节码。

【讨论】:

  • 好的,它有效。但是有没有办法获得更好的异常/错误报告?或者获取验证失败的原因?
  • 我不知道。尽管有很多字节码黑客攻击,但我从未找到调试此类问题的好方法。
  • @Evils JVM 没有为验证失败提供有用的错误消息。您唯一的选择是重新编译 JVM 或使用不同的工具。实际上我自己写了一个,但可能还有其他工具也可以提供帮助。
【解决方案2】:

您可以使用the class verifier provided by the ASM toolkit。这不需要 JVM 实际加载类,并为您提供更详细的验证错误报告。

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
猜你喜欢
  • 2017-11-17
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 2010-11-15
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
相关资源
最近更新 更多