summaryrefslogtreecommitdiff
path: root/function.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'function.cpp')
-rw-r--r--function.cpp42
1 files changed, 34 insertions, 8 deletions
diff --git a/function.cpp b/function.cpp
index 0fb163e0..209537b7 100644
--- a/function.cpp
+++ b/function.cpp
@@ -229,10 +229,36 @@ vector<StackVariableReference> Function::GetStackVariablesReferencedByInstructio
}
-set<size_t> Function::GetLowLevelILFlagUsesForDefinition(size_t i, uint32_t flag)
+Ref<LowLevelILFunction> Function::GetLiftedIL() const
+{
+ return new LowLevelILFunction(BNGetFunctionLiftedIL(m_object));
+}
+
+
+vector<Ref<BasicBlock>> Function::GetLiftedILBasicBlocks() const
+{
+ size_t count;
+ BNBasicBlock** blocks = BNGetFunctionLiftedILBasicBlockList(m_object, &count);
+
+ vector<Ref<BasicBlock>> result;
+ for (size_t i = 0; i < count; i++)
+ result.push_back(new BasicBlock(BNNewBasicBlockReference(blocks[i])));
+
+ BNFreeBasicBlockList(blocks, count);
+ return result;
+}
+
+
+size_t Function::GetLiftedILForInstruction(Architecture* arch, uint64_t addr)
+{
+ return BNGetLiftedILForInstruction(m_object, arch->GetObject(), addr);
+}
+
+
+set<size_t> Function::GetLiftedILFlagUsesForDefinition(size_t i, uint32_t flag)
{
size_t count;
- size_t* instrs = BNGetLowLevelILFlagUsesForDefinition(m_object, i, flag, &count);
+ size_t* instrs = BNGetLiftedILFlagUsesForDefinition(m_object, i, flag, &count);
set<size_t> result;
result.insert(&instrs[0], &instrs[count]);
@@ -241,10 +267,10 @@ set<size_t> Function::GetLowLevelILFlagUsesForDefinition(size_t i, uint32_t flag
}
-set<size_t> Function::GetLowLevelILFlagDefinitionsForUse(size_t i, uint32_t flag)
+set<size_t> Function::GetLiftedILFlagDefinitionsForUse(size_t i, uint32_t flag)
{
size_t count;
- size_t* instrs = BNGetLowLevelILFlagDefinitionsForUse(m_object, i, flag, &count);
+ size_t* instrs = BNGetLiftedILFlagDefinitionsForUse(m_object, i, flag, &count);
set<size_t> result;
result.insert(&instrs[0], &instrs[count]);
@@ -253,10 +279,10 @@ set<size_t> Function::GetLowLevelILFlagDefinitionsForUse(size_t i, uint32_t flag
}
-set<uint32_t> Function::GetFlagsReadByLowLevelILInstruction(size_t i)
+set<uint32_t> Function::GetFlagsReadByLiftedILInstruction(size_t i)
{
size_t count;
- uint32_t* flags = BNGetFlagsReadByLowLevelILInstruction(m_object, i, &count);
+ uint32_t* flags = BNGetFlagsReadByLiftedILInstruction(m_object, i, &count);
set<uint32_t> result;
result.insert(&flags[0], &flags[count]);
@@ -265,10 +291,10 @@ set<uint32_t> Function::GetFlagsReadByLowLevelILInstruction(size_t i)
}
-set<uint32_t> Function::GetFlagsWrittenByLowLevelILInstruction(size_t i)
+set<uint32_t> Function::GetFlagsWrittenByLiftedILInstruction(size_t i)
{
size_t count;
- uint32_t* flags = BNGetFlagsWrittenByLowLevelILInstruction(m_object, i, &count);
+ uint32_t* flags = BNGetFlagsWrittenByLiftedILInstruction(m_object, i, &count);
set<uint32_t> result;
result.insert(&flags[0], &flags[count]);