Overview of goto-synthesizer
developgoto-synthesizer/ module is responsible for all processing related to the loop-contracts synthesizer. It handles the logic required to synthesize contracts for loops within the toolchain.repository·develop·Indexed 22 days ago
https://github.com/diffblue/cbmcDocumentation for CBMC, a Bounded Model Checker for C and C++ focusing on memory and pointer safety, and JBMC, a Bounded Model Checker for Java. Includes guides on compiling JBMC from source, using janalyzer for static analysis, and detailed technical specifications on how Java bytecode is lowered to GOTO models, including concurrency instrumentation, generic specialization, and object allocation.
goto-synthesizer/ module is responsible for all processing related to the loop-contracts synthesizer. It handles the logic required to synthesize contracts for loops within the toolchain.jdiff/ is a tool designed to provide functionality similar to the standard Unix diff utility, but specifically tailored for comparing Java programs.The src/ directory is organized into functional modules. Understanding this structure helps in locating specific components of the toolchain:
goto-checker and goto-symex.cbmc, goto-cc, goto-analyzer, goto-instrument, goto-diff, goto-harness, and jbmc.JBMC is a bounded model checking tool for the Java language. It performs static analysis and symbolic execution on Java Bytecode (provided as .class files or .jar files) to prove or refute properties.
Properties are handled in two ways:
assert statements in their code for JBMC to verify.JBMC follows the same principles as CBMC.
The C++ front-end is designed to support the subset of C++ typically used in embedded and system applications. It functions by parsing C++ code and converting it into goto-programs, utilizing code from langapi and ansi-c.
Limitations: Because it targets a specific subset of the language, it does not provide full support for templates or many advanced/obscure C++ features. The supported language subset is continuously being extended.
CBMC supports formal code contracts to specify the behavior of functions and loops. Contracts allow you to define preconditions, postconditions, and other properties that the verifier uses to prove the correctness of your code.
Key areas of contract specification include:
requires, ensures, assigns).loop-invariants, decreases).goto-cc is a compiler replacement tool that performs the initial step of converting C or C++ programs into goto-binaries.
It is designed to be integrated into existing build procedures by replacing the standard compiler. To ensure the resulting binary emulates the semantics of specific compilers, you must name the goto-cc binary according to the compiler you wish to emulate. The output binaries produced by goto-cc are compatible with cbmc and goto-instrument.
goto-diff/ is a specialized tool designed to provide functionality similar to the standard diff utility, but specifically tailored for GOTO programs. It allows users to compare differences between GOTO program files.The CPROVER subversion archive includes several specialized programs for model checking, instrumentation, and test generation. While many interfaces are stabilizing, users should be aware that older code may require adjustments to compile or function correctly.
goto-programs.goto-programs.The ANSI C module provides a front-end for parsing ANSI C code and its common extensions. It uses a traditional Flex/Bison parser to transform C source files into a 'goto-program'.
Key features include:
internal_addition.c allows controlling analysis directly from source code via assertions, assumptions, atomic blocks, memory fences, and rounding modes.library/ directory contains C standard header files (e.g., stdio.c, string.c, setjmp.c, and threading interfaces) that use CPROVER built-in functions to model standard functionality correctly for analysis.CBMC is a Bounded Model Checker for C and C++ programs. It verifies properties such as array bounds (buffer overflows), pointer safety, exceptions, and user-specified assertions.
Key capabilities: