Repository navigation
Releases
v0.17.0 — all fronts: X-Query nesting, KV time travel, blocking quality gates
Added
- X-Query nesting — parentheses at any depth with standard precedence (NOT > AND > OR):
(X-Tag == "a" OR X-Tag == "b") AND NOT X-Timestamp < 100. Quote-aware lexer + recursive-descent AST parser; quoted values survive keywords (X-Note == "buy (milk) AND eggs"is one clause). Legacyquery::parsekeeps its AND-list contract. - KV time travel — the append-only log becomes a first-class read: `emlbox kv get --at N` reconstructs the value after the first N deltas (--at 0 = base; a prefix past the end is an error, not "now"). Replay order is fixed by (ts, writer) — prefixes are identical on every device.
- KV audit history — `emlbox kv history
- Release binaries — this release ships emlbox for linux-x86_64 (musl, static), macos-aarch64 and windows-x86_64, built and attached by CI on tag push.
- Windows support, for real. The whole suite now passes on windows-latest for the first time:
- rev cell rewrites (type_mark / rewrite / field_mark / branch references) held an mmap view of the file being rebuilt — os error 1224; all paths now drop the view before writing;
- repair::truncate_blocks ditto;
- the runner harness wrote bus messages in Windows text mode (CRLF → CR-CR-LF) — now newline="", and the parser tolerates the artifact;
- pack produced OS-dependent section ids (x\y\f.py) — ids are now portable, always forward slashes;
- the vftables test skips on mach-o (the rev pipeline is ELF-only), and the two aes tests no longer race on process env.
- CI hardened: full suite on ubuntu / macos / windows; cargo fmt --check and cargo clippy --all-targets -- -D warnings are blocking gates; clippy went from 37 warnings to zero.
- Crate version aligned with the tags: 0.1.0 → 0.17.0.
Fixed
Changed
79 tests green on all three platforms.
MIME-OS / EMLBox v0.16.0 — build hardening, docs & promo
Release with two small compile fixes that make the whole suite honest again. No behavior changes — the on-disk format and the CLI surface are exactly as at v0.15.0.
Fixed
- The
emlboxbinary target compiles again (E0716let-binding in therev stringshandler); tests/sync.rscompiles and passes again (Delta{id,after}initializers updated);- CI runs the full suite:
cargo build --all-targets+cargo test— 69 tests green; - v0.15.0-era build state documented honestly in LIMITATIONS.md → Repository state.
Docs & promo
- README rewritten bilingual (EN + RU) in the CapsuleCraft house style;
- CHANGELOG reconstructed from all 28 git tags; CONTRIBUTING added;
- promo: real terminal screenshots (release build), logo concept, launch posts RU/EN.
The format is unchanged since v0.1: containers from day one still open.
v0.15.0 — массовая декомпиляция
rev decomp-all: весь бинарник в один .c (сигнатуры из волны, имена полей). rev stats: функции/рёбра/топ по размеру. FTL: 3576 функций, 11196 рёбер; 288 функций ShipManager -> 33762 строки.
v0.14.2 — декомп в GUI
emlbox-gui: вкладка Rev — открыл rev-клетку, кнопка Декомпилировать → псевдокод с именами полей. 72 теста.
v0.14.1 — имена полей структур
rev field: пометка поля (X-Field-0x670: scrap), декомпилятор подставляет в [arg0+0x670] -> [arg0+scrap]. FTL: *[arg0+scrap] += arg1. 72 теста.
v0.14.0 — читаемый декомпилятор
Декомпилятор: параметры в теле (arg0/arg1 по калибровке пролога + отслеживание перезаписанных регистров), std::string-операции подавлены, push/pop пролога убраны. FTL: if (arg1 > 0) { *[arg0+0x670] += arg1; }. 71 тест.
v0.13.1 — сводный отчёт
rev report: вся картина бинарника одним взглядом — функции, vftables, строки, энтропия, топ-вызываемые (libc: __stack_chk_fail 645x, free 264x), пример декомпиляции. 71 тест.
v0.13.0 — локальные переменные + реальный libc
rev decomp --struct: стек-слоты -> local_8/param_1 (стиль Ghidra). Декомпилирован strlen из glibc: if/else/while с условиями из флагов. 71 тест.
v0.12.3 — while + аргументы вызовов
rev decomp --struct: while-циклы (gcc -O0 паттерн: jcc назад к телу), аргументы вызовов из mov перед call (net_send(0x21, rax, 0x10)), пролог убран (push rbp/rbp=rsp/rsp-=). 70 тестов.
v0.12.2 — условия и типы в декомпиляторе
rev decomp --struct: cmp/test -> настоящие условия (test eax,eax; jg -> if (eax > 0)); сигнатура из волны типов (X-Type-argN -> // player_take_damage(Player* arg0)). 69 тестов.