【问题标题】:What is the difference between wala and soot?wala 和 soot 和有什么不一样?
【发布时间】:2021-06-23 18:50:59
【问题描述】:

我需要为 Java 中的以下任务选择一个框架:

  • 提取控制流图
  • 过程间和过程内分析
  • 数据流分析
  • PDG
  • 不同的源代码分析任务(如方法体提取、测试代码提取)

哪个框架适合我的任务?

我遇到了很多不同的工具,除了 wala、soot 以及 JavaParser、Spoon 等等。

我应该选择哪个框架?理想情况下,我想采用一种更易于使用的工具。此外,我的期望是,Java 工具的普及应该已经存在于所有这些任务中。还是我的理解有误?

如果有人请我指出不同的资源等,我将不胜感激。

【问题讨论】:

  • JavaParser 和 Spoon 用于 Java source 代码; Soot 用于 Java 字节码(多年未维护的源代码解析)。其他的我不确定。
  • @JMax 不幸的是,您对多年未维护的 Soot 的看法是不对的。请查看其 GitHub 页面 (github.com/soot-oss/soot)。当它在 McGill 开发/维护时,您可能会感到困惑。目前,它由帕德博恩大学维护。
  • @Ekin 我说的是读取 Java 源代码的 Soot 部分。读取/写入Java或Android字节码的部分还在维护,但读取Java源代码的部分或多或少无法使用。

标签: soot control-flow-graph inria-spoon wala


【解决方案1】:

Spoon 非常适合您列表中的许多任务,而且非常易于使用。主要用于源码转换和分析,官方文档http://spoon.gforge.inria.fr/。对于控制和数据流分析,有基于 Spoon 的 spoon-control-flow 包。

【讨论】:

  • 您知道支持切片的工具吗?我看到github.com/little8hwq/javaslicer 虽然很旧并且支持很旧的 jdk (java 7)。想知道您是否知道任何可用的工具/库?
【解决方案2】:

我多次使用 Soot,用于不同的事情。我 100% 确定 Soot 会提取控制流图,并执行过程内和数据流分析。他们确实有一个很好的社区和愿意帮助你的好人。但是,我不太确定您是否可以使用 Soot 提取 PDG 或 SDG。我阅读了声称他们使用 Soot 完成的论文,但是我找不到源代码或示例(也许您必须进行一些修改,我不知道)。但我也知道您也可以执行interprocedural analysis with Soot

这里有一些tutorials for Soot。如果您有任何问题,我建议您加入他们的邮件组并提出问题。

对于 WALA,我也需要一个 PDG,因为在它的 wiki 中它说你可以提取一个 PDG。即使当您导入 WALA 项目时,其中也有一些您可能想要查看的示例代码。但是,我永远无法让它运行,因为没有足够的文档。它的大部分文档都很旧。

这里有一些tutorials for WALA。 这也是他们拥有的dataflow analysis test case 代码。也许它可以给你一些见解。我强烈建议您查看他们的测试用例,这可能会有所帮助。

简而言之,我相信您可以通过 Soot 和 WALA 完成您所要求的所有事情。然而,就我个人而言,我大部分时间都可以用 Soot 来完成它们。我想这更多的是对他们的熟悉程度以及您对其中一个的喜欢程度的问题。

【讨论】:

  • 您是否熟悉使用 Soot 进行过程间分析的任何工作代码示例?你在这里提到了一篇论文。
  • 您可能需要检查此存储库 github.com/rohanpadhye/vasco 。它再次基于另一篇名为“使用值上下文的 Soot 中的过程间数据流分析”的论文。这不是一个巨大的项目,所以我相信它很容易理解。您可能会在代码中找到一些示例。对于程序间分析,您可能需要“英雄”作为依赖项,但似乎这些人没有使用它。
  • 您也可以从这里找到一些简单实用的 Soot 代码示例。 brics.dk/SootGuide/sootsurvivorsguideexamples.tar.gz
猜你喜欢
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 2022-01-15
  • 2021-11-29
  • 2011-08-16
  • 2019-04-04
  • 2011-02-20
相关资源
最近更新 更多