Java, ASM: Как получить имя OpCode и TagValue от ASM Insnnode?JAVA

Программисты JAVA общаются здесь
Anonymous
Java, ASM: Как получить имя OpCode и TagValue от ASM Insnnode?

Сообщение Anonymous »

Я работаю над некоторым анализом файлов класса, и я работаю над использованием ASM для чтения классов. В Javap Opcode и Tagname и Tagvalue напечатаны встроенными, но в каждом абстрактном Abstractinnnode я вижу только поля для int (а не Tagvalue) < /p>

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

Как получить инструкцию с ASM, например: < /p>

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

И в случае загрузки строк, константов и т. Д. Мне также нужен доступ к этим значениям. Обычно это происходит от Tagvalue javap. Мне не нужно просто печатать их, мне также нужен программный доступ к значениям. 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
}]


Подробнее здесь: https://stackoverflow.com/questions/265 ... m-insnnode

Вернуться в «JAVA»