Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是非法字节码?_Java_Bytecode - Fatal编程技术网

Java 什么是非法字节码?

Java 什么是非法字节码?,java,bytecode,Java,Bytecode,在阅读Java安全性时,我遇到了以下句子,但在互联网上没有得到任何令人满意的解释。谁能解释一下吗 防止使用字节码加载类 防止在非法包中加载 源代码被编译成字节码,并分发给用户。如果字节码已经损坏,或者不是由java编译器生成的,那么它可能是非法的,这意味着字节没有意义。但是,我们不能确保类本身是安全的。仍然存在SecurityManager的安全网,它将阻止类访问受保护的资源,如网络和本地硬盘,但这本身是不够的。该类可能包含非法字节码、伪造指向受保护内存的指针、程序堆栈溢出或下溢,或者以其他方

在阅读Java安全性时,我遇到了以下句子,但在互联网上没有得到任何令人满意的解释。谁能解释一下吗

  • 防止使用字节码加载类
  • 防止在非法包中加载

    • 源代码被编译成字节码,并分发给用户。如果字节码已经损坏,或者不是由java编译器生成的,那么它可能是非法的,这意味着字节没有意义。

      但是,我们不能确保类本身是安全的。仍然存在SecurityManager的安全网,它将阻止类访问受保护的资源,如网络和本地硬盘,但这本身是不够的。该类可能包含非法字节码、伪造指向受保护内存的指针、程序堆栈溢出或下溢,或者以其他方式破坏JVM的完整性。检查主题[1]中的类文件验证程序进行以下检查:

      • 分支必须在方法的代码数组的范围内
      • 所有控制流指令的目标都是指令的开始。在宽指令的情况下,宽操作码被认为是指令的开始,给出由该宽指令修改的操作的操作码不被认为是指令的开始。不允许分支到指令中间
      • 任何指令都不能访问或修改索引大于或等于其方法指示其分配的局部变量数的局部变量
      • 对常量池的所有引用都必须指向相应类型的条目。例如:指令ldc只能用于int或float类型的数据或类String的实例;指令getfield必须引用一个字段
      • <>代码不在指令的中间结束。
      • 执行不能脱离代码的结尾
      • 对于每个异常处理程序,受处理程序保护的代码的起始点和结束点必须位于指令的开头,如果是结束点,则必须立即超过代码的结尾。起点必须在终点之前。-异常处理程序代码必须从有效指令开始,并且不能从wide指令修改的操作码开始