小编Cha*_*the的帖子

为什么Java 7字节码验证器不会阻塞它?

我正在研究计算StackFrameMap(SFM)中条目的代码.目标是能够生成(SFM)条目,使Java 7字节码验证器满意.遵循TDD方法,我开始为验证者创建伪造的SMF条目以进行投诉; 我会用我正确计算的条目替换它们,看看我是否正确地做了.

问题是:我不能让字节码验证器抱怨.这是一个示例,从原始Java代码开始(此代码不应该做任何有用的事情):

public int stackFrameTest(int x) {
    if (x > 0) {
        System.out.println("positive x");
    }

    return -x;
}
Run Code Online (Sandbox Code Playgroud)

这会生成以下字节码(使用SFM):

  public int stackFrameTest(int);
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
         0: iload_1
         1: ifle          12
         4: getstatic     #47                 // Field java/lang/System.out:Ljava/io/PrintStream;
         7: ldc           #85                 // String positive x
         9: invokevirtual #55                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        12: iload_1
        13: ineg
        14: ireturn
      StackMapTable: number_of_entries = 1
           frame_type = 12 /* same */
Run Code Online (Sandbox Code Playgroud)

现在,我将SFM更改为包含以下内容:

  StackMapTable: number_of_entries = 1
       frame_type = 255 /* full_frame …
Run Code Online (Sandbox Code Playgroud)

java bytecode bytecode-manipulation

8
推荐指数
1
解决办法
163
查看次数

标签 统计

bytecode ×1

bytecode-manipulation ×1

java ×1