Files
reverse-engineering-anything/docs/bun-standalone.md
T
morluto cb4e5cfbff feat(analysis): make resource budgets recoverable across CLI and MCP (#9706)
* refactor(analysis): centralize resource budgets and recovery facts

* feat(analysis): expose ASAR and Ghidra runtime admission controls

* feat(artifacts): expose reader admission and preserve limited recognition

* feat(javascript): expose recoverable semantic precision budgets

* feat(web): add recoverable source-map budgets and compact retained views

* feat(web): make historical capture decoding budgets recoverable

* fix(desktop): enforce selected view policies across capture and export

* feat(runtime): make Frida and LLDB retention budgets selectable

* feat(native): expose diagnostic budgets and preserve exhaustion causes

* feat(managed): expose recoverable snapshot and representation budgets

* feat(metadata): make Go and Rust inspection budgets recoverable

* feat(wasm): expose representation and producer admissions

* feat(evm): expose per-call worker resource budgets

* feat(android): make resource and string-pool omissions recoverable

* feat(producers): expose command and recorded-capture budgets

* docs(analysis): record recovery contracts and integrated validation

* fix(docs): link calibration oracle from published verification pages

* fix(docs): restore desktop task anchors and receipt links

* test(analysis): align fixtures with selectable budget contracts

* fix(analysis): remove source-location projector dependency cycle

* test(analysis): refresh budget recovery and verifier regressions

* test(analysis): preserve format and publication recovery expectations

* test(windows): align conformance with owned runtime admission

* fix(desktop): preserve selected alias kinds in exported state

* test(analysis): align provider fixtures with recoverable budgets

* test(desktop): validate emitted alias metadata structurally

* fix(ghidra): classify bounded Windows endpoint refusals

* test(cli): assert selectable artifact admission recovery

* fix(cli): preserve capture provenance in environment builds
2026-11-10 05:11:20 -05:00

4.8 KiB

Bun standalone executables

inspect-artifact inventories embedded Bun module graphs in Mach-O __BUN,__bun, PE .bun, ELF .bun, and appended trailers. extract-artifact writes their stored module contents through the existing safe output tree. Neither operation executes the executable or decompiles bytecode.

rea inspect-artifact ./hello --json
rea extract-artifact ./hello --json

In MCP, open the executable with open_binary, then call inspect_artifact. Use detail: "summary" for large graphs and inspect_analysis_view to page retained Evidence. The root metadata's entry_point_logical_path is the reader-owned location of its entry module. Use it as an inventory logical_paths filter, then read selected node fields with the returned content identity. This also works for names mapped to indexed extraction paths. The complete Evidence stays retained; no source-name normalization is needed in the caller.

The root reports the carrier, layout, module count, entry point, raw flags and compile exec-argv. Each module retains its source name, loader and encoding values, entry-point status, sizes and SHA-256. Sourcemaps, bytecode and module-info regions are separate children. Source names such as /$bunfs/root/main.js remain in metadata; extraction uses a relative path. Unsafe or non-UTF-8 names receive an indexed path and retain their source spelling or bytes. Virtual names deeper than the selected path_parts allowance (default 256) also use an indexed path with an explicit limitation, preventing unbounded path-tree work while retaining the source fact. Duplicate names remain separate occurrences; ordinary extraction collision rules apply.

The recognized record shapes are the 36-byte Bun 1.3.3 layout and the 52-byte Bun 1.3.9 layout. These labels identify structural layouts, not a detected compiler version. Bun does not store an explicit revision identifier: unknown table sizes and ambiguous known layouts are unsupported. A future layout that is byte-for-byte compatible cannot be distinguished. Invalid pointers and truncated claimed sections are malformed. An absent trailer without a named section does not establish a Bun graph. Unknown enum values remain raw, with a null name.

Sourcemaps are stored Bun regions, not necessarily standalone JSON source maps. Extracted contents retain their original encoding. Use JavaScript analysis only on compatible source files; bytecode is retained as evidence, not decoded.

Module parsing reads exact metadata ranges rather than loading stored asset bodies or whole pages around small pointers. A cache retains at most 256 KiB and 1,024 ranges for one reader preparation. Cumulative uncached metadata reads default to 256 MiB, checked before allocation or I/O. The module table, decoded strings and combined logical path tree have separate admission checks; by default at most 250,000 distinct path prefixes are admitted before inventory construction. Stored bodies are range-streamed for hashing and extraction. Header/suffix observations are reused only for the same admitted file state, with selected-path checks before publication.

Both artifact operations accept artifact_limits.bun. Its independent controls are payload_bytes, module_count, representation_bytes, metadata_read_bytes, recognition_table_bytes, recognition_load_command_bytes, path_parts and path_nodes. Failed recognition remains explicitly limited instead of proving absence. ELF section names are examined at their actual offsets, including names beyond a large section-name prefix. Select artifact_limits.expanded_bytes to change the aggregate referenced-plaintext work allowance.

For a reported metadata-read refusal, keep the same carrier and retry with --artifact-limits '{"bun":{"metadata_read_bytes":536870912}}' or the equivalent MCP artifact_limits object. Omitted fields keep defaults. The response names the effective limit and exact repair; accepted overrides are reported separately from caller selections. Changes apply on the next call without restarting REA. Summary and selected extraction do not change the producer's admission.

See limits and recovery for admission ceilings. Synthetic tests cover the carriers and malformed declarations. Run node scripts/verify-bun-standalone.mjs after npm run build:cached for local Bun verification, and add --docker to compile a Linux fixture with oven/bun:1.4.0. Bun and Docker are fixture producers only and are not installed by REA.

Layout references: Bun 1.3.3 serializer and Bun 1.3.9 serializer.

The current 52-byte record order can also be checked in the Bun 1.4.4 Rust serializer.