diff options
| -rw-r--r-- | binaryninjaapi.h | 1 | ||||
| -rw-r--r-- | binaryninjacore.h | 2 | ||||
| -rw-r--r-- | mediumlevelil.cpp | 6 | ||||
| -rw-r--r-- | python/mediumlevelil.py | 6 |
4 files changed, 15 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index f601c635..8693baed 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -13037,6 +13037,7 @@ namespace BinaryNinja { std::set<size_t> GetSSAVarUses(const SSAVariable& var) const; std::set<size_t> GetSSAMemoryUses(size_t version) const; bool IsSSAVarLive(const SSAVariable& var) const; + bool IsSSAVarLiveAt(const SSAVariable& var, const size_t instr) const; std::set<size_t> GetVariableSSAVersions(const Variable& var) const; std::set<size_t> GetVariableDefinitions(const Variable& var) const; diff --git a/binaryninjacore.h b/binaryninjacore.h index 3c45ff88..c4bdf715 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -5580,6 +5580,8 @@ extern "C" BNMediumLevelILFunction* func, size_t version, size_t* count); BINARYNINJACOREAPI bool BNIsMediumLevelILSSAVarLive( BNMediumLevelILFunction* func, const BNVariable* var, size_t version); + BINARYNINJACOREAPI bool BNIsMediumLevelILSSAVarLiveAt( + BNMediumLevelILFunction* func, const BNVariable* var, size_t version, const size_t instr); BINARYNINJACOREAPI BNVariable* BNGetMediumLevelILVariables(BNMediumLevelILFunction* func, size_t* count); BINARYNINJACOREAPI BNVariable* BNGetMediumLevelILAliasedVariables(BNMediumLevelILFunction* func, size_t* count); diff --git a/mediumlevelil.cpp b/mediumlevelil.cpp index b8b26efd..29a27a2d 100644 --- a/mediumlevelil.cpp +++ b/mediumlevelil.cpp @@ -504,6 +504,12 @@ bool MediumLevelILFunction::IsSSAVarLive(const SSAVariable& var) const } +bool MediumLevelILFunction::IsSSAVarLiveAt(const SSAVariable& var, const size_t instr) const +{ + return BNIsMediumLevelILSSAVarLiveAt(m_object, &var.var, var.version, instr); +} + + set<size_t> MediumLevelILFunction::GetVariableSSAVersions(const Variable& var) const { size_t count; diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py index 59f212b1..e7909be4 100644 --- a/python/mediumlevelil.py +++ b/python/mediumlevelil.py @@ -3671,6 +3671,12 @@ class MediumLevelILFunction: var_data = ssa_var.var.to_BNVariable() return core.BNIsMediumLevelILSSAVarLive(self.handle, var_data, ssa_var.version) + def is_ssa_var_live_at(self, ssa_var: SSAVariable, instr: InstructionIndex) -> bool: + """ + ``is_ssa_var_live_at`` determines if ``ssa_var`` is live at a given point in the function; counts phi's as uses + """ + return core.BNIsMediumLevelILSSAVarLiveAt(self.handle, ssa_var.var.to_BNVariable(), ssa_var.version, instr) + def get_var_definitions(self, var: 'variable.Variable') -> List[MediumLevelILInstruction]: count = ctypes.c_ulonglong() var_data = var.to_BNVariable() |
