目前我正在开发一个处理字节码分析的项目.我遇到了代码,
char[] buff = new char[1];
//some code tainting the buff
return (new String(buff));
在字节码中我找到了新String(buff)的相关映射
Ljava/lang/StringValue.cache
你们中的任何人都可以从这个缓存字段到达场景的位置进行解释吗?
它来自jdk i.6,StringValue.根据描述,“这个类只包含对字符串数组进行操作的静态方法,用于存储值.”
任何人都可以对此有所了解吗?实际上它的目的是什么?我认为这主要是因为他们使用的字符缓冲区作为争论传递给字符串.这个类不是修改缓冲区的内容,而是我认为它只是一个网关来说明缓冲区的内容仅用于初始化字符串.
最佳答案 那应该不可能.以下是您在最近的Javac编译后发布的序列.
iconst_1
newarray char
astore_1
new java/lang/String
dup
aload_1
invokespecial java/lang/String ([C)V
areturn
此外,java / lang / StringValue甚至不存在,至少从jre1.7.0_17开始.此外,句点的存在表明它可能是Jasmin的合并类/方法标记之一,在这种情况下,它实际上是指Ljava包中的一个类,无论应该是什么.
有两个主要的可能性 – 破坏的编译器或破坏的反汇编程序.如果你在这里发布类文件,我们至少可以弄清楚其中的哪一个是这种情况.