Сажа - Как запретить loadClassAndSupport создать пустой SootClass?

Используя сажу (v.2.5.0), я пытаюсь загрузить определенный класс:

SootClass clazz = Scene.v().loadClassAndSupport("example.MyClass");

Перед звонком Scene#loadClassAndSupport класс example.MyClass не в сцене - что правильно.
Класс также не существует на пути к классу сажи, и там приведенное выше выражение выдает RuntimeException говоря, что класс не может быть найден. И это тоже правильное поведение.

Но после этого исключения был брошен класс example.MyClass находится в сцене сажи!
Еще один звонок Scene#loadClassAndSupport поэтому возвращает SootClass экземпляр, где isPhantom имеет значение false, но не имеет методов или полей.

  1. Это поведение предназначено для структуры сажи или это ошибка?
  2. Если это предусмотрено, как я могу предотвратить добавление Soot "фиктивного" класса Soot к сцене?
  3. Есть ли другой способ проверить, находится ли определенный класс в пути к классу Саот, не добавляя его в сцену Саот?

Обновить:
Уродливый, но работающий обходной путь:

try {
  SootClass sootClass = Scene.v().loadClassAndSupport( className );
  sootClass.setApplicationClass();
  // class found and loaded...
} catch(RuntimeException e) {
  SootClass sootClass = Scene.v().loadClassAndSupport( className );
  Scene.v().removeClass( sootClass );
  // class not on soot's classpath or not loadable...
}

1 ответ

Решение

Это похоже на ошибку. Можете ли вы подать это здесь? Затем мы посмотрим. https://github.com/Sable/soot/issues

В любом случае, это лучшее место для обсуждения таких вопросов.

Ура, Эрик

Другие вопросы по тегам