wala/WALA
GitHub: wala/WALA
IBM 开源的静态程序分析框架,为 Java 字节码和 JavaScript 提供类型分析、指针分析、数据流分析和程序切片等核心分析能力。
Stars: 843 | Forks: 241
# WALA

[](https://github.com/wala/WALA/actions?query=workflow%3A%22Continuous+integration%22)
[](https://gitter.im/WALAHelp/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
T. J. Watson Libraries for Analysis (WALA) 为 Java 字节码及相关语言以及 JavaScript 提供静态分析功能。该系统基于 [Eclipse Public License](http://www.eclipse.org/legal/epl-v10.html) 授权,该许可证已被 [OSI](http://www.opensource.org/) (Open Source Initiative) 批准为完全认证的开源许可证。最初的 WALA 基础架构是作为 [IBM T.J. Watson Research Center](http://www.research.ibm.com/) DOMO 研究项目的一部分独立开发的。2006 年,[IBM](http://www.ibm.com/us/) 将该软件捐赠给了社区。
有关 WALA 的最新动态,请加入[邮件列表](http://sourceforge.net/p/wala/mailman/)。
## WALA 核心功能
WALA 的功能包括:
* Java 类型系统和类层次结构分析
* 支持 Java 和 JavaScript 的源语言框架
* 过程间数据流分析
([RHS](http://www.cs.wisc.edu/~reps/#popl95) 求解器)
* 上下文敏感的基于表格的切片器
* 指针分析和调用图构建
* 基于 SSA 的寄存器传输语言 IR
* 通用迭代数据流框架
* 通用分析实用程序和数据结构
* 字节码插桩库 ([Shrike](https://github.com/wala/WALA/wiki/Shrike))
## 入门指南
开始使用 WALA 最快的方法是[使用 Maven Central 中的包](https://github.com/wala/WALA/wiki/Getting-Started#quick-start-using-maven-central-packages)。
有关基于 Gradle 的示例,请参见 [WALA-start](https://github.com/wala/WALA-start) 仓库。我们正在积极重组更深入的 wiki 技术文档。在此期间,您可以查看教程幻灯片以获取 WALA 的概述:
* [Core WALA](https://wala.github.io/tutorials/PLDI_WALA_Tutorial.pdf) (PDF)
* [WALA JavaScript](https://wala.github.io/tutorials/WALAJavaScriptTutorial.pdf)
(PDF)
您还可以[观看 WALA JavaScript 教程的截屏视频](https://www.youtube.com/user/WALALibraries/videos)。
最后,目前要在 wiki 文档中进行搜索,我们建议在 GitHub 上进行站点特定搜索,例如,[搜索 "call graph"](https://github.com/wala/WALA/search?q=call+graph&type=wikis)。
## 文档
我们在 [GitHub wiki](https://github.com/wala/WALA/wiki) 上托管 WALA 的文档。**我们选择 wiki 格式正是为了让*您*能够参与贡献。** 不要害羞!
WALA 出版部门正按需在该 wiki 中填充技术文档,这主要基于发布在 [wala-wala](http://sourceforge.net/p/wala/mailman/) 邮件列表和 [Gitter](https://gitter.im/WALAHelp/Lobby) 上的问题。我们推荐[此页面](https://groups.google.com/forum/#!forum/wala-sourceforge-net)用于搜索邮件列表存档。
目前,我们会持续更新 [WALA 代码的 JavaDoc 文档](https://wala.github.io/javadoc)。如果您认为某个特定文件值得拥有更好的 javadoc,请[提交功能请求](https://github.com/wala/WALA/issues)。
## 获取帮助
要获取有关 WALA 的帮助,请[发送电子邮件至邮件列表](http://sourceforge.net/p/wala/mailman/)、[在 Gitter 上提问](https://gitter.im/WALAHelp/Lobby),或者[提交一个 Issue](https://github.com/wala/WALA/issues)。
## 所需 Java 版本
每个 [WALA 官方发布版](https://github.com/wala/WALA/releases) 的大多数组件均构建为适用于 Java 11 或更高版本。但是,使用 Eclipse 的组件至少需要 Java 17。
## 从源码构建
WALA 使用 Gradle 作为其构建系统。如果您打算自己修改或构建 WALA,请参阅 [Gradle 相关的 README](README-Gradle.md) 以获取更多说明和有用的提示。
## JavaScript 中的 WALA 工具
最近,我们一直在扩展用 JavaScript 实现的 WALA 工具集。我们在 [JS_WALA GitHub 仓库](https://github.com/wala/JS_WALA) 中发布了 JavaScript 的规范化器和一些基本的程序分析工具。我们还提供了 [jsdelta](https://github.com/wala/jsdelta) 和 [WALA Delta](https://github.com/wala/WALADelta),它们是用于 JavaScript 处理工具的 Delta Debugger。有关这些工具的更多详细信息,请参阅链接的 GitHub 仓库。
## 基于 WALA 的工具
一些团队已经构建了增强或基于 WALA 的开源工具,这些工具可能对其他 WALA 用户有用。有关详细信息,请参阅 [Wala-based tools](https://github.com/wala/WALA/wiki/WALA-Based-Tools) 页面。
## 致谢

我们感谢 [YourKit](https://www.yourkit.com) 为 WALA 开发人员提供了其出色的 [Java profiler](https://www.yourkit.com/java/profiler/) 的免费许可证,我们使用它来改进和维护 WALA 的性能。
标签:Android, CMS安全, DSL, IBM, JavaScript, JS文件枚举, Maven, SSA, WALA, 代码切片, 可配置连接, 后台面板检测, 域名枚举, 开源, 指针分析, 数据可视化, 数据结构, 漏洞验证, 程序分析, 类层次分析, 编译器, 调用图构建, 错误基检测, 静态代码分析