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

私はプログラム分析ドメインに不慣れです。ポインタは非常に役立ちます。

ありがとう

4

1 に答える 1

0

StringConstant には getValue メソッドがありました。The value をこの型にキャストするだけです。地元の人にとっては、質問は定数ではなく変数であるため、意味がありません。

于 2014-09-25T18:08:45.333 に答える