Java offsetStackFrame在JVM规范中做什么
在JVM规范中,Java offsetStackFrame在JVM规范中做什么,java,jvm,Java,Jvm,在JVM规范中,offsetStackFrameProlog谓词做什么 虽然我不是Prolog专家,但我可以掌握本规范中Prolog中的所有其他谓词,但我不能理解这一个 以下是第174页JVM规范中该谓词的定义: offsetStackFrame(Environment, Offset, StackFrame) :- allInstructions(Environment, Instructions), member(stackMap(Offset, StackFrame), Instruc
offsetStackFrame
Prolog谓词做什么
虽然我不是Prolog专家,但我可以掌握本规范中Prolog中的所有其他谓词,但我不能理解这一个
以下是第174页JVM规范中该谓词的定义:
offsetStackFrame(Environment, Offset, StackFrame) :-
allInstructions(Environment, Instructions),
member(stackMap(Offset, StackFrame), Instructions).
在第178页,说明定义为:
instruction(Offset, AnInstruction)
下面是第180页的stackMap
的定义:
stackMap(Offset, TypeState)
TypeState
的定义如下:
frame(Locals, OperandStack, Flags)
我不明白
成员(stackMap(Offset,StackFrame),说明)
在offsetStackFrame
的定义中做了什么。我认为<代码>指令<代码>为<代码> [指令(偏移,指令)] <代码> >代码> StAcGMP(偏移量,类型状态) AS <代码> [(偏移量,框架,操作数,标志)] < /代码>。那么这个谓词的目的是什么呢?我稍后会回来改进这个答案。如果我现在没有太多时间,请给我发个通知。我已经在规范中运行了prolog,所以我应该能够提供一个IRL示例
基本上是为了帮助验证过程,类文件在某些键字节码偏移量(通常在控制流合并的分支之后)包含操作数堆栈/局部数的类型状态。这些类型状态称为堆栈映射帧。prolog代码有一个谓词,它组合了已知的堆栈映射帧和指令(称为mergeStackMapFrames
或其他内容)。然后,它对合并结果进行迭代,以验证所有状态转换是否有效/是否与相关指令匹配
上面的谓词如何适应这一点是,它断言合并的指令/堆栈映射帧中存在特定的堆栈映射帧。
由于prolog的性质,您可以首先使用此断言来构造合并列表。我得到了它,这很好,但请参考JVM规范中的相关部分,让其他人更清楚地了解它。“尽管我不是prolog专家”……我想,JVM规范的目标受众中没有一个是。