summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Palmisciano <jp@jonpalmisc.com>2021-07-27 07:59:29 -0400
committerJon Palmisciano <jp@jonpalmisc.com>2021-07-30 13:36:31 -0400
commitea8f992f355a9152e0a77fa861d01f39081d9670 (patch)
treeef585d76ea768ee55cbbdb496b0a4317df0c7d44
parent4c1e6c0348fd0d275c077b93db06fa7d82c1941f (diff)
Function: Add C++ bindings for `Get{Medium,High}LevelILVariables()`
-rw-r--r--binaryninjaapi.h3
-rw-r--r--function.cpp36
2 files changed, 39 insertions, 0 deletions
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<Variable, VariableNameAndType> GetVariables();
+ std::set<Variable> GetMediumLevelILVariables();
+ std::set<Variable> GetHighLevelILVariables();
+
void CreateAutoVariable(const Variable& var, const Confidence<Ref<Type>>& type, const std::string& name,
bool ignoreDisjointUses = false);
void CreateUserVariable(const Variable& var, const Confidence<Ref<Type>>& 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<Variable, VariableNameAndType> Function::GetVariables()
}
+set<Variable> Function::GetMediumLevelILVariables()
+{
+ auto mlil = this->GetMediumLevelIL();
+ if (!mlil)
+ return {};
+
+ size_t count;
+ BNVariable* vars = BNGetMediumLevelILVariables(mlil->GetObject(), &count);
+
+ set<Variable> result;
+ for (size_t i = 0; i < count; i++)
+ result.insert({vars[i]});
+
+ BNFreeVariableList(vars);
+ return result;
+}
+
+
+set<Variable> Function::GetHighLevelILVariables()
+{
+ auto hlil = this->GetHighLevelIL();
+ if (!hlil)
+ return {};
+
+ size_t count;
+ BNVariable* vars = BNGetHighLevelILVariables(hlil->GetObject(), &count);
+
+ set<Variable> 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<Ref<Type>>& type,
const string& name, bool ignoreDisjointUses)
{