Skip to main content

Simple symbolic Virtual Machine in Python and Z3

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.1.tar.gz (56.7 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.1-py3-none-any.whl (56.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: micro_svm-1.0.1.tar.gz
  • Upload date:
  • Size: 56.7 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.1.tar.gz
Algorithm Hash digest
SHA256 3199e082c432cfb7d0b6cc9767e261f138f3cb5d0a81142d145600b7941129e7
MD5 02b2e475239442b3a66f2d79f90dd6e7
BLAKE2b-256 81f1a18a8cb3eb6e3aaf10dfe0d11b9dd4d6290289d2585d4bca83b52dbd9789

See more details on using hashes here.

Provenance

The following attestation bundles were made for micro_svm-1.0.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: micro_svm-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 56.6 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ad49c7df6ed7ee74c83576570517f4bd7cbb921c5cb040d827039988b804294e
MD5 3530e2323a2afd6e5e69ecfdff1f6e3f
BLAKE2b-256 068f2d6b9191480321a4337dc368ed65db1901d3ce41572edb026ee33e72a658

See more details on using hashes here.

Provenance

The following attestation bundles were made for micro_svm-1.0.1-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