Pouvez-vous recommander une bibliothèque qui présente le bytecode Java comme Java AST d'Eclipse (c'est-à-dire avec des nœuds descendant de org.eclipse.jdt.core.dom.ASTNode
)?Existe-t-il un analyseur syntaxique Java pour Eclipse AST?
Répondre
Vous recherchez un décompilateur et un moyen de transformer la représentation AST de cet outil en représentation AST d'Eclipse.
Java Decompiler a un plugin Eclipse pour recréer le code source. Vous pouvez analyser cela avec les ASTParser
d'Eclipse pour obtenir l'AST que vous voulez (ou peut-être que vous vouliez juste le code source pour commencer). Le roadblock biggegst que vous rencontrerez est lorsque le décompilateur ne peut pas recréer avec précision la syntaxe originale du code source (soit à cause de obfuscation, soit parce qu'il ne peut simplement pas comprendre une construction bytecode). Quel code source génère-t-il? Comment l'Eclipse ASTParser gère-t-il cela? YMMV.
Il y a beaucoup de decompilers for Java, tous avec des capacités variables selon le compilateur/obfuscator qui a créé le bytecode qu'il tente de décompiler. Si Java Decompiler ne fonctionne pas pour vous, vous pouvez créer un plugin eclipse pour l'un des autres.
Je ne suis pas intéressé par le code source en tant que tel. La situation est que j'ai un outil d'analyse de programme qui fonctionne sur AST et je voudrais qu'il fonctionne aussi sur les classes sans code source. Je suppose que le "vocabulaire" constitué des descendants ASTNode d'Eclipse devrait être suffisant pour représenter les constructions bytecode plus ou moins directement. Si non, alors probablement je devrais suivre votre conseil et ajouter l'étape de décompilation. – Aivar
Cela n'a pas vraiment de sens. AST signifie Abstract Syntax Tree, et au moment où vous arrivez à byte code, la seule chose que vous avez définitivement perdue est la syntaxe Java. Vous auriez à définir un nouvel ensemble de nœuds pour le code octet et ensuite adapter votre outil pour reconnaître ces nœuds. – EJP
@EJP convertir le code à une source AST est un processus complexe de reconnaissance de modèle, d'analyse de flux et d'autres astuces. Une fois qu'un AST est créé, le code source est sauvegardé à partir de cela. Même les meilleurs décompilateurs ne peuvent pas reproduire toutes les sources exactement comme l'original (plusieurs façons de programmer les mêmes boucles, différences d'espaces, etc ...) mais les décompilateurs corrects produiront un code source qui pourra ensuite être compilé avec le même bytecode que le décompilateur avec. – Chadwick