J'essaie d'utiliser l'API ASM bytecode tree pour l'analyse statique du code Java. J'ai un ClassNode cn, MethodNode m et la liste des instructions dans cette méthode dit InsnList list. Supposons que pour une instruction donnée (c'est-à-dire AbstractInsnNode) s, j'ai besoin de trouver toutes les définitions/affectations de la variable en s dans la liste d'instructions ci-dessus. Pour le rendre plus clair, supposons qu'une variable var soit définie et initialisée sur la ligne 2, puis assignée une autre valeur sur la ligne numéro 8 et ensuite utilisée sur la ligne numéro 12. La ligne numéro 12 est ma s, dans ce cas. En outre, supposons beaucoup de code conditionnel dans les lignes entre.définition de variable et affectation de détection asm bytecode
Est-ce possible avec ASM? Comment??
Merci et salutations, SJ
Pour plus de clarté,
public void funcToAnalyze(String k, SomeClass v) {
int numIter = 0;
/*
Do cool stuff here.... modifies member variables and passed params too
*/
if (v.rank > 1 || numIter>200) {
magicFunction(k, 1);
}
}
Ici, supposons que le conditionnel est le JumpInsnNode (instruction en cours) et je dois trouver si (et où) l'une des variables dans le conditionnel (v.rank et numIter dans ce cas) sont modifiés ou assignés n'importe où dans le code ci-dessus. Restez simple, juste des variables membres (pas de fonction statique ou de délégation à la fonction d'une autre classe).
Il est possible de faire pour les cas simples. Cela devient compliqué juste assez rapidement en fonction de ce que vous essayez d'atteindre. –
Je suppose que nous parlons de variables membres ici? Ce que vous voulez est en général impossible. Vous pouvez collecter les instructions putfield qui se réfèrent à cette variable dans la méthode actuelle. Mais vous devez aussi considérer les méthodes qui sont appelées et qui peuvent avoir accès à cette variable. En raison de la surcharge, vous devez considérer ici tous les membres de la classe de type heure de compilation ainsi que de toute classe de remplacement. – Ingo
Oui, je veux juste le cas simple des variables membres seulement. Comment puis-je collecter les instructions putfield qui se réfèrent à cette variable dans la méthode actuelle. Acuellement, mes déclarations actuelles, peuvent avoir une ou plusieurs variables comment puis-je connaître chacun. – dreamer13134