Skip to content

ZJU-PL/lotus

Repository files navigation

Lotus

Lotus is a program analysis, verification, and optimization framework. It provides several toolkits that can be used individually or in combination to perform different tasks. The current version has been tested on x86/ARM Linux and ARM Mac using LLVM-14 with Z3-4.11.

Docs

https://zju-pl.github.io/lotus

Publications

If you use Lotus in your research or work, please cite the following:

@misc{lotus2025,
  title = {Lotus: A Versatile and Industrial-Scale Program Analysis Framework},
  author = {ZJU Programming Languages and Automated Reasoning Group},
  year = {2025},
  url = {https://github.com/ZJU-PL/lotus},
  note = {Program analysis framework built on LLVM}
}

Papers that use Lotus:

  • ISSTA 2025: Program Analysis Combining Generalized Bit-Level and Word-Level Abstractions. Guangsheng Fan, Liqian Chen, Banghu Yin, Wenyu Zhang, Peisen Yao, and Ji Wang.
  • S&P 2024: Titan: Efficient Multi-target Directed Greybox Fuzzing. Heqing Huang, Peisen Yao, Hung-Chun Chiu, Yiyuan Guo, and Charles Zhang.
  • USENIX Security 2024: Unleashing the Power of Type-Based Call Graph Construction by Using Regional Pointer Information. Yuandao Cai, Yibo Jin, and Charles Zhang.
  • TSE 2024: Fast and Precise Static Null Exception Analysis with Synergistic Preprocessing. Yi Sun, Chengpeng Wang, Gang Fan, Qingkai Shi, and Xiangyu Zhang.
  • OOPSLA 2022: Indexing the Extended Dyck-CFL Reachability for Context-Sensitive Program Analysis. Qingkai Shi, Yongchao Wang, Peisen Yao, and Charles Zhang.

Components

For a detailed list of subsystems (alias analyses, intermediate representations, solvers, abstract interpreters, and utilities), see the Major Components Overview section of the documentation. The docs provide links to the relevant libraries, command-line tools, and example usage for each component.

Binary Tools

For detailed documentation on using the binary tools, see tools.

Installation

Prerequisites

  • LLVM 14.x
  • Z3 4.11
  • CMake 3.10+
  • C++14 compatible compiler

Build Lotus

git clone https://github.com/ZJU-PL/lotus
cd lotus
mkdir build && cd build
cmake ..
make -j$(nproc)

Notes:

  • The build system assumes that the system has a supported LLVM (14.x) and Z3 installed.

  • If CMake cannot find LLVM automatically (for example, when using a custom or locally built LLVM), re-run CMake with:

    cmake .. -DLLVM_BUILD_PATH=/path/to/llvm/lib/cmake/llvm

The build system will automatically download and build Boost if it's not found on your system. You can specify a custom Boost installation path with -DCUSTOM_BOOST_ROOT=/path/to/boost.

TODO: Implement automatic download of LLVM and Z3 dependencies

Contributors

Primary contributors to this project:

  • rainoftime / cutelimination
  • qingkaishi
  • rhuab
  • Zahrinas
  • Rexxar-Jack-Remar

About

A program analysis, verification, and optimization framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5