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 --- binaryninjaapi.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'binaryninjaapi.h') diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 4ba49cdd..977727e8 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -29,6 +29,7 @@ #include #include #include +#include #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 GetAllRegisters(); virtual std::vector GetAllFlags(); virtual std::vector GetAllFlagWriteTypes(); + virtual BNFlagRole GetFlagRole(uint32_t flag); + virtual std::vector GetFlagsRequiredForFlagCondition(BNLowLevelILFlagCondition cond); + virtual std::vector 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 GetAllRegisters() override; virtual std::vector GetAllFlags() override; virtual std::vector GetAllFlagWriteTypes() override; + virtual BNFlagRole GetFlagRole(uint32_t flag) override; + virtual std::vector GetFlagsRequiredForFlagCondition(BNLowLevelILFlagCondition cond) override; + virtual std::vector 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 GetRegistersWrittenByInstruction(Architecture* arch, uint64_t addr); std::vector GetStackVariablesReferencedByInstruction(Architecture* arch, uint64_t addr); + std::set GetLowLevelILFlagUsesForDefinition(size_t i, uint32_t flag); + std::set GetLowLevelILFlagDefinitionsForUse(size_t i, uint32_t flag); + std::set GetFlagsReadByLowLevelILInstruction(size_t i); + std::set GetFlagsWrittenByLowLevelILInstruction(size_t i); + Ref GetType() const; void ApplyImportedTypes(Symbol* sym); void ApplyAutoDiscoveredType(Type* type); -- cgit v1.3.1