summaryrefslogtreecommitdiff
path: root/binaryninjaapi.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-05-03 21:02:07 -0400
committerRusty Wagner <rusty@vector35.com>2016-05-03 21:02:07 -0400
commitecaf78b419d323f6b589aac4b9ff5ff24b314bc6 (patch)
tree2f090b2889a0d341ac8c67a3e07b68cc5c340022 /binaryninjaapi.h
parentc382a4610cc0ea7f8b8134b847d29bca7dc25398 (diff)
Add APIs for flag information and data flow
Diffstat (limited to 'binaryninjaapi.h')
-rw-r--r--binaryninjaapi.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 4ba49cdd..977727e8 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -29,6 +29,7 @@
#include <map>
#include <exception>
#include <functional>
+#include <set>
#include "binaryninjacore.h"
#include "json/json.h"
@@ -1004,6 +1005,13 @@ namespace BinaryNinja
static uint32_t* GetAllRegistersCallback(void* ctxt, size_t* count);
static uint32_t* GetAllFlagsCallback(void* ctxt, size_t* count);
static uint32_t* GetAllFlagWriteTypesCallback(void* ctxt, size_t* count);
+ static BNFlagRole GetFlagRoleCallback(void* ctxt, uint32_t flag);
+ static uint32_t* GetFlagsRequiredForFlagConditionCallback(void* ctxt, BNLowLevelILFlagCondition cond, size_t* count);
+ static uint32_t* GetFlagsWrittenByFlagWriteTypeCallback(void* ctxt, uint32_t writeType, size_t* count);
+ static bool GetFlagWriteLowLevelILCallback(void* ctxt, BNLowLevelILOperation op, size_t size, uint32_t flagWriteType,
+ BNRegisterOrConstant* operands, size_t operandCount, BNLowLevelILFunction* il);
+ static size_t GetFlagConditionLowLevelILCallback(void* ctxt, BNLowLevelILFlagCondition cond,
+ BNLowLevelILFunction* il);
static void FreeRegisterListCallback(void* ctxt, uint32_t* regs);
static void GetRegisterInfoCallback(void* ctxt, uint32_t reg, BNRegisterInfo* result);
static uint32_t GetStackPointerRegisterCallback(void* ctxt);
@@ -1047,6 +1055,12 @@ namespace BinaryNinja
virtual std::vector<uint32_t> GetAllRegisters();
virtual std::vector<uint32_t> GetAllFlags();
virtual std::vector<uint32_t> GetAllFlagWriteTypes();
+ virtual BNFlagRole GetFlagRole(uint32_t flag);
+ virtual std::vector<uint32_t> GetFlagsRequiredForFlagCondition(BNLowLevelILFlagCondition cond);
+ virtual std::vector<uint32_t> GetFlagsWrittenByFlagWriteType(uint32_t writeType);
+ virtual bool GetFlagWriteLowLevelIL(BNLowLevelILOperation op, size_t size, uint32_t flagWriteType,
+ BNRegisterOrConstant* operands, size_t operandCount, LowLevelILFunction& il);
+ virtual ExprId GetFlagConditionLowLevelIL(BNLowLevelILFlagCondition cond, LowLevelILFunction& il);
virtual BNRegisterInfo GetRegisterInfo(uint32_t reg);
virtual uint32_t GetStackPointerRegister();
virtual uint32_t GetLinkRegister();
@@ -1115,6 +1129,12 @@ namespace BinaryNinja
virtual std::vector<uint32_t> GetAllRegisters() override;
virtual std::vector<uint32_t> GetAllFlags() override;
virtual std::vector<uint32_t> GetAllFlagWriteTypes() override;
+ virtual BNFlagRole GetFlagRole(uint32_t flag) override;
+ virtual std::vector<uint32_t> GetFlagsRequiredForFlagCondition(BNLowLevelILFlagCondition cond) override;
+ virtual std::vector<uint32_t> GetFlagsWrittenByFlagWriteType(uint32_t writeType) override;
+ virtual bool GetFlagWriteLowLevelIL(BNLowLevelILOperation op, size_t size, uint32_t flagWriteType,
+ BNRegisterOrConstant* operands, size_t operandCount, LowLevelILFunction& il) override;
+ virtual ExprId GetFlagConditionLowLevelIL(BNLowLevelILFlagCondition cond, LowLevelILFunction& il) override;
virtual BNRegisterInfo GetRegisterInfo(uint32_t reg) override;
virtual uint32_t GetStackPointerRegister() override;
virtual uint32_t GetLinkRegister() override;
@@ -1324,6 +1344,11 @@ namespace BinaryNinja
std::vector<uint32_t> GetRegistersWrittenByInstruction(Architecture* arch, uint64_t addr);
std::vector<StackVariableReference> GetStackVariablesReferencedByInstruction(Architecture* arch, uint64_t addr);
+ std::set<size_t> GetLowLevelILFlagUsesForDefinition(size_t i, uint32_t flag);
+ std::set<size_t> GetLowLevelILFlagDefinitionsForUse(size_t i, uint32_t flag);
+ std::set<uint32_t> GetFlagsReadByLowLevelILInstruction(size_t i);
+ std::set<uint32_t> GetFlagsWrittenByLowLevelILInstruction(size_t i);
+
Ref<Type> GetType() const;
void ApplyImportedTypes(Symbol* sym);
void ApplyAutoDiscoveredType(Type* type);