首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java设计哲学

Java设计哲学
EN

Software Engineering用户
提问于 2016-10-05 07:02:09
回答 2查看 746关注 0票数 4

我正在阅读java的设计理念,这一行让我印象深刻:“VM检查Java代码的签名是否有效,如果检测到代码的任何更改,将拒绝解释。”vm如何确保字节码没有被更改?

java设计哲学

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2016-10-05 15:23:30

Java字节码类文件格式捕获调用方和被调用方中的方法签名(即方法定义)。

因此,它可以比较这两个签名,如果检测到不匹配,那么一个被编译时与另一个不同的期望,这是无效的。

字节码格式的其他特性确保所提到的签名至少在语法上也被正确使用。例如,调用方正在传递正确数量的参数,而被调用方的实现期望的正是这些参数,而不是更多的参数。(当然,这并不能防止所有可能的bug,只是某些类型的问题。)

在其他二进制可执行格式中,字节码格式的此属性不存在(或可选)。

然而,有些语言提供了不同的机制。例如,C++使用名称残缺帮助确保调用正确签名的正确方法;这是在调用站点和方法定义中捕获方法签名的一种形式。

票数 2
EN

Software Engineering用户

发布于 2016-10-05 07:47:34

它利用代码签名证书

或者简化,本质上是将校验和添加到文件中,并提供更多关于谁生成所述校验和的信息。要防止或至少检测到操作(例如替换校验和)比这要复杂一些,但我想既然您已经知道了这个术语,那么您可以在网上或文档中查找其中的大部分内容。

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/332842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档