3.9 KiB
Function Map
The function map is the canonical ledger for reverse-engineering progress. It should be updated even when the understanding is partial, because partial structure is still useful if it is explicit about confidence.
The handbook index in docs/README.md should stay high-level. Per-pass function additions and
renames belong here and in the derived export artifacts, not in the README. High-level control-loop
and subsystem flow belongs in the split atlas under docs/control-loop-atlas/, with
docs/control-loop-atlas.md serving as the compatibility index and this file staying
function-centric.
Canonical Schema
The committed CSV header is:
address,size,name,subsystem,calling_convention,prototype_status,source_tool,confidence,notes,verified_against
Field meanings:
address: virtual address in the canonical 1.06 executablesize: best current size in bytes; leave blank if unknownname: current best function namesubsystem: coarse ownership bucket such asstartup,bootstrap,support,render,audio,ui,map,save,networkcalling_convention:cdecl,stdcall,thiscall,fastcall, orunknownprototype_status:unknown,inferred, orconfirmedsource_tool: primary tool or source behind the current rowconfidence: integer from1to5notes: short justification, ambiguity, or follow-upverified_against: hash, runtime trace, second tool, or other corroboration
Update Rules
- New rows must always include
address,name,subsystem,source_tool, andconfidence. - Prefer names in the shape
owner_verb_object[_qualifier]. - Prefer one primary verb, one primary object, and at most one qualifier.
- If a rename is speculative, state that directly in
notes. - When two tools disagree on function boundaries, preserve the ambiguity in
notesinstead of hiding it. - Prefer one row per concrete function, not per guessed feature.
- Prefer
try_for best-effort helpers that may fall through without mutation or publication. - Prefer
apply_when a helper commits one selected policy or state transition. - Reserve
evaluate_for read-heavy helpers that classify or score state without committing the later action themselves. - Prefer one stable family noun once a transient runtime structure is grounded.
- Use
queue_nodefor transient linked-list allocations, and reserverecordfor persisted rows or document-style payloads. - Prefer
startup_companyovercompany_startwhen the object is the newly started company. - Prefer participial qualifiers such as
_ignoring_territoriesover_with_*_ignoredonce the side condition is grounded. - Drop filler tails such as
_lanesonce a broader owner is grounded well enough to carry the family directly. - Prefer
_and_optionally_over_with_optional_when a helper may take one secondary path but the main owner is still singular. - Treat
_and_,_with_,_if_, and_via_as fallback tools for still-uncertain seams, not the default naming style. - Raw offset tails such as
field_0xNNare acceptable for direct accessors and low-confidence rows, but should be replaced once a grounded semantic field name exists.
Starter Subsystems
Use these buckets until the map needs finer structure:
startupbootstrapshellsupportuirenderaudioinputnetworkfilesystemresourcemapscenariosavesimulationunknown
Verification Sources
Examples for verified_against:
sha256:01b0... + objdumpghidra + rizinghidra + string xrefruntime trace under winedbg
Exit Criteria For The Milestone
The first function-mapping milestone is complete when the repo has:
- a stable starter map for the canonical binary
- named anchors for startup and a few obvious subsystem gateways
- enough notes and exports that a future session can continue without rediscovery