One analyze_function call through the snapshot cache
Top row: the call analyze_function with procedure _percent_change passes the cacheable test, because Ghidra marks the operation cachePolicy snapshot and mutatesArtifact false, and becomes a query id. Middle: the query id is the SHA-256 of canonical JSON holding the target digest 01b5d08b08fb with kind executable, format mach-o and architecture arm64, the binding of provider ghidra 12.1.4 with profile digest 3fc72c9b4b7, the operation, and the parameters. Bottom left: on a hit the entry is replayed with the limitation that the call did not re-run the provider. Bottom right: on a miss the Ghidra bridge answers, Evidence ev_b492c85e is recorded, and an entry is stored under the id. Last row: a mutating call such as annotate_native_function invalidates the cache before rea dispatches it to Ghidra, even when its reply later fails, and later snapshot exports are refused.
analyze_function
{"procedure": "_percent_change"}
cacheable?
cachePolicy snapshot
mutatesArtifact false
query id
query_ and a SHA-256
yes
query_ = SHA-256 of canonical JSON
target: sha256 01b5d08b, executable, mach-o, arm64
binding: provider ghidra 12.1.4, analysis_profile digest 3fc72c9b
operation: analyze_function
parameters: {"procedure": "_percent_change"}
entry found: replay it
limitation added: Loaded from a local
REA analysis snapshot; this call did
not re-run the provider.
no entry: call the Ghidra bridge
5 to 7 s for the first call on a target,
then Evidence ev_b492c85e is recorded
and an entry is stored under the id
hit
miss
annotate_native_function
a mutating call, before rea
dispatches it to Ghidra
invalidateSnapshot
entries dropped, even if the call fails,
lookups miss, snapshot exports refused