summaryrefslogtreecommitdiff
path: root/python/mediumlevelil.py
diff options
context:
space:
mode:
authorKyleMiles <krm504@nyu.edu>2021-11-01 23:17:40 -0400
committerKyleMiles <krm504@nyu.edu>2021-11-11 16:16:37 -0500
commit2c75c418ea472fca237df5b8f80e47c9cbe35467 (patch)
tree57b1967f3105246c2b027cb5294cd9813937e543 /python/mediumlevelil.py
parent53640fb603ef58baf02bb43746046f9f62603f30 (diff)
Adds MediumLevelILFunction.aliased_vars, HighLevelILFunction.aliased_vars, and the respective C and C++ functions; Addressed the API side of #2662
Diffstat (limited to 'python/mediumlevelil.py')
-rw-r--r--python/mediumlevelil.py23
1 files changed, 21 insertions, 2 deletions
diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py
index 8f079bfe..0474fcea 100644
--- a/python/mediumlevelil.py
+++ b/python/mediumlevelil.py
@@ -3019,7 +3019,7 @@ class MediumLevelILFunction:
@property
def vars(self) -> List['variable.Variable']:
- """This gets just the MLIL variables - you may be interested in the union of `MediumLevelIlFunction.source_function.param_vars` for all the variables used in the function"""
+ """This gets just the MLIL variables - you may be interested in the union of `MediumLevelIlFunction.aliased_vars` and `MediumLevelIlFunction.source_function.param_vars` for all the variables used in the function"""
if self.source_function is None:
return []
@@ -3037,8 +3037,27 @@ class MediumLevelILFunction:
return []
@property
+ def aliased_vars(self) -> List["variable.Variable"]:
+ """This returns a list of Variables that are taken reference to and used elsewhere. You may also wish to consider `MediumLevelIlFunction.vars` and `MediumLevelIlFunction.source_function.param_vars`"""
+ if self.source_function is None:
+ return []
+
+ if self.il_form in [FunctionGraphType.MediumLevelILFunctionGraph, FunctionGraphType.MediumLevelILSSAFormFunctionGraph]:
+ count = ctypes.c_ulonglong()
+ core_variables = core.BNGetMediumLevelILAliasedVariables(self.handle, count)
+ assert core_variables is not None, "core.BNGetMediumLevelILAliasedVariables returned None"
+ try:
+ result = []
+ for var_i in range(count.value):
+ result.append(variable.Variable(self, core_variables[var_i].type, core_variables[var_i].index, core_variables[var_i].storage))
+ return result
+ finally:
+ core.BNFreeVariableList(core_variables)
+ return []
+
+ @property
def ssa_vars(self) -> List[SSAVariable]:
- """This gets just the MLIL SSA variables - you may be interested in the union of `MediumLevelIlFunction.source_function.param_vars` for all the variables used in the function"""
+ """This gets just the MLIL SSA variables - you may be interested in the union of `MediumLevelIlFunction.aliased_vars` and `MediumLevelIlFunction.source_function.param_vars` for all the variables used in the function"""
if self.source_function is None:
return []