3
A
回答
3
但是,我们不能确定类本身是否安全。 SecurityManager的安全网仍然会阻止该类访问网络和本地硬盘等受保护的资源,但这本身还不够。该类可能包含非法字节码,伪造指向受保护内存的指针,溢出或下溢程序堆栈,或以某种其他方式破坏JVM的完整性。检查主题的类文件验证在[1]:http://medialab.di.unipi.it/doc/JNetSec/jns_ch5.htm
0
源代码被编译成字节码,这是分发给用户。如果字节码已经被破坏,或者不是由java编译器创建的,那么它可能是非法的,这意味着字节没有意义。
2
的byte code verifier使下列检查:
- 分行必须是码阵列的方法的范围内。
- 所有控制流程指令的目标都是指令的开始。在宽指令的情况下,宽操作码被认为是指令的开始,并且由该宽指令修改操作的操作码不被视为开始指令。分支到指令的中间是不允许的。
- 没有指令可以访问或修改大于或等于其方法指示分配的局部变量数的索引处的局部变量。
- 所有对常量池的引用都必须是相应类型的条目。例如:指令ldc只能用于int或float类型的数据或类String的实例; getfield指令必须引用一个字段。
- 代码不会在指令中间结束。
- 执行不能脱离代码的末尾。
- 对于每个异常处理程序,由处理程序保护的代码的起点和终点必须位于指令的开始位置,或者在终点处立即位于代码的末尾。起点必须在结束点之前。 - 异常处理程序代码必须从有效指令开始,并且它可能不会从宽指令修改的操作码开始。
相关问题
- 1. 什么是Java字节码注入?
- 2. 什么是活字节?
- 3. 为什么这个javascript代码片段触发“Unexpected token ILLEGAL”?
- 4. 字节码优于本地代码的优点是什么?
- 5. 什么是多字节字符集?
- 6. 为什么MongoId不是12字节长,而是24字节?
- 7. 为什么Kotlin字节码引用java.util.function.BiConsumer?
- 8. 什么字节码库控制行号?
- 9. 为什么setuptools需要写字节码?
- 10. 什么是字符编码?
- 11. 什么是键盘单字节字符代码和键盘双字节字符代码
- 12. Dalvik字节码中的“ins”和“outs”是什么?
- 13. 字节码操作的危害是什么(如果有的话)?
- 14. 为什么类定义总是产生相同的字节码?
- 15. JVM /字节码/处理器的断点究竟是什么?
- 16. TCL proc和字节码编译 - 链接是什么?
- 17. 密码保护的ZIP文件的字节签名是什么?
- 18. 什么是字节的MINVALUE []在C#
- 19. 什么是字节状物体
- 20. SAS LENGTH语句:什么是字节?
- 21. 字节和平均值是什么?
- 22. 为什么sizeof(13.33)是8个字节?
- 23. 为什么字节是颠倒的?
- 24. 不同字节的优点是什么?
- 25. 什么是JSON八位字节,为什么需要两个?
- 26. 将源代码转换为Java字节码的实用程序是什么
- 27. 什么是将字符串转换为字节数组的合适编码
- 28. 是否可以将LLVM字节码转换为Java字节码?
- 29. 什么是KeyboardEvent#细节?
- 30. 什么是属性节点
该链接非常有用。 – Geek 2009-11-17 07:08:50