有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编译为什么字节码验证在Java中执行?

据我目前的理解,作者编写代码的主要目的是检查是否有人更改了字节码。因为“Java编程语言的编译器生成的类文件总是通过验证”。这是我们拥有字节码验证器的唯一原因,以防止其他人恶意更改我们的字节码吗


共 (1) 个答案

  1. # 1 楼答案

    a class file generated by a compiler for the Java programming language always passes verification

    在这种情况下,这种说法是不正确的。当然,编译器是软件,软件可能有漏洞。因此,不能保证Java编程语言的编译器生成的类文件总是正确的

    此外,一个类的正确性取决于它与之交互的其他类。编译后,这些类不得以不兼容的方式更改,因此,如果用于编译的环境与试图执行代码的环境不同,这些不匹配可能会导致代码被验证器拒绝,即使编译器做的一切都是正确的

    这已经向您指出了一个问题,即除了故意的恶意修改之外,还可能存在无恶意错误引入的代码不兼容。验证器还可以防止这种情况,我想,这种情况发生的频率远远高于真正的故意攻击