diff options
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | binaryninjacore.h | 16 | ||||
| -rw-r--r-- | python/workflow.py | 18 | ||||
| -rw-r--r-- | workflow.cpp | 15 |
4 files changed, 42 insertions, 9 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 40c71396..1ec2c22a 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -9943,6 +9943,8 @@ namespace BinaryNinja { */ Ref<FlowGraph> GetGraph(const std::string& activity = "", bool sequential = false); void ShowReport(const std::string& name); + + std::vector<std::string> GetEligibilitySettings(); }; class DisassemblySettings : diff --git a/binaryninjacore.h b/binaryninjacore.h index cb5835c3..e3c34d2c 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -37,7 +37,7 @@ // Current ABI version for linking to the core. This is incremented any time // there are changes to the API that affect linking, including new functions, // new types, or modifications to existing functions or types. -#define BN_CURRENT_CORE_ABI_VERSION 75 +#define BN_CURRENT_CORE_ABI_VERSION 76 // Minimum ABI version that is supported for loading of plugins. Plugins that // are linked to an ABI version less than this will not be able to load and @@ -5188,21 +5188,19 @@ extern "C" BINARYNINJACOREAPI size_t BNWorkflowSize(BNWorkflow* workflow); BINARYNINJACOREAPI BNActivity* BNWorkflowGetActivity(BNWorkflow* workflow, const char* activity); - BINARYNINJACOREAPI const char** BNWorkflowGetActivityRoots( - BNWorkflow* workflow, const char* activity, size_t* inoutSize); - BINARYNINJACOREAPI const char** BNWorkflowGetSubactivities( - BNWorkflow* workflow, const char* activity, bool immediate, size_t* inoutSize); - BINARYNINJACOREAPI bool BNWorkflowAssignSubactivities( - BNWorkflow* workflow, const char* activity, const char** activities, size_t size); + BINARYNINJACOREAPI const char** BNWorkflowGetActivityRoots(BNWorkflow* workflow, const char* activity, size_t* inoutSize); + BINARYNINJACOREAPI const char** BNWorkflowGetSubactivities(BNWorkflow* workflow, const char* activity, bool immediate, size_t* inoutSize); + BINARYNINJACOREAPI bool BNWorkflowAssignSubactivities(BNWorkflow* workflow, const char* activity, const char** activities, size_t size); BINARYNINJACOREAPI bool BNWorkflowClear(BNWorkflow* workflow); - BINARYNINJACOREAPI bool BNWorkflowInsert( - BNWorkflow* workflow, const char* activity, const char** activities, size_t size); + BINARYNINJACOREAPI bool BNWorkflowInsert(BNWorkflow* workflow, const char* activity, const char** activities, size_t size); BINARYNINJACOREAPI bool BNWorkflowRemove(BNWorkflow* workflow, const char* activity); BINARYNINJACOREAPI bool BNWorkflowReplace(BNWorkflow* workflow, const char* activity, const char* newActivity); BINARYNINJACOREAPI BNFlowGraph* BNWorkflowGetGraph(BNWorkflow* workflow, const char* activity, bool sequential); BINARYNINJACOREAPI void BNWorkflowShowReport(BNWorkflow* workflow, const char* name); + BINARYNINJACOREAPI const char** BNWorkflowGetEligibilitySettings(BNWorkflow* workflow, size_t* inoutSize); + // Disassembly settings BINARYNINJACOREAPI BNDisassemblySettings* BNCreateDisassemblySettings(void); BINARYNINJACOREAPI BNDisassemblySettings* BNNewDisassemblySettingsReference(BNDisassemblySettings* settings); diff --git a/python/workflow.py b/python/workflow.py index 925c2bf0..77227933 100644 --- a/python/workflow.py +++ b/python/workflow.py @@ -522,6 +522,24 @@ class Workflow(metaclass=_WorkflowMetaclass): """ core.BNWorkflowShowReport(self.handle, "trace") + def eligibility_settings(self) -> List[str]: + """ + ``eligibility_settings`` Retrieve the list of eligibility settings for the Workflow. + + :return: list of eligibility settings + :rtype: list[str] + """ + length = ctypes.c_ulonglong() + result = core.BNWorkflowGetEligibilitySettings(self.handle, ctypes.byref(length)) + assert result is not None, "core.BNWorkflowGetEligibilitySettings returned None" + out_list = [] + try: + for i in range(length.value): + out_list.append(result[i].decode('utf-8')) + return out_list + finally: + core.BNFreeStringList(result, length.value) + @property def machine(self): if self._machine is not None: diff --git a/workflow.cpp b/workflow.cpp index 3dd771a4..0d02ab5b 100644 --- a/workflow.cpp +++ b/workflow.cpp @@ -325,3 +325,18 @@ void Workflow::ShowReport(const string& name) { BNWorkflowShowReport(m_object, name.c_str()); } + + +vector<string> Workflow::GetEligibilitySettings() +{ + size_t size = 0; + char** outBuffer = (char**)BNWorkflowGetEligibilitySettings(m_object, &size); + + vector<string> result; + result.reserve(size); + for (size_t i = 0; i < size; i++) + result.emplace_back(outBuffer[i]); + + BNFreeStringList(outBuffer, size); + return result; +} |
