From e2e420c91147f2a83cf59b37c973f57e209ef67a Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Wed, 4 Feb 2026 17:23:47 -0500 Subject: Allow calling conventions to specify a list of registers that are required to be considered for heuristic calling convention detection --- binaryninjaapi.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'binaryninjaapi.h') diff --git a/binaryninjaapi.h b/binaryninjaapi.h index bb017ee5..331a24c0 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -17488,6 +17488,8 @@ namespace BinaryNinja { static uint32_t* GetCalleeSavedRegistersCallback(void* ctxt, size_t* count); static uint32_t* GetIntegerArgumentRegistersCallback(void* ctxt, size_t* count); static uint32_t* GetFloatArgumentRegistersCallback(void* ctxt, size_t* count); + static uint32_t* GetRequiredArgumentRegistersCallback(void* ctxt, size_t* count); + static uint32_t* GetRequiredClobberedRegistersCallback(void* ctxt, size_t* count); static void FreeRegisterListCallback(void* ctxt, uint32_t* regs, size_t len); static bool AreArgumentRegistersSharedIndexCallback(void* ctxt); @@ -17520,6 +17522,21 @@ namespace BinaryNinja { virtual std::vector GetIntegerArgumentRegisters(); virtual std::vector GetFloatArgumentRegisters(); + + /*! Gets the set of registers that must be arguments for heuristic calling convention + detection to consider this calling convention as a valid option. + + \return The set of registers that must be arguments + */ + virtual std::vector GetRequiredArgumentRegisters(); + + /*! Gets the set of registers that must be clobbered for heuristic calling convention + detection to consider this calling convention as a valid option. + + \return The set of registers that must be clobbered + */ + virtual std::vector GetRequiredClobberedRegisters(); + virtual bool AreArgumentRegistersSharedIndex(); virtual bool AreArgumentRegistersUsedForVarArgs(); virtual bool IsStackReservedForArgumentRegisters(); @@ -17552,6 +17569,8 @@ namespace BinaryNinja { virtual std::vector GetIntegerArgumentRegisters() override; virtual std::vector GetFloatArgumentRegisters() override; + virtual std::vector GetRequiredArgumentRegisters() override; + virtual std::vector GetRequiredClobberedRegisters() override; virtual bool AreArgumentRegistersSharedIndex() override; virtual bool AreArgumentRegistersUsedForVarArgs() override; virtual bool IsStackReservedForArgumentRegisters() override; -- cgit v1.3.1