Exact-match record lookup
grep can locate a PC, opcode, address, or string. It does not reconstruct the complete register file at an instruction or resolve writes by address range and time.
Tenet indexes instruction-level execution traces for random-access state reconstruction and offline analysis. Inspect registers and memory at any recorded instruction, recover executed control flow, and run data-flow, algorithm, and platform analyses.
REGISTER DIFF
ANALYSIS SIGNAL
Text search locates individual records. Register state, overlapping memory writes, executed control flow, and value provenance require reconstruction across the instruction timeline.
grep can locate a PC, opcode, address, or string. It does not reconstruct the complete register file at an instruction or resolve writes by address range and time.
Replaying from the beginning for every query makes random navigation expensive. Running each analysis as a separate full scan multiplies IO and decoding cost.
Tenet indexes instruction offsets, anchors, register writes, memory history, and code. The same data model supports interactive navigation and deterministic analysis passes.
Queries return instruction IDs, runtime PCs, register values, time-specific memory contents, write history, and call context. Analysis results retain references to the records that produced them.
Analysis passes share the indexed trace, reconstructed state, and common scan infrastructure.
Reconstruct the register file and time-specific memory contents from ANCHOR records, diffs, reads, and writes.
Recover functions, XRefs, CFGs, calls, returns, loops, and observed execution counts.
Find register definitions, memory write history, forward propagation, backward dependencies, and critical paths.
Analyze constants, instruction patterns, loop behavior, call graphs, and data-flow structure.
Correlate ObjC messages, C APIs, JNI calls, syscalls, and cryptographic operations with traced instructions.
Pass outputs include inst_id, runtime PC, memory access, call-site, and source annotations where applicable.
Tenet supports traces containing up to billions of executed instructions without loading the complete trace into memory. Persistent indexes move repeated analysis cost out of subsequent sessions.
TraceReader uses mmap for zero-copy access. Indexed zstd blocks keep rich register, memory, and code evidence compact while preserving random block reads.
RocksDB separates offsets, anchors, register writes, memory history, and code into dedicated column families. First-open work becomes a durable index; later sessions avoid rebuilding it.
ANCHOR + diff avoids full snapshots per instruction. Adaptive checkpoints target a practical memory budget while keeping random state queries to a short replay window.
Compatible collectors share one sequential trace traversal instead of making every pass rescan billions of records. TBB schedules independent pass dependencies in parallel.
Full-scan analyses serialize compact binary results into RocksDB. Repeated GUI, CLI, RPC, or MCP queries can reuse prior work instead of recomputing it.
Fast native indexes handle navigation and structure globally; expensive semantic engines such as Triton are applied to focused ranges where precision justifies the cost.
Processing time, index size, and peak memory depend on record density, enabled fields, compression ratio, selected passes, and hardware. Tenet does not require the complete trace to reside in RAM.
The local index is shared by interactive interfaces, batch commands, and service APIs. Pass results can be cached in the same database.
Use the official QBDITrace on iOS or Android, or produce the same binary contract with a compatible collector such as Frida Stalker.
Build persistent indexes for instruction offsets, anchors, register writes, memory history, code, functions, and XRefs.
Run deterministic passes for CFG, taint, memory search, algorithm recognition, platform APIs, Trace Diff, and VM analysis.
Use the GUI or TUI interactively, export reports from the CLI, or retrieve structured results through RPC and MCP.
These analyses operate on recorded instruction order, reconstructed state, memory history, and observed control flow.
Identify constants, round loops, ARX/SPN/Feistel semantics, and the call context surrounding a signature or encryption routine.
Follow an input through register and memory transformations to an API call, buffer, branch, or return value.
Start from a suspicious output and recover the contributing instructions, last writers, constants, calls, and source annotations.
Connect ObjC messages, JNI or C API intercepts, syscalls, and crypto operations back to low-level execution.
Use static hints plus dynamic CFG, loop, taint, and data-flow evidence to study dispatchers, handlers, and virtual state.
Compare inputs, environments, or patched builds; locate the first control-flow, register, or memory divergence.
GUI / TUI provide interactive navigation. CLI / RPC support batch processing and integration. MCP / WebSocket expose indexed trace data and pass results to automation tools, including LLM clients.
Follow the quick start to record a trace, build its local index, and inspect the first instruction range.