我正在为我的Java防病毒程序使用沙箱功能,但遇到一个问题:类上的指定程序包对编译有意义吗?
示例:我正在运行一个要使用的程序Runtime.getRuntime().exec()
,当类加载器尝试加载该文件以运行方法时,它是否检查文件中合格的软件包(如果存在)?我宁愿不要尝试在JVM中更改文件,而只是从其他包中加载文件。我可以完成加载,但我唯一的难题是它会崩溃并烧毁吗?在Java内部,它会被注册为java.lang.Runtime
,但是编译后的代码会说例如pkg.pkg.Runtime
,是否需要扩展旧的运行时?我的猜测是扩展旧的运行时会破坏它。有人对这个有了解吗?我正在努力制作一个可测试的示例,但我还有点距离,想获得一些答案,这可能会使某些人受益。
类上的指定包对编译有影响吗?
是的,这很重要。pkg.pkg.Runtime()
无法调用名为的类 ,就像 是那样java.lang.Runtime
。
此外,如果我的内存正确,则JVM中还有一些其他安全措施,以防止普通应用程序将类注入诸如的核心包中java.lang
。
如果您需要更改java.lang.Runtime
类的行为(出于实验目的!),那么我认为您需要将修改后的版本放在“ rt.jar”文件之前的
引导类路径上 。
然而:
这种级别的修补很容易导致JVM不稳定。即难诊断的JVM崩溃。
如果您的目标是生产“生产质量”工具,那么您会发现涉及修改JVM的事情不被接受。人们将非常怀疑安装说明中的内容,例如“将其添加到已安装的JVM的bootclasspath中”。
分发“修补”的JVM可能会违反Oracle的Java许可协议。
我的建议是寻找一种不太麻烦的方式来做您想做的事情。例如,如果您尝试进行病毒检查,请在JVM外部或在自定义应用程序类加载器中进行病毒检查。
您评论了:
我有一个自定义的类加载器,我的问题是:如果我编译一个标记为pkg.pkg.Runtime的类,是否可以在类加载器中注册为java.lang.Runtime?
就像我上面说的,不,你不能。字节码文件中嵌入了类名。如果尝试通过加载具有不同名称的类来“快速完成”,则JVM将抛出Error
。
和:
如果没有,那么我该如何更换班级?如果编译后的程序包名称必须等于引用的命名请求,那么我可以修改.class文件以使其匹配,或者像在java.lang程序包中一样对其进行编译吗?
那就是你要做的。您需要在源代码中 命名 该类java.lang.Runtime
,并以此进行编译。
但是我上述建议的 意思 是,您应该使用在类加载器中进行病毒检查。 忘记
尝试替换/修改的行为Runtime
。由于我上面列出的原因,这是一个坏主意。
本文向大家介绍Java 替换空格,包括了Java 替换空格的使用技巧和注意事项,需要的朋友参考一下 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 以下是java.lang.StringBuilder.replace()方法的声明 public StringBuilder replace(i
问题内容: 假设我的格式如下: 我想将小数点替换为空白,使其看起来像这样: 我该怎么做呢?我以为可以解决问题,但是当我尝试这样时: 我收到了一个错误消息,因为它可能不是字符。那是有道理的,那么我还能怎么完成我想要的? 问题答案: 如果您只是将单引号换成双引号,那么这将起作用,因为空字符串是合法值,而不是“空字符”,并且有重载。请记住,这是的超类型。
问题内容: 我有那套结构。我没有重复项,但是当我调用: ->并且已经有确切的元素时,我希望替换旧的元素。 问题答案: 在每次添加之前进行删除: remove将删除任何等于myObject的对象。或者,您可以检查添加结果: 哪种效率更高取决于您发生碰撞的频率。如果它们很少见,则第二种形式通常只会执行一次操作,但是当发生碰撞时,它将执行三种操作。第一种形式总是做两个。
问题内容: 我有一个以字符串形式传递的句子,我正在对单词“ and”进行替换,我想用“”替换它。而且它不是用空格替换“和”一词。以下是我的逻辑示例。而当我调试此逻辑时,逻辑确实落入了句子。 这里有我想念的东西吗? 问题答案: 而当我调试此逻辑时,逻辑确实落入了句子。 是的,然后你放弃返回值。 Java中的字符串是不可变的-当你调用时,它不会更改现有字符串的内容-它会返回经过修改的新字符串。所以你要
编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 我有这个练习。为什么不使用reappeAll?我有一个错误:字符串索引超出范围:1
主要内容:replace() 方法,replaceFirst() 方法,replaceAll() 方法在 Java 中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll(),本文将详细介绍它们的使用方法。 replace() 方法 replace() 方法用于将目标字符串中的指定字符(串)替换成新的字符(串),其语法格式如下: 其中,oldChar 表示被替换的字符串;newChar 表示用于替换的字符串。repla