Java:显示方法调用中使用的所有字符串

时间:2014-09-25 14:54:46

标签: java static-analysis soot

我试图使用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 ?");
             }
         }
    }
}

我是程序分析领域的新手,任何指针都会有很大的帮助。

由于

1 个答案:

答案 0 :(得分:0)

StringConstant有一个getValue Methode。只需将值转换为此类型。对于当地人来说,你的问题没有意义,因为它们是变量,而不是常数。