Skip to content

Commit

Permalink
Add API to get all SSA versions of a variable for MLIL and HLIL
Browse files Browse the repository at this point in the history
  • Loading branch information
emesare authored and xusheng6 committed Aug 10, 2023
1 parent 9772037 commit b6ce48c
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
2 changes: 2 additions & 0 deletions binaryninjaapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -11850,6 +11850,7 @@ namespace BinaryNinja {
std::set<size_t> GetSSAMemoryUses(size_t version) const;
bool IsSSAVarLive(const SSAVariable& var) const;

std::set<size_t> GetVariableSSAVersions(const Variable& var) const;
std::set<size_t> GetVariableDefinitions(const Variable& var) const;
std::set<size_t> GetVariableUses(const Variable& var) const;

Expand Down Expand Up @@ -12162,6 +12163,7 @@ namespace BinaryNinja {
bool IsSSAVarLiveAt(const SSAVariable& var, const size_t instr) const;
bool IsVarLiveAt(const Variable& var, const size_t instr) const;

std::set<size_t> GetVariableSSAVersions(const Variable& var) const;
std::set<size_t> GetVariableDefinitions(const Variable& var) const;
std::set<size_t> GetVariableUses(const Variable& var) const;
size_t GetSSAVarVersionAtInstruction(const Variable& var, size_t instr) const;
Expand Down
14 changes: 14 additions & 0 deletions highlevelil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,20 @@ bool HighLevelILFunction::IsVarLiveAt(const Variable& var, const size_t instr) c
}


set<size_t> HighLevelILFunction::GetVariableSSAVersions(const Variable& var) const
{
size_t count;
size_t* versions = BNGetHighLevelILVariableSSAVersions(m_object, &var, &count);

set<size_t> result;
for (size_t i = 0; i < count; i++)
result.insert(versions[i]);

BNFreeILInstructionList(versions);
return result;
}


set<size_t> HighLevelILFunction::GetVariableDefinitions(const Variable& var) const
{
size_t count;
Expand Down
14 changes: 14 additions & 0 deletions mediumlevelil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,20 @@ bool MediumLevelILFunction::IsSSAVarLive(const SSAVariable& var) const
}


set<size_t> MediumLevelILFunction::GetVariableSSAVersions(const Variable& var) const
{
size_t count;
size_t* versions = BNGetMediumLevelILVariableSSAVersions(m_object, &var, &count);

set<size_t> result;
for (size_t i = 0; i < count; i++)
result.insert(versions[i]);

BNFreeILInstructionList(versions);
return result;
}


set<size_t> MediumLevelILFunction::GetVariableDefinitions(const Variable& var) const
{
size_t count;
Expand Down

0 comments on commit b6ce48c

Please sign in to comment.