ASM: saída de bytecode e opcode java
Eu estou tentando escrever um programa que leva um arquivo .class e coleta todos os métodos do arquivo .class, bem como o conteúdo de cada método. Aqui está meu código
public class ClassReaderTest1 {
public static void main(String[] args) throws Exception{
InputStream in = new FileInputStream("*.class");
ClassReader reader = new ClassReader(in);
ClassNode classNode = new ClassNode();
reader.accept(classNode,0);
@SuppressWarnings("unchecked")
final List<MethodNode> methods = classNode.methods;
for(MethodNode m: methods){
InsnList inList = m.instructions;
System.out.println(m.name);
for(int i = 0; i< inList.size(); i++){
System.out.println(" " + Integer.toHexString(inList.get(i).getOpcode()));
}
}
}
}
e aqui está minha saída
init>
ffffffff
ffffffff
19
b7
b1
ffffffff
main
ffffffff
ffffffff
b2
12
b6
ffffffff
ffffffff
3
36
ffffffff
ffffffff
b1
ffffffff
Por fim, não quero imprimir esses valores, só quero poder referenciá-los no meu programa (estou tentando verificar se estou obtendo os valores corretos). Estou recebendo os métodos como esperado, mas o conteúdo dos métodos não faz sentido para mim. Pelo que vejo, estes não são opcodes; em particular, "fffffff" não é um opcode de java. O que eu gostaria de fazer é imprimir todos os métodos, como eu fiz acima e, em seguida, onde eu tenho os opcodes agora, imprima o bytecode java seguido por alguns espaços e, em seguida, o opcode. Por exemplo
main
bytecode **
.
.
O arquivo que estou carregando para este programa consiste em apenas um método main, uma única instrução println e uma inicialização de uma variável int.
Minha pergunta é: estou fazendo algo errado ou simplesmente não estou interpretando corretamente meus resultados? Além disso, como posso obter o bytecode? Eu não fui capaz de encontrar uma maneira de obtê-lo. Eu posso ver isso quando uso o plugin java bytecode para eclipse, mas eu preciso ser capaz de referenciá-lo no meu programa.
desde já, obrigado