Monorepo for generating x86 instruction test cases, storing them in PostgreSQL, running them against Aegis, and browsing the results locally.
Install the base Python project:
uv syncInstall workflow-specific extras when needed. The generator, web UI, and lifter comparison backends have separate dependency sets.
The shared PostgreSQL DSN defaults to:
postgresql://x86db:x86db@localhost:5432/x86db
Override it with X86DB_DSN when needed. Keep local overrides in .env;
.env.example documents the expected variable.
Start PostgreSQL and the read-only visualizer:
docker compose up --build -dOpen http://127.0.0.1:5000. PostgreSQL listens only on
127.0.0.1:5432. See db/README.md for initialization,
reset, and validation details.
Additional test shapes can be written to generator/data/insn.json
Populate a running local database from the test shapes using :
uv run --extra generator python generator/make_test_cases.pyThe generator will clear the db!
Convert test cases to test results with aegis:
cd aegis && just runInstall one comparison backend and replay Aegis results against it:
uv sync --extra lifter-unicorn
uv run lifter-compare --tool unicorn --sample-states-per-case 10Run the standalone B2R2 comparison tool with:
dotnet run --project tests/fsharp/b2r2_compare -- --sample-states-per-case 10Run the standalone Binsec comparison tool after creating its project-local opam
switch as described in tests/README.md:
opam exec --switch ./tests/ocaml/binsec_compare -- \
dune exec --root tests/ocaml/binsec_compare ./main.exe -- --sample-states-per-case 10See tests/README.md for the supported tools, generated CSV
output, and backend-specific requirements.