Soot 命令行或程序运行常见问题
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 命令行或程序运行常见问题相关推荐
- Windows在cmd命令行环境下运行c程序
现在有许多便利的编译器,例如DevC++,sublime,vscode等等,在这些编译器里面我们添加必要的插件就可以直接运行C语言程序.但是还有一种我们可以采取的普适的运行C程序的方法--在cmd命令 ...
- 命令行中编译运行C/C++程序(多个)
此处运行环境是在Windos下,运行cmd命令进入DOS界面,Linux中的运行过程有做说明. 首先,如果想在DOS窗口中进行C/C++代码的编译,则需要先配置gcc的环境变量 1.使用g++进行编译 ...
- golang 命令行_如何使用Golang编写快速有趣的命令行应用程序
golang 命令行 by Peter Benjamin 彼得·本杰明(Peter Benjamin) 如何使用Golang编写快速有趣的命令行应用程序 (How to write fast, fun ...
- graalvm_GraalVM上的Picocli:极快的命令行应用程序
graalvm GraalVM GraalVM允许您提前将程序编译为本地可执行文件. 与Java VM相比,生成的程序具有更快的启动时间和更低的运行时内存开销. 这对于通常寿命很短的命令行实用程序尤其 ...
- GraalVM上的Picocli:极快的命令行应用程序
GraalVM GraalVM允许您提前将程序编译为本地可执行文件. 与Java VM相比,生成的程序具有更快的启动时间和更低的运行时内存开销. 这对于通常是短暂的命令行实用程序尤其有用. Graal ...
- 命令行的形式运行php
转自:http://www.cnblogs.com/myjavawork/articles/1869205.html 注意:在安装php时需要将php 的安装目录加到环境变量 PATH 中 (右击我的 ...
- LFTP : 一个功能强大的命令行FTP程序
LFTP : 一个功能强大的命令行FTP程序 大家好,这篇文章是介绍Lftp以及如何在Linux操作系统下安装的.Lftp是一个基于命令行的文件传输软件(也被称为FTP客户端),由Alexander ...
- python编写命令行框架_使用 Python 和 Click 编写命令行应用程序
简评:python 构建命令行应用的第三方比较有名的包除了 click 之外还有一个叫 docopt,这是一个以文档先行为目标的包.个人是比较倾向于 Click 的,看了这篇文章之后,也很快写了一个 ...
- linux命令行python_干货:4 个绝佳的命令行终端程序
导读 让我们来看几个精心设计的 CLI 程序,以及如何解决一些可发现性问题.在 GUI 应用程序中,菜单.工具提示和图标用于向用户展示功能.而命令行缺乏这种能力,但是有办法克服这个问题.在深入解决方案 ...
最新文章
- c++ 重载、重写、重定义(隐藏)
- 【zz】如何去理解 拓扑排序算法
- Android Studio(5)--创建 Android 库
- JAVA发送邮件案例
- 转:Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能 (阿里中间件团队博客)...
- mybatis中的mapper代理模式的数据传参的应用
- Spring MVC @JsonView使用详解
- web漏洞扫描器原理_漏洞扫描技巧篇——Web漏洞扫描器
- Delphi 学习网站
- 如何写好一篇SCI论文
- java 句柄无效_java.io.IOException:句柄无效
- 苹果慌了,iPhone11全系大降价抢市场
- Windows丢失缺少api-ms-win-crt-process-l1-1-0.dll解决方法
- 嵌入式之Linux的LCD背光调节及驱动的工作原理
- 全球与中国2-碘吡啶市场深度研究分析报告
- 基于51单片机的PWM控制马达电机调速正反转
- xmta温度控制仪说明书_【智能温控仪XMTA-908说明书】- 黄页88网
- java计算机毕业设计快递配送平台MyBatis+系统+LW文档+源码+调试部署
- 杜克大学计算机专业本科入学条件,杜克大学录取条件
- 关于聊天记录数据库表结构设计
热门文章
- SPOOLing技术的理解
- Go实战--golang中使用echo框架中的HTTP/2、Server Push(labstack/echo、golang.org/x/net/http2)
- 赛码约德尔(志勋)测试
- 【1630. 等差子数组】
- 2020-10-19 - 程序员如何把控自己的职业
- 转转用户画像平台实践
- matlab求峰度(kurtosis)、偏度(skewness)得函数及python对应的峰度(kurtosis)、偏度(skewness)函数
- css实现三角,对勾
- RGB转XYZ色彩空间开发及matlab实验笔记整理
- 基于python+django学生信息管理系统设计与实现(含程序源码和毕业设计)