  JBMC is an open-source SAT- and SMT-based bounded model checking tool for
verifying Java bytecode. JBMC relies on an operational model of the Java
libraries, which conservatively approximates their semantics, to verify
assertion violations, array out-of-bounds, unintended arithmetic overflows, and
other kinds of functional and runtime errors in Java bytecode. JBMC can be used
to either falsify properties or prove program correctness if an upper bound on
the depth of the state-space is known. Practical applications of JBMC include
but are not limited to bug finding, property checking, test input generation,
detection of security vulnerabilities, and program synthesis. Here we provide a
detailed description of JBMC's architecture and its functionalities, including
an in-depth discussion of its background theories and underlying technologies,
including a state-of-the-art string solver to ensure safety and security of
Java bytecode.
