Uma ferramenta de decomposição Java / Kotlin e AST Library.
O principal objetivo desta biblioteca era construir uma árvore de fonte abstrata completa (AST) para um arquivo de classe Java, incluindo nós para todas as instruções. Ele é construído no topo do ASM, que possui elementos AST para métodos, mas para por aí e fornece uma lista simples de opcode.
Embora não seja tão útil para modificar a fonte e a reconstrução de um arquivo de classe Java, esse preenchimento AST é muito útil para se recompor e para análise de código, onde você deseja procurar padrões em uma instrução, em vez de um nível de código OPCODE.
Para suporte e discussão, consulte nosso bate -papo de desenvolvimento/suporte no irc.esper.net no canal #Decompiler.
Nesse momento, o suporte Kotlin é bastante novo e todos os recursos não são definidos e os bugs na saída devem ser esperados.
java -jar Despector.jar <--config=[path]> <--lang=[java|kotlin]> [sources...] [destination]
--config= permite definir um arquivo de configuração para determinadas configurações de descompilação.--lang= força a saída a estar em um idioma específico. O comportamento normal é tentar determinar o idioma de origem dos arquivos de classe a partir de seu conteúdo.Este decompilador ainda está sob desenvolvimento pesado e as questões acontecerão. Se você encontrar qualquer saída incorreta, abra um problema no rastreador de problemas. No mínimo, inclui a saída esperada e encontrada. Uma classe compilada demonstrando que o problema também seria extremamente útil.
As solicitações de recursos são sempre bem -vindas e podem ser feitas no rastreador de problemas com o máximo de informações possível.
Aqui está um arquivo de configuração de amostra. É opcional, mas permite controlar as configurações de decompilação, como a formatação. Se você quiser mais configurações, abra uma solicitação de recurso no rastreador de problemas. O arquivo de configuração usa o formato de configuração do Hocon.
# Despector decompiler configuration:
# Cleanup configuration
cleanup {
# Cleanup operations to apply before emitting
operations=[]
}
# Targeted cleanup operations
"cleanup_sections"=[]
# Emitter configuration
emitter {
# Whether to emit synthetic members
emit-synthetics=false
# The path of the formatter configuration
formatting-path="run/eclipse_formatter.xml"
# One of: eclipse,intellij
formatting-type=eclipse
# The path of the import order configuration
import-order-path="run/eclipse.importorder"
}
# Kotlin specific configuration
kotlin {
# Whether to replace strings containing new lines with raw strings
replace-multiline-strings=true
}
# Prints out opcodes of a method when it fails to decompile.
print-opcodes-on-error=true