- Please never tell me to go try something again, this project is about reverse engineering the firmware, NOT manual testing.
- docs/common_parameters.json contains a reverse engineered set of calterm parameters from e2m files, reference it for parameter names and descriptions
- WARNING: Memory addresses in common_parameters.json may be INCORRECT - they were extracted from e2m files and have not been verified against the actual firmware
- One goal of this reverse engineering effort is to verify these addresses or identify which ones are wrong
- When you find a verified address mapping, note it in the CSV comment field
- NEVER make assumptions, ZERO acceptions! If definitive proof isn't available, ask the user for more data!
- the playbook should only contain steps the user should take to replay. It should NOT contain findings, notes, todo's or anything else ZERO EXCEPTIONS
- always use decimal in variable and function names to keep them human readable
NEVER make changes directly in Ghidra using MCP tools or manual edits. All changes MUST be made in CSV files only.
- Direct Ghidra changes (via MCP
rename_*,set_*tools) modify the database but are NOT persisted to CSVs - This creates inconsistency between the CSV source of truth and the Ghidra state
- Direct changes can cause unexpected side effects (e.g., variable types changing to
undefined) - The Ghidra project can be rebuilt from CSVs, but not vice versa
- Edit CSV files with your discoveries (function_renames.csv, global_variables.csv, etc.)
- Run ApplyAndExport (
Ctrl+Shift+E) in Ghidra to apply CSV changes - Verify the output in
ghidra/CM550.rep/working/J90280.05.ghidra.cpp - Only commit after verification - ensure ApplyAndExport was run and output looks correct
- All changes are in CSV files (NOT made directly in Ghidra)
- ApplyAndExport (
Ctrl+Shift+E) was run in Ghidra - Verified
ghidra/CM550.rep/working/J90280.05.ghidra.cppshows expected changes - No unexpected type changes (e.g.,
byte *becomingundefined *)
The Ghidra MCP tools should be used for reading/analysis only:
- ✅
decompile_function- Read decompiled code - ✅
search_functions_by_name- Find functions - ✅
get_function_xrefs- Analyze call hierarchy - ✅
list_strings- Find string references - ❌
rename_function_by_address- DO NOT USE (use CSV instead) - ❌
rename_variable- DO NOT USE (use CSV instead) - ❌
rename_data- DO NOT USE (use CSV instead) - ❌
set_function_prototype- DO NOT USE (use CSV instead) - ❌
set_local_variable_type- DO NOT USE (use CSV instead)