首页 > 解决方案 > 在 Soot 中创建的类对象的输出类文件

问题描述

对于测试生成任务,我需要以.class编程方式生成文件。我正在使用 Soot 框架来生成代码。假设我已经创建了一个类Scene.v().makeSootClass("Test")并为其添加了一些方法。我现在如何将 Soot IR 结构的虚拟 Java 表示编译为实际.class文件?

文档列出了他们的命令行界面的一些输出选项,但我想通过 Java 中的 API 以编程方式执行此操作,但我找不到有关如何继续的说明。

标签: javasoot

解决方案


经过多次搜索,我找到了解释执行此操作的相应文档。这些文档中的相关代码片段是这个:

String fileName = SourceLocator.v().getFileNameFor(sClass, Options.output_format_class);
OutputStream streamOut = new JasminOutputStream(new FileOutputStream(fileName));
PrintWriter writerOut = new PrintWriter(new OutputStreamWriter(streamOut));

JasminClass jasminClass = new soot.jimple.JasminClass(sClass);
jasminClass.print(writerOut);
writerOut.flush();
streamOut.close();

推荐阅读