Repository navigation
Document call overrides and decompile pitfalls from the locomotor passes - #1083
Merged
Merged
Conversation
A user CALL_OVERRIDE_UNCONDITIONAL reference makes the decompiler count a fixed-target indirect call's pop; typed function pointers do not. Record the locomotor overrides, the view and this-slot reading pitfalls, the dropped x87 input of _ftol, and four GhidraMCP write behaviours.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds pitfalls found while typing the locomotor classes in the shared Ghidra database to
docs/research/ghidra-workflow.md.Stack pops of indirect calls: a typed function pointer does not change the decompiler's guess that the call pops nothing (
ActionDeindirectapplies the prototype after the stack analysis). A userCALL_OVERRIDE_UNCONDITIONALreference does.Locomotor overrides: the Virtual-call references section now lists where the database carries these overrides since 2026-10-06:
It also explains why per-call signature overrides can't be written through GhidraMCP: they need a label in the
overridenamespace, andcreate_labelwrites only global labels.Decompile reading:
this[-1]in view-typed methods;pLinkedTo[1]for AircraftClass fields;thisstack slot;_ftol.GhidraMCP writes:
set_function_prototyperenames default-named functions;void *silently for unknown pointer types;create_function_signaturestores no calling convention or parameter names;Evidence level: the database behaviour was observed on the staging copy and the live server (Ghidra 12.1.2, GhidraMCP 5.14.2). The
ActionDeindirectand override-namespace claims come from the Ghidra 12.1.2 sources:coreaction.cc,HighFunctionDBUtil.writeOverrideand GhidraMCP'sSymbolLabelService.createLabel.Validation: docs only; the new section link resolves to the existing heading. No Cargo run.