查看类文件时,org.apache.log4j.Logger它定义了一个Class带有name 的类型的合成字段class$org$apache$log4j$Logger.
从查看字节代码可以清楚地看出,该字段表示从常量池尚未引用类型的时间开始的自引用类.但是什么我也觉得奇怪的是,这一领域是的修改0x41008,其表示private,synthetic场(即我能听懂),而且还增加了一个修正0x40000,我不能找不到任何相关文档.
第19位的这个修饰符来自何处,它表达了什么?(Log4j是为Java 1编译的).
javap对该类文件非常满意:
static java.lang.Class class$org$apache$log4j$Logger;
descriptor: Ljava/lang/Class;
flags: ACC_STATIC
Synthetic: true
Run Code Online (Sandbox Code Playgroud)
access_flags应该是u2,意思是2字节无符号.令人费解的是0x41008,这比大于u2.已知一些工具将access_flags存储在较大的类型中,并注入辅助位(ASM执行它,JVM执行它等)我知道您正在使用ASM进行读取,因此这可能是您正在查看的内容:
组织/ ObjectWeb联盟/ ASM/ClassReader.java:
} else if ("Synthetic".equals(attrName)) {
access |= Opcodes.ACC_SYNTHETIC
| ClassWriter.ACC_SYNTHETIC_ATTRIBUTE;
Run Code Online (Sandbox Code Playgroud)
组织/ ObjectWeb联盟/ ASM/ClassWriter.java:
/**
* Pseudo access flag to distinguish between the synthetic attribute and the
* synthetic access flag.
*/
static final int ACC_SYNTHETIC_ATTRIBUTE = 0x40000;
Run Code Online (Sandbox Code Playgroud)
问题是,它是如何泄露给你的......
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |