修改test.class文件中的access_flags,并运行测试

1.在idea中新建test.java文件,文件内容如下:

public class test {
    private int m;

    public int inc() {
        return m + 1;
    }

    public static void main(String[] args) {
        test t = new test();
        t.m = 1;
        System.out.println(t.inc());
    }
}

2.执行javac命令,编译出test.class文件。

javac  test.java

3.网上下载winhex软件,打开软件,并将test.class文件导入,如图所示:


image.png

4.执行javap命令 找到常量池最后一个位置,即access_flags的开始位置。
位置参考如下图所示:


image.png
javap -v test.class

执行结果,如图所示:

image.png

image.png

在常量池最后一行显示的是(I)V ,所以,在winhex工具中找到(I)V的位置,即找到了access_flags的位置,如下图所示:


image.png

可见 test.class文件中的access_flags的值是0x0021 即 0x0001 | 0x0020

对照jvm访问标志表,可查看。如下图所示。


image.png

5.将test.class文件中的acc_public项设置为空,即test类的public修饰符去掉,也就是access_flags的值变为0x0020,并在另一个目录另存为test.class 。如下图所示:


image.png

6.最后在新目录执行命令,test.class仍可正常运行。此功能验证成功。

javap -v test.class
image.png

此处,发现access_flags的值已经修改成功。

7.最后在新目录执行命令,test.class仍可正常运行。此功能验证成功。

java  test
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容