编译为什么字节码验证在Java中执行? 3 周,4 日 Questions & Answers 713 据我目前的理解,作者编写代码的主要目的是检查是否有人更改了字节码。因为“Java编程语言的编译器生成的类文件总是通过验证”。这是我们拥有字节码验证器的唯一原因,以防止其他人恶意更改我们的字节码吗
# 1 楼答案 a class file generated by a compiler for the Java programming language always passes verification 在这种情况下,这种说法是不正确的。当然,编译器是软件,软件可能有漏洞。因此,不能保证Java编程语言的编译器生成的类文件总是正确的 此外,一个类的正确性取决于它与之交互的其他类。编译后,这些类不得以不兼容的方式更改,因此,如果用于编译的环境与试图执行代码的环境不同,这些不匹配可能会导致代码被验证器拒绝,即使编译器做的一切都是正确的 这已经向您指出了一个问题,即除了故意的恶意修改之外,还可能存在无恶意错误引入的代码不兼容。验证器还可以防止这种情况,我想,这种情况发生的频率远远高于真正的故意攻击
# 1 楼答案
在这种情况下,这种说法是不正确的。当然,编译器是软件,软件可能有漏洞。因此,不能保证Java编程语言的编译器生成的类文件总是正确的
此外,一个类的正确性取决于它与之交互的其他类。编译后,这些类不得以不兼容的方式更改,因此,如果用于编译的环境与试图执行代码的环境不同,这些不匹配可能会导致代码被验证器拒绝,即使编译器做的一切都是正确的
这已经向您指出了一个问题,即除了故意的恶意修改之外,还可能存在无恶意错误引入的代码不兼容。验证器还可以防止这种情况,我想,这种情况发生的频率远远高于真正的故意攻击