#java #soot
#java #soot
Вопрос:
Я использую soot для инструментирования программы Java. Я знаю, что для добавления вызова к определенному классу в soot мы должны установить «Soot class-path» в каталог, содержащий этот класс, .class file. Итак, я делаю это в методе main основного класса. Я привожу фрагмент кода ниже
public class Main {
public static void main(String[] args) {
Scene.v().setSootClassPath("/home/j/IdeaProjects/Test_1/classes:/home/j/IdeaProjects/Test_1/libs/rt.jar:home/j/IdeaProjects/Test_1/libs/jce.jar");
PackManager.v().getPack("jtp").add(new Transform("jtp.RetIns", new ExIns()));
....
Но когда я хочу использовать класс «Insop», который находится в папке classes, следуя коду в методе Exins:
static SootClass Ins;
static
{
Ins= Scene.v().loadClassAndSupport("Insop");
}
Я получаю ошибку
Caused by: java.lang.RuntimeException: couldn't find class: Insop (is your soot-class-path set properly?)
Я должен упомянуть, что я использую 32-разрядную версию Ubuntu 14.4 и запускаю код на intellij.
Я не могу найти, в чем моя ошибка. не могли бы вы, пожалуйста, помочь мне.
Ответ №1:
Я, наконец, нахожу проблему. Я не знаю почему, но я должен установить «soot class-path» с относительным путем. Для моего проекта, например, он должен быть установлен следующим образом:
Scene.v().setSootClassPath("classes:libs/rt.jar:libs/jce.jar");
Комментарии:
1. В моем случае запуск Intellij на macbook: Scene.v().setSootClassPath(«target/classes:/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/jce.jar:.»);