使用java的asm.jar查找当前指令是否在循环中

问题描述 投票:0回答:1

使用https://asm.ow2.io/

我想确定当前指令是否在循环内。

我很困惑 asm 是如何做到这一点的,

  1. 向后标签偏移量在您点击分支到它们的语句之前不会确定
  2. 似乎没有办法知道当前指令的偏移量

这样你就可以清楚地确定一条指令是否在循环之前或是否在循环中,但也可能是

statement in question
for () {
} // this jump gives you a label with a real offset but you don't know the statement in question's offset.

我错过了什么?

java parsing assembly bytecode
1个回答
0
投票

好的,找到方法了。

收集您通过

visitLabel
收到的一组标签,然后当感兴趣的指令发生时,保存已访问过的标签的副本,同时仍在原始组中收集标签。

当您访问 jmp 指令时,如果标签位于在执行感兴趣的指令时收集的访问标签集中,您就知道这是一个循环。

© www.soinside.com 2019 - 2024. All rights reserved.