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

标签 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 ?");
             }
         }
    }
}

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

谢谢

最佳答案

StringConstant 有一个 getValue 方法。只需将值转换为该类型即可。对于本地人来说,你的问题没有意义,因为它们是变量,而不是常量。

关于Java:显示方法调用中使用的所有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041717/

相关文章:

android - 煤烟android-jars错误

java.lang.ClassNotFoundException : org. eclipse.aether.resolution.ArtifactResolutionException

java - 基于其他值设置对象的更优雅的方式

code-coverage - 有没有一种方法可以在不运行代码的情况下确定代码覆盖率?

python - 动态类型语言的静态分析

java - 如何从 Soot 生成的调用图中排除 java 标准库?

java - 如何为多个列表重用 BaseAdapter View

java - 错误 'Didn' t 在路径 : DexPathList' 上找到类

static-analysis - 为什么一些静态分析工具不报告潜在的缓冲区溢出?

java - 如何使用 Soot 创建控制流图?