From 40192fa7adbf7b53e9d45343b0ae1b47cc5fef86 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Wed, 29 Jul 2015 23:35:48 -0400 Subject: Show basic register data flow information on hover --- function.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) (limited to 'function.cpp') diff --git a/function.cpp b/function.cpp index 89b2dfbb..4e813916 100644 --- a/function.cpp +++ b/function.cpp @@ -99,6 +99,75 @@ vector> Function::GetLowLevelILBasicBlocks() const } +size_t Function::GetLowLevelILForInstruction(Architecture* arch, uint64_t addr) +{ + return BNGetLowLevelILForInstruction(m_func, arch->GetArchitectureObject(), addr); +} + + +vector Function::GetLowLevelILExitsForInstruction(Architecture* arch, uint64_t addr) +{ + size_t count; + size_t* exits = BNGetLowLevelILExitsForInstruction(m_func, arch->GetArchitectureObject(), addr, &count); + + vector result; + result.insert(result.end(), exits, &exits[count]); + + BNFreeLowLevelILInstructionList(exits); + return result; +} + + +BNRegisterValue Function::GetRegisterValueAtInstruction(Architecture* arch, uint64_t addr, uint32_t reg) +{ + return BNGetRegisterValueAtInstruction(m_func, arch->GetArchitectureObject(), addr, reg); +} + + +BNRegisterValue Function::GetRegisterValueAfterInstruction(Architecture* arch, uint64_t addr, uint32_t reg) +{ + return BNGetRegisterValueAfterInstruction(m_func, arch->GetArchitectureObject(), addr, reg); +} + + +BNRegisterValue Function::GetRegisterValueAtLowLevelILInstruction(size_t i, uint32_t reg) +{ + return BNGetRegisterValueAtLowLevelILInstruction(m_func, i, reg); +} + + +BNRegisterValue Function::GetRegisterValueAfterLowLevelILInstruction(size_t i, uint32_t reg) +{ + return BNGetRegisterValueAfterLowLevelILInstruction(m_func, i, reg); +} + + +vector Function::GetRegistersReadByInstruction(Architecture* arch, uint64_t addr) +{ + size_t count; + uint32_t* regs = BNGetRegistersReadByInstruction(m_func, arch->GetArchitectureObject(), addr, &count); + + vector result; + result.insert(result.end(), regs, ®s[count]); + + BNFreeRegisterList(regs); + return result; +} + + +vector Function::GetRegistersWrittenByInstruction(Architecture* arch, uint64_t addr) +{ + size_t count; + uint32_t* regs = BNGetRegistersWrittenByInstruction(m_func, arch->GetArchitectureObject(), addr, &count); + + vector result; + result.insert(result.end(), regs, ®s[count]); + + BNFreeRegisterList(regs); + return result; +} + + Ref Function::GetType() const { return new Type(BNGetFunctionType(m_func)); -- cgit v1.3.1