gpt4 book ai didi

Java、ASM : How to Get Opcode Name and TagValue from ASM InsnNode?

转载 作者:太空宇宙 更新时间:2023-11-04 14:26:53 28 4
gpt4 key购买 nike

我正在研究一些类文件分析,并且正在研究使用 ASM 来读取类。在 Javap 中,操作码以及 tagName 和 tagValue 是内联打印的,但在每个 AbstractInsnNode 中,我只看到 int 的字段(而不是 tagValue)

for(AbstractInsnNode abstractInsnNode : instructionList)
{
System.out.println("\tOpcode: " + + abstractInsnNode.getOpcode() +
" type: " + abstractInsnNode.getType());
}

如何获取ASM的指令,如:

5: invokeinterface #6,  2 // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z

在加载字符串和常量等的情况下,我也需要访问这些值。这通常来自javap的tagValue。我不仅需要打印这些值,还需要以编程方式访问这些值。

我需要访问基本操作信息,例如这些字段:

 jvmOperations": [{
"byteOffset": 0,
"constantPoolIndex": null,
"opCode": 42,
"opCodeName": "aload_0",
"type": null,
"tagName": null,
"tagValue": null
}, {
"byteOffset": 1,
"constantPoolIndex": null,
"opCode": 180,
"opCodeName": "getfield",
"type": null,
"tagName": "Field",
"tagValue": "val$foo:Lcom/example/graph/demo/Foo;"
}, {
"byteOffset": 4,
"constantPoolIndex": null,
"opCode": 182,
"opCodeName": "invokevirtual",
"type": null,
"tagName": "Method",
"tagValue": "com/example/graph/demo/Foo.doSomething:()Ljava/lang/Integer;"
}, {
"byteOffset": 7,
"constantPoolIndex": null,
"opCode": 176,
"opCodeName": "areturn",
"type": null,
"tagName": null,
"tagValue": null
}]

最佳答案

我会检查 ASMifier 的来源和 Textifier类如何打印东西..

关于Java、ASM : How to Get Opcode Name and TagValue from ASM InsnNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575111/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com