From ecaf78b419d323f6b589aac4b9ff5ff24b314bc6 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 3 May 2016 21:02:07 -0400 Subject: Add APIs for flag information and data flow --- function.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'function.cpp') diff --git a/function.cpp b/function.cpp index 8631eb0b..0fb163e0 100644 --- a/function.cpp +++ b/function.cpp @@ -229,6 +229,54 @@ vector Function::GetStackVariablesReferencedByInstructio } +set Function::GetLowLevelILFlagUsesForDefinition(size_t i, uint32_t flag) +{ + size_t count; + size_t* instrs = BNGetLowLevelILFlagUsesForDefinition(m_object, i, flag, &count); + + set result; + result.insert(&instrs[0], &instrs[count]); + BNFreeLowLevelILInstructionList(instrs); + return result; +} + + +set Function::GetLowLevelILFlagDefinitionsForUse(size_t i, uint32_t flag) +{ + size_t count; + size_t* instrs = BNGetLowLevelILFlagDefinitionsForUse(m_object, i, flag, &count); + + set result; + result.insert(&instrs[0], &instrs[count]); + BNFreeLowLevelILInstructionList(instrs); + return result; +} + + +set Function::GetFlagsReadByLowLevelILInstruction(size_t i) +{ + size_t count; + uint32_t* flags = BNGetFlagsReadByLowLevelILInstruction(m_object, i, &count); + + set result; + result.insert(&flags[0], &flags[count]); + BNFreeRegisterList(flags); + return result; +} + + +set Function::GetFlagsWrittenByLowLevelILInstruction(size_t i) +{ + size_t count; + uint32_t* flags = BNGetFlagsWrittenByLowLevelILInstruction(m_object, i, &count); + + set result; + result.insert(&flags[0], &flags[count]); + BNFreeRegisterList(flags); + return result; +} + + Ref Function::GetType() const { return new Type(BNGetFunctionType(m_object)); -- cgit v1.3.1