diff options
| author | Rusty Wagner <rusty@vector35.com> | 2015-07-29 23:35:48 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2015-07-29 23:35:48 -0400 |
| commit | 40192fa7adbf7b53e9d45343b0ae1b47cc5fef86 (patch) | |
| tree | 13d7072fc95b3a594020fe81d1420c97354fe308 /function.cpp | |
| parent | a1000948164a38f12a3348490ac13446ace196b7 (diff) | |
Show basic register data flow information on hover
Diffstat (limited to 'function.cpp')
| -rw-r--r-- | function.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/function.cpp b/function.cpp index 89b2dfbb..4e813916 100644 --- a/function.cpp +++ b/function.cpp @@ -99,6 +99,75 @@ vector<Ref<BasicBlock>> Function::GetLowLevelILBasicBlocks() const } +size_t Function::GetLowLevelILForInstruction(Architecture* arch, uint64_t addr) +{ + return BNGetLowLevelILForInstruction(m_func, arch->GetArchitectureObject(), addr); +} + + +vector<size_t> Function::GetLowLevelILExitsForInstruction(Architecture* arch, uint64_t addr) +{ + size_t count; + size_t* exits = BNGetLowLevelILExitsForInstruction(m_func, arch->GetArchitectureObject(), addr, &count); + + vector<size_t> 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<uint32_t> Function::GetRegistersReadByInstruction(Architecture* arch, uint64_t addr) +{ + size_t count; + uint32_t* regs = BNGetRegistersReadByInstruction(m_func, arch->GetArchitectureObject(), addr, &count); + + vector<uint32_t> result; + result.insert(result.end(), regs, ®s[count]); + + BNFreeRegisterList(regs); + return result; +} + + +vector<uint32_t> Function::GetRegistersWrittenByInstruction(Architecture* arch, uint64_t addr) +{ + size_t count; + uint32_t* regs = BNGetRegistersWrittenByInstruction(m_func, arch->GetArchitectureObject(), addr, &count); + + vector<uint32_t> result; + result.insert(result.end(), regs, ®s[count]); + + BNFreeRegisterList(regs); + return result; +} + + Ref<Type> Function::GetType() const { return new Type(BNGetFunctionType(m_func)); |
