Java: отображение всех строк, используемых в вызовах методов

1

Я пытаюсь отобразить все строки, используемые в вызове метода, используя структуру анализа программ SOOT. Я могу проверить StringConstant, но как мне получить значения для RefType? Вот пример кода:

for (Value va : iv.getInvokeExpr().getArgs()) {
    System.out.println("[ARGS : TYPE] " + va.getType() + " with ");

    if (va instanceof StringConstant) {
        System.out.print(va + " ");
    } else if (va instanceof JimpleLocal) {
        JimpleLocal jl = (JimpleLocal) va;
        if (jl.getType() instanceof RefType) {
            RefType rt = (RefType) jl.getType();
            SootClass cls = rt.getSootClass();
            String clsName = cls.getName();
            // recursion possible - backward analysis ?
            if(clsName.equals("java.lang.String")){
                  System.out.print("GOT STRING CLASS - HOW TO GET THE VALUE ?");
             }
         }
    }
}

Я новичок в области анализа программ, любые указатели будут очень полезны.

благодаря

Теги:
static-analysis
soot

1 ответ

0

У StringConstant был метод getValue Methode. Просто введите значение для этого типа. Для локальных жителей ваши вопросы не имеют смысла, поскольку они являются переменными, а не константами.

  • 0
    StringConstant - это хорошо, но если Local, например, $ r2, имеет RefType (java.lang.String), как я могу получить его значение во время выполнения? Один из способов, который я мог бы придумать, это проверить AssignStmt на $ r2, но это может быть рекурсивно, например, $ r2 = $ r1. Есть ли лучшее решение для разрешения RefType?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню