Como mapear instruções binárias de volta às declarações ou expressões usando a Biblioteca ASM?
-
26-09-2019 - |
Pergunta
Estou tentando analisar bytecodes java em uma estrutura de dados intermediária para uso posterior. Eu tropecei no ASM. É poderoso e estável. No entanto, tenho dificuldade em traduzir as instruções binárias de volta à expressão e declarações normais de Java. Alguém poderia apontar uma direção para mim?
A estrutura de dados do negócio pode ser assim:
ClassInfo
- FieldInfo
- MethodInfo
-- ForLoopStatement
-- WhileStatement
--- AssignmentExpression
--- FunctionCallExpression
...
Basicamente, nada mais é do que uma abstração da língua Java.
Obrigada.
Solução
No db4o, estávamos usando o ironicamente chamado Biblioteca bloat recuperar um AST totalmente construído de um corpo de método. Funcionou bem o suficiente para nós, mas não é baseado no ASM.
Outras dicas
Por que não ficar com o Java Bytecode como é e se você precisar de uma forma legível por humanos, basta desmontá -lo? Pelo menos sua pergunta não deixa claro por que o Java ByteCode em si não pode ser a estrutura de dados intermediária usada para armazenamento.
O lançamento oficial do Java SDK tem uma ferramenta chamada javap que converte bytecode de volta na fonte Java. Outra opção para o mesmo trabalho seria Javad.