Asm байт-код запросов - PullRequest
       65

Asm байт-код запросов

2 голосов
/ 17 апреля 2011

Привет всем, я пытаюсь использовать ASM байт-код дерева Api для статического анализа для класса.Я думаю, у меня есть довольно простой вопрос.В методе, скажем, foobar (), у меня есть список инструкций внутри foobar (InsnList, у которого есть список).Теперь я хочу проверить, вызывается ли в инструкции № 10 функция "barfoo (String args)".

Также отдельно мне нужно проверить, является ли конкретная инструкция условной.

Спасибо и С уважением, SJ

Примечание: я уже могу прочитать класс и найти конкретный метод, который мне интересен, и пройтись по каждому внедрению этого метода.

Решено (см .: Грегкомментарии):

    AbstractInsnNode s = ...
    if(s.getType()==AbstractInsnNode.METHOD_INSN){
        MethodInsnNode methodInvocationNode = (MethodInsnNode) s;
        if(methodInvocationNode.name.equals("barfoo"))
        {
            return true;
        }
    }

Ответы [ 2 ]

2 голосов
/ 17 апреля 2011

Если посмотреть на javadoc ASM, похоже, что вам нужно будет вызвать getType() на вашем узле инструкций, а если тип равен METHOD_INSN, то вы можете привести к MethodInsnNode , Оттуда посмотрите на .name, чтобы увидеть имя метода.

0 голосов
/ 17 апреля 2011

Простой - как только вы определились, что вы вызвали foobar, начните увеличивать счетчик для каждой посещаемой вами инструкции.На десятом вызове выполните проверку для вызова barfoo.

...