Ikos Versions Save

Static analyzer for C/C++ based on the theory of Abstract Interpretation.

v3.3

1 month ago

Release date

March 2024

Summary

This is a maintenance release that addresses bugs related to Python dependencies, the order of passes in the LLVM frontend, and missing imports.

List of changes

analyzer

  • Introduce compatibility with pygments >= 2.12 (#264).

Frontend

  • Change order of passes (#205).

Core

  • Add missing imports (#263).

Overall changes

  • Version bump (#266).

Metrics

4 issues were closed as part of IKOS 3.3.

The net balance including all files (e.g., code, docs) is that IKOS 3.3 is 4 lines bigger than the previous version.

We had submissions from 1 new author who had never submitted patches to IKOS before.

Full Changelog: https://github.com/NASA-SW-VnV/ikos/compare/v3.2...v3.3

v3.2

4 months ago

Release date

December 2023

Summary

This is a maintenance release that addresses bugs related to Python packaging, LLVM 14, IPv6 handling and multi OS support. Other changes focus on the documentation, the software engineering process and leveraging features offered by Github.

There are two notable changes:

  • We've dropped support for Python 2.
  • We've added CI jobs via Github actions, which should ensure that IKOS keeps working on supported platforms.

List of changes

Analyzer changes

  • Fixed hang of IKOS server due to not listening on IPv6 (#158).
  • Fixed exception on Windows when IKOS is executed from a different drive (#165).
  • Fix incorrect argument -section in call to llvm-objdump by @lojikil (#199).
  • Fixed installation issues related to Python (#243, #242, #233, #193, #185).
  • Fixed error parsing the output of llvm-objdump in LLVM 14 (#203).
  • Typo fixes (#227).

AR Changes

  • Add missing include directives by @gitrj95 (#201).

Overall changes

  • Added documentation to the troubleshooting guide regarding a bug in old versions of APRON (#78).
  • Added documentation to the troubleshooting guide regarding lack of support for multi-threaded code (#124).
  • Fix the unaligned pointer analysis check parameter in the README.md file by @asensi in (#222).
  • Set up Continuous Integration to build for Mac and Linux (#223).
  • Fixed over-reaching gitignore rules (#217).
  • Created Github releases for all IKOS versions, and attached the release notes to them (#219).
  • Bump Copyright years (#246, #249).
  • Version bump (#255).
  • Improved issue / milestone / release handling process (not reflected as a separate issue).
  • Fixed homebrew formula (https://github.com/NASA-SW-VnV/homebrew-core/issues/9).

Metrics

23 issues were closed as part of IKOS 3.2.

The net balance including all files (e.g., code, docs) is that IKOS 3.2 is 437 lines smaller than the previous version.

We had submissions from 4 new authors who had never submitted patches to IKOS before.

Full Changelog: https://github.com/NASA-SW-VnV/ikos/compare/v3.1...v3.2

v1.2

5 months ago

IKOS version 1.2 release notes

Release date

October 2016

List of changes

IKOS Core changes

  • Added an abstract domain to handle C++ exceptions.

Analyzer changes

  • Implemented a proper C++ exception propagation handling using abstract interpretation. IKOS correctly handles C++ code with exceptions.
  • Improved the analysis of string-related functions (such as strlen, strcpy and strcat).
  • Fixed the precision of the null dereference analysis.

ARBOS changes

  • Removed AR_Unwind as it is no longer generated by LLVM since LLVM 3.1
  • Added APIs to set and retrieve the "resume" basic block in an AR_Code.

v1.1.2

5 months ago

IKOS version 1.1.2 release notes

Release date

September 2016

List of changes

IKOS Core changes

  • Added interfaces for abstract domains, nullity domains, uninitialized variables domains, pointer domains and memory domains.
  • Moved the pointer domain, the value domain and the summary domain under IKOS core.

Analyzer changes

  • Added a pass to unify exit nodes.

ARBOS changes

  • Added APIs to set and retrieve "unreachable" and "unwind" basic blocks in an AR_Code

v1.1.1

5 months ago

IKOS version 1.1.1 release notes

Release date

August 2016

List of changes

Analyzer changes

  • Added a pass branching-opt to optimize all Control Flow Graphs of the AR, before the analysis. The pass detects unreachable paths in the graphs and removes them.

IKOS Core changes

  • Improved the precision of the interval domain on most binary operators.
  • Added a wrapper for APRON.

Other changes

  • Improved the bootstrap script. It is now able to build and install zlib, ncurses, libedit, GMP, SQLite and Python.
  • Added installation instructions for Arch Linux, CentOS, Debian, Fedora, Mac OS X, Red Hat and Ubuntu.
  • Added support for gcc 4.9.2 and boost 1.55.0.

v1.1.0

5 months ago

IKOS version 1.1.0 release notes

Release date

June 2016

List of changes

Analyzer changes

  • Added the ability to demangle C++ function names.
  • We now handle calloc() correctly. In IKOS 1.0.0, the function call was just ignored.
  • Added the runtime options --display-invariants and --display-checks.
  • Added a column called column to the result tables in the output database, containing the column number in the source code.
  • Added a column called stmt_uid to the result tables in the output database, containing the UID of the checked statement.
  • Performance improvement (the analysis is 70% faster in average).
  • Bug fixes.

LLVM Frontend changes

The LLVM frontend now supports both LLVM 3.7 and 3.8.

ARBOS changes

ARBOS now gives the column number in addition to the line number in AR_Source_Location.

v1.0.0

5 months ago

IKOS version 1.0.0 release notes

Release date

May 2016

List of changes

LLVM Frontend changes

In this release we upgraded our LLVM frontend from version 2.9 to 3.7.

To have a C/C++ program fully represented in AR, there are several code transformation we had to handle with the frontend's intermediate representation. When using the LLVM framework as the frontend, we transform the following LLVM instructions so they can be expressed in AR:

  • phi instruction
  • getelementptr instruction
  • insertvalue and extractvalue instructions
  • i/fcmp and select instructions
  • removed br
  • constantexpr and its subclasses
  • translation of intrinsic calls to AR-supported intrinsic calls. We currently support memset, memcpy, memmove, vastart, vaend, va_arg, and vacopy.

In the previous release v0.0.1 we handled all transformation in ARBOS. The previous tool chain architecture defined another intermediate representation, called AIR, that served as a direct translation from the LLVM bitcode to an S-expression format that was fed into ARBOS. ARBOS then parsed and transformed AIR to AR in memory.

This release removes AIR entirely. All transformation are done in LLVMAR, while ABROS only parses the AR and makes it available in memory for ARBOS analysis plugins to traverse and perform analysis on it.

ARBOS API changes

  • Each AR_Global_Variable may contain an initializer represented as AR_Code. In the previous release we dedicated an initializer function for each global variable. These initializer functions were individually invoked in main(). In this release, analyzers need to dive into the initializer of an AR_Global_Variable to analyze the initializer code.
  • Differentiates between store vs. real sizes of an AR_Type.
  • Supports varags intrinsic calls in the AR. This was not supported in the previous release.
  • Function pointers are now available in the AR model; they were misinterpreted and were not available in the previous release.

v3.1

1 year ago

IKOS version 3.1 release notes

Release date

December 2022

List of changes

LLVM frontend changes

  • Upgrade LLVM from 9.0.x to 14.0.x

Analyzer changes

  • Add option to trace the invariant during analysis.
  • Fix issue detecting uses of uninitialized dynamically-allocated memory.
  • Allow analysis of programs without debug information.
  • Support producing reports in SARIF format.
  • Support producing reports in JUnit format.
  • Allow running ikos-scan without an HTTP server, outputting JSON.
  • Update use of deprecated Python function isAlive.
  • Small refactoring changes.

Overall changes

  • Update installation instructions for Ubuntu 20.04.

v3.0

4 years ago

IKOS version 3.0 release notes

Release date

December 2019

List of changes

IKOS Core changes

  • Implemented a parallel fixpoint engine
  • Implemented a partitioning abstract domain based on the values of a given integer variable
  • Implemented a polymorphic memory abstract domain
  • Fixed most abstract domains to be thread-safe
  • Refactor the pointer and memory abstract domain interfaces

LLVM frontend changes

  • Upgraded LLVM from 8.0.x to 9.0.x

Analyzer changes

  • Implemented a parallel interprocedural and intraprocedural value analysis
  • Add an option to enable abstract domain partitioning based on the returned value of a function

v2.2

4 years ago

IKOS version 2.2 release notes

Release date

August 2019

List of changes

IKOS Core changes

  • Fixed non-convergence issues in the fixpoint iterator
  • Improved the precision of the modulo operator for the DBM domain
  • Improved the weak topological order implementation
  • Implemented the narrowing operator with a threshold

Analyzer changes

  • Improved the analysis and checks of the standard library functions
  • Implemented a logger showing the progress of the analysis
  • Added intrinsics to model library functions
  • Added a checker to watch memory writes at a given location
  • Added a checker to warn about unsound statements
  • Added checks for recursive calls
  • Forward -I, -D, -W, -w and -m flags to clang
  • Support the analysis of LLVM text assembly file .ll
  • Added an option to disable the cache of fixpoints
  • Added options to control the fixpoint engine

LLVM frontend changes

  • Upgraded LLVM from 7.0.x to 8.0.x
  • Improved the support of LLVM debug information
  • Improved the error message for mismatch of intrinsics
  • Added support for empty array fields in structures

CMake changes

  • Added support for linking with LLVM shared libraries
  • Added version detection for GMP, MPFR, PPL, SQLite

Overall changes

  • Added several sections to the documentation:
    • Analysis assumptions
    • Modeling library functions
    • Analysis of embedded software