我正在研究计算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)