Skip to main content

Symbolic Virtual Machine for defect detection

Project description

Micro-SVM

A simple and very basic symbolic virtual machine.

[!IMPORTANT] This is a major piece for an ongoing research project. We are currently working hard on preparing our results for a publication.

Overview

Micro-SVM is a standalone symbolic execution engine designed to:

  • Explore program execution paths.
  • Analyze control flow and state transitions.
  • Validate program specifications against expected behaviors.
  • Detect potential defects (e.g., unhandled exceptions, infinite loops).

This package provides the core symbolic execution engine used in research projects for defect discovery and path validation. It is not a full programming language implementation but rather a tool for analyzing executable specifications.

Supported features

  • A range of primitive types: boolean, int8/16/32/64, integer, real, char, string.
  • Symbolic primitive values.
  • Built-in containers for primitives: array<T>, set<T>, map<K,V>, transform<K,V> (same as map, more limited but sometimes faster).
  • Functions and/or static methods.
  • Java/C#-like reference values (ref<T> for references of known type, plain ref for "opaque" cases).
  • Structures and "classes" (i.e., structures with methods) with multiple inheritance.
  • Handling of abstract methods and virtual calls.
  • Intrinsics for specific operations.
  • Basic library/program specification serialization (JSON).
  • Ability to discover and validate both normal and failing execution paths (see examples).
  • Basic class-based user-defined exception handling (i.e. the usual try-catch-finally triplet and throw).
  • Basic decoding of complex structures (containers and structures/classes) as Python objects (i.e. as a list, a list of pairs or a dictionary).

Installation

pip install micro-svm

Known limitations

  • No function/method overload.
  • No type checks. It is expected for a specification to be validated and type-checked by external tools.
  • Little to no type conversion. The implementation relies heavily on Z3 in that aspect.
  • No support for IEEE floats.
  • Eager function/method execution. For every discovered program path, the machine checks if the whole path can be executed or not.
  • Very crude fault handling for certain language- and runtime-specific edge-cases. It is only possible to:
    • not allowing any fault to occur during a path's execution (default),
    • check if they might have happened (i.e., using CompilerContext.get_fault_status/clear_fault_status),
    • ignore faulty operations.
  • Exceptions regarding null-dereferencing, invalid array indexing and alike cannot be raised and caught automatically. It is advised to use CompilerContext.get_fault_status and throw to raise a suitable exception object. Note that get_fault_status is unhelpful unless SymbolicStateMachine.fault_mode is set to STORE.

License

This project is licensed under the MIT License - see the LICENSE file for details.


AI usage disclosure: 100% of code and ~50% of documentation were written by a human developer.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

micro_svm-1.0.0.tar.gz (56.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

micro_svm-1.0.0-py3-none-any.whl (56.5 kB view details)

Uploaded Python 3

File details

Details for the file micro_svm-1.0.0.tar.gz.

File metadata

  • Download URL: micro_svm-1.0.0.tar.gz
  • Upload date:
  • Size: 56.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for micro_svm-1.0.0.tar.gz
Algorithm Hash digest
SHA256 bf51525b57ac824b934cd5a9b195aa4b6c75dff9586339d11b35fd644875b2d1
MD5 49e815faa697c553caba6c2c94f62e33
BLAKE2b-256 090f3939f1e93cae8647ab4598c890b80b8ec26af7efb7a04f2558257d770fa7

See more details on using hashes here.

Provenance

The following attestation bundles were made for micro_svm-1.0.0.tar.gz:

Publisher: python-publish.yml on dog-m/micro-svm-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file micro_svm-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: micro_svm-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 56.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for micro_svm-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 179b8cb250268dd32d250a9f78f8e7e27ab834dbc2d0df609933ca258f68c9bd
MD5 7da0ed152e9912ab69222d2b8d9d1ab6
BLAKE2b-256 dfa8aaaedbe3e3eb0946e25ac082e7efcdcb0a8046927d24ae7849a96d741520

See more details on using hashes here.

Provenance

The following attestation bundles were made for micro_svm-1.0.0-py3-none-any.whl:

Publisher: python-publish.yml on dog-m/micro-svm-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page