From ea8f992f355a9152e0a77fa861d01f39081d9670 Mon Sep 17 00:00:00 2001 From: Jon Palmisciano Date: Tue, 27 Jul 2021 07:59:29 -0400 Subject: Function: Add C++ bindings for `Get{Medium,High}LevelILVariables()` --- binaryninjaapi.h | 3 +++ function.cpp | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 1d731218..3f4b5b3c 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -3381,6 +3381,9 @@ __attribute__ ((format (printf, 1, 2))) bool GetStackVariableAtFrameOffset(Architecture* arch, uint64_t addr, int64_t offset, VariableNameAndType& var); std::map GetVariables(); + std::set GetMediumLevelILVariables(); + std::set GetHighLevelILVariables(); + void CreateAutoVariable(const Variable& var, const Confidence>& type, const std::string& name, bool ignoreDisjointUses = false); void CreateUserVariable(const Variable& var, const Confidence>& type, const std::string& name, diff --git a/function.cpp b/function.cpp index 9c9e5e68..fc90a8d1 100644 --- a/function.cpp +++ b/function.cpp @@ -1107,6 +1107,42 @@ map Function::GetVariables() } +set Function::GetMediumLevelILVariables() +{ + auto mlil = this->GetMediumLevelIL(); + if (!mlil) + return {}; + + size_t count; + BNVariable* vars = BNGetMediumLevelILVariables(mlil->GetObject(), &count); + + set result; + for (size_t i = 0; i < count; i++) + result.insert({vars[i]}); + + BNFreeVariableList(vars); + return result; +} + + +set Function::GetHighLevelILVariables() +{ + auto hlil = this->GetHighLevelIL(); + if (!hlil) + return {}; + + size_t count; + BNVariable* vars = BNGetHighLevelILVariables(hlil->GetObject(), &count); + + set result; + for (size_t i = 0; i < count; i++) + result.insert({vars[i]}); + + BNFreeVariableList(vars); + return result; +} + + void Function::CreateAutoVariable(const Variable& var, const Confidence>& type, const string& name, bool ignoreDisjointUses) { -- cgit v1.3.1