Soot 命令行或程序运行常见问题


文章目录

  • Soot 命令行或程序运行常见问题
  • 前言
  • 一、soot.SootResolver$SootClassNotFoundException:
    • 原因:没有提供Soot分析的必要函数库依赖, 即 soot-class-path。
      • 方法1:-pp 使用默认依赖 与JAVA_HOME配置有关
      • 方法2:--soot-classpath (记得之前可以,刚试了一下竟然报错)
  • 二、以下这种乱七八糟的错误,我觉得根本原因都是 -cp 命令的使用问题
  • 三、 程序运行Soot
    • 方法1: Soot.Main 原理同命令行运行
    • 方法2: Options运行
  • 总结

前言

刚刚开始使用Soot经常会遇到各种问题,究其原因还是语言的局限性。对英文工具的不理解。另外,Soot能带来的分析功能还是比较多的,根据需求合理设置Option也很重要。


一、soot.SootResolver$SootClassNotFoundException:

              couldn't find class: *** *** (is your soot-class-path set properly?)

原因:没有提供Soot分析的必要函数库依赖, 即 soot-class-path。

方法1:-pp 使用默认依赖 与JAVA_HOME配置有关

         java -cp soot.jar soot.Main -pp -cp . HelloWorld

方法2:–soot-classpath (记得之前可以,刚试了一下竟然报错)

    java -cp  soot.jar soot.Main --soot-classpath .;"%JAVA_HOME%"\jre\lib\rt.jar;"%JAVA_HOME%"\jre\lib\jce.jar HelloWorld

二、以下这种乱七八糟的错误,我觉得根本原因都是 -cp 命令的使用问题

soot.CompilationDeathException: No input classes specified!

java.lang.RuntimeException: None of the basic classes could be loaded!

java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.Exception: Error: The path '*** ***' does not exist.

Soot设定为优先在自身所在目录下寻找依赖文件和目标文件,尽管它并没有,这需要我们合理使用 -cp 命令来找到分析目标。
例如 :

C:\Users\15867> java -cp E:\TestProgram\soot.jar soot.Main -cp E:\TestProgram HelloWorld -pp

尽管我们在cmd用户路径下,依然可以通过-cp来为Soot指定分析路径,进而分析其他文件目录下的.class文件(HelloWorld)

三、 程序运行Soot

方法1: Soot.Main 原理同命令行运行

        List<String> classpath = new ArrayList<>();String jreHome = System.getProperty("java.home");classpath.add(joinPath(jreHome, "lib", "rt.jar"));classpath.add(joinPath(jreHome, "lib", "jce.jar"));//        soot.options.Options.v().set_whole_program(true);soot.Main.main(new String[]{"-w","-f", "J","-p", "cg.spark", "enabled:true","-p", "wjtp.myapp", "enabled:true","-soot-class-path", String.join(File.pathSeparator, classpath),args[0] /*需要分析的.class文件路径*/});

方法2: Options运行

     Printertemp printertemp = new Printertemp();Transform t0 = new Transform("wjtp.Printertemp", printertemp);PackManager.v().getPack("wjtp").add(t0);Options.v().set_whole_program(true);Options.v().set_allow_phantom_refs(true);Options.v().set_prepend_classpath(true);Options.v().set_process_dir(Arrays.asList("*** ***"));//需要分析的.class文件路径Options.v().setPhaseOption("jb", "use-original-names:true");
//      Options.v().setPhaseOption("wjtp.Printertemp", "enabled:true");Options.v().set_keep_line_number(true);Options.v().set_output_format(Options.output_format_jimple);Scene.v().loadNecessaryClasses();PackManager.v().runPacks();

语义大致同上

总结

刚刚开始使用,糊里糊涂感觉也很正常。随笔而已,期待指导 指正!邮箱:1586715286@qq.com

Soot 命令行或程序运行常见问题相关推荐

  1. Windows在cmd命令行环境下运行c程序

    现在有许多便利的编译器,例如DevC++,sublime,vscode等等,在这些编译器里面我们添加必要的插件就可以直接运行C语言程序.但是还有一种我们可以采取的普适的运行C程序的方法--在cmd命令 ...

  2. 命令行中编译运行C/C++程序(多个)

    此处运行环境是在Windos下,运行cmd命令进入DOS界面,Linux中的运行过程有做说明. 首先,如果想在DOS窗口中进行C/C++代码的编译,则需要先配置gcc的环境变量 1.使用g++进行编译 ...

  3. golang 命令行_如何使用Golang编写快速有趣的命令行应用程序

    golang 命令行 by Peter Benjamin 彼得·本杰明(Peter Benjamin) 如何使用Golang编写快速有趣的命令行应用程序 (How to write fast, fun ...

  4. graalvm_GraalVM上的Picocli:极快的命令行应用程序

    graalvm GraalVM GraalVM允许您提前将程序编译为本地可执行文件. 与Java VM相比,生成的程序具有更快的启动时间和更低的运行时内存开销. 这对于通常寿命很短的命令行实用程序尤其 ...

  5. GraalVM上的Picocli:极快的命令行应用程序

    GraalVM GraalVM允许您提前将程序编译为本地可执行文件. 与Java VM相比,生成的程序具有更快的启动时间和更低的运行时内存开销. 这对于通常是短暂的命令行实用程序尤其有用. Graal ...

  6. 命令行的形式运行php

    转自:http://www.cnblogs.com/myjavawork/articles/1869205.html 注意:在安装php时需要将php 的安装目录加到环境变量 PATH 中 (右击我的 ...

  7. LFTP : 一个功能强大的命令行FTP程序

    LFTP : 一个功能强大的命令行FTP程序 大家好,这篇文章是介绍Lftp以及如何在Linux操作系统下安装的.Lftp是一个基于命令行的文件传输软件(也被称为FTP客户端),由Alexander ...

  8. python编写命令行框架_使用 Python 和 Click 编写命令行应用程序

    简评:python 构建命令行应用的第三方比较有名的包除了 click 之外还有一个叫 docopt,这是一个以文档先行为目标的包.个人是比较倾向于 Click 的,看了这篇文章之后,也很快写了一个 ...

  9. linux命令行python_干货:4 个绝佳的命令行终端程序

    导读 让我们来看几个精心设计的 CLI 程序,以及如何解决一些可发现性问题.在 GUI 应用程序中,菜单.工具提示和图标用于向用户展示功能.而命令行缺乏这种能力,但是有办法克服这个问题.在深入解决方案 ...

最新文章

  1. c++ 重载、重写、重定义(隐藏)
  2. 【zz】如何去理解 拓扑排序算法
  3. Android Studio(5)--创建 Android 库
  4. JAVA发送邮件案例
  5. 转:Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能 (阿里中间件团队博客)...
  6. mybatis中的mapper代理模式的数据传参的应用
  7. Spring MVC @JsonView使用详解
  8. web漏洞扫描器原理_漏洞扫描技巧篇——Web漏洞扫描器
  9. Delphi 学习网站
  10. 如何写好一篇SCI论文
  11. java 句柄无效_java.io.IOException:句柄无效
  12. 苹果慌了,iPhone11全系大降价抢市场
  13. Windows丢失缺少api-ms-win-crt-process-l1-1-0.dll解决方法
  14. 嵌入式之Linux的LCD背光调节及驱动的工作原理
  15. 全球与中国2-碘吡啶市场深度研究分析报告
  16. 基于51单片机的PWM控制马达电机调速正反转
  17. xmta温度控制仪说明书_【智能温控仪XMTA-908说明书】- 黄页88网
  18. java计算机毕业设计快递配送平台MyBatis+系统+LW文档+源码+调试部署
  19. 杜克大学计算机专业本科入学条件,杜克大学录取条件
  20. 关于聊天记录数据库表结构设计

热门文章

  1. SPOOLing技术的理解
  2. Go实战--golang中使用echo框架中的HTTP/2、Server Push(labstack/echo、golang.org/x/net/http2)
  3. 赛码约德尔(志勋)测试
  4. 【1630. 等差子数组】
  5. 2020-10-19 - 程序员如何把控自己的职业
  6. 转转用户画像平台实践
  7. matlab求峰度(kurtosis)、偏度(skewness)得函数及python对应的峰度(kurtosis)、偏度(skewness)函数
  8. css实现三角,对勾
  9. RGB转XYZ色彩空间开发及matlab实验笔记整理
  10. 基于python+django学生信息管理系统设计与实现(含程序源码和毕业设计)