summaryrefslogtreecommitdiff
path: root/binaryninjaapi.h
diff options
context:
space:
mode:
authorJordan Wiens <jordan@psifertex.com>2016-07-24 19:12:18 -0400
committerJordan Wiens <jordan@psifertex.com>2016-07-24 19:12:18 -0400
commit4b722a7961e372bd5638a0e538272395d60a1797 (patch)
tree8adfb97a94aa01e815cb29f8e1cd7d1e26c7f3b3 /binaryninjaapi.h
parent58f251e982f7c1b59c6934a72683a75c234b3b35 (diff)
parent11cf9f176f45f03df16bf69c5ca33789ba0ded22 (diff)
Merge branch 'dev' of github.com:Vector35/binaryninja-api into dev
Diffstat (limited to 'binaryninjaapi.h')
-rw-r--r--binaryninjaapi.h109
1 files changed, 89 insertions, 20 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 740247e4..1bdaab13 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -523,6 +523,7 @@ namespace BinaryNinja
class BinaryView;
class Function;
+ struct DataVariable;
class BinaryDataNotification
{
@@ -535,6 +536,9 @@ namespace BinaryNinja
static void FunctionAddedCallback(void* ctxt, BNBinaryView* data, BNFunction* func);
static void FunctionRemovedCallback(void* ctxt, BNBinaryView* data, BNFunction* func);
static void FunctionUpdatedCallback(void* ctxt, BNBinaryView* data, BNFunction* func);
+ static void DataVariableAddedCallback(void* ctxt, BNBinaryView* data, BNDataVariable* var);
+ static void DataVariableRemovedCallback(void* ctxt, BNBinaryView* data, BNDataVariable* var);
+ static void DataVariableUpdatedCallback(void* ctxt, BNBinaryView* data, BNDataVariable* var);
static void StringFoundCallback(void* ctxt, BNBinaryView* data, BNStringType type, uint64_t offset, size_t len);
static void StringRemovedCallback(void* ctxt, BNBinaryView* data, BNStringType type, uint64_t offset, size_t len);
@@ -550,6 +554,9 @@ namespace BinaryNinja
virtual void OnAnalysisFunctionAdded(BinaryView* view, Function* func) { (void)view; (void)func; }
virtual void OnAnalysisFunctionRemoved(BinaryView* view, Function* func) { (void)view; (void)func; }
virtual void OnAnalysisFunctionUpdated(BinaryView* view, Function* func) { (void)view; (void)func; }
+ virtual void OnDataVariableAdded(BinaryView* view, const DataVariable& var) { (void)view; (void)var; }
+ virtual void OnDataVariableRemoved(BinaryView* view, const DataVariable& var) { (void)view; (void)var; }
+ virtual void OnDataVariableUpdated(BinaryView* view, const DataVariable& var) { (void)view; (void)var; }
virtual void OnStringFound(BinaryView* data, BNStringType type, uint64_t offset, size_t len) { (void)data; (void)type; (void)offset; (void)len; }
virtual void OnStringRemoved(BinaryView* data, BNStringType type, uint64_t offset, size_t len) { (void)data; (void)type; (void)offset; (void)len; }
};
@@ -616,6 +623,41 @@ namespace BinaryNinja
Ref<Architecture> arch;
uint64_t addr;
};
+
+ struct InstructionTextToken
+ {
+ BNInstructionTextTokenType type;
+ std::string text;
+ uint64_t value;
+
+ InstructionTextToken();
+ InstructionTextToken(BNInstructionTextTokenType type, const std::string& text, uint64_t value = 0);
+ };
+
+ struct DisassemblyTextLine
+ {
+ uint64_t addr;
+ std::vector<InstructionTextToken> tokens;
+ };
+
+ struct LinearDisassemblyPosition
+ {
+ Ref<Function> function;
+ Ref<BasicBlock> block;
+ uint64_t address;
+ };
+
+ struct LinearDisassemblyLine
+ {
+ BNLinearDisassemblyLineType type;
+ Ref<Function> function;
+ Ref<BasicBlock> block;
+ size_t lineOffset;
+ DisassemblyTextLine contents;
+ };
+
+ class DisassemblySettings;
+
class AnalysisCompletionEvent: public CoreRefCountObject<BNAnalysisCompletionEvent,
BNNewAnalysisCompletionEventReference, BNFreeAnalysisCompletionEvent>
{
@@ -630,6 +672,15 @@ namespace BinaryNinja
void Cancel();
};
+ struct DataVariable
+ {
+ uint64_t address;
+ Ref<Type> type;
+ bool autoDiscovered;
+ };
+
+ struct NameAndType;
+
/*! BinaryView is the base class for creating views on binary data (e.g. ELF, PE, Mach-O).
BinaryView should be subclassed to create a new BinaryView
*/
@@ -768,6 +819,14 @@ namespace BinaryNinja
void UpdateAnalysis();
void AbortAnalysis();
+ void DefineDataVariable(uint64_t addr, Type* type);
+ void DefineUserDataVariable(uint64_t addr, Type* type);
+ void UndefineDataVariable(uint64_t addr);
+ void UndefineUserDataVariable(uint64_t addr);
+
+ std::map<uint64_t, DataVariable> GetDataVariables();
+ bool GetDataVariableAtAddress(uint64_t addr, DataVariable& var);
+
std::vector<Ref<Function>> GetAnalysisFunctionList();
bool HasFunctions() const;
Ref<Function> GetAnalysisFunction(Platform* platform, uint64_t addr);
@@ -797,7 +856,6 @@ namespace BinaryNinja
void DefineImportedFunction(Symbol* importAddressSym, Function* func);
-
bool IsNeverBranchPatchAvailable(Architecture* arch, uint64_t addr);
bool IsAlwaysBranchPatchAvailable(Architecture* arch, uint64_t addr);
bool IsInvertBranchPatchAvailable(Architecture* arch, uint64_t addr);
@@ -815,6 +873,24 @@ namespace BinaryNinja
Ref<AnalysisCompletionEvent> AddAnalysisCompletionEvent(const std::function<void()>& callback);
BNAnalysisProgress GetAnalysisProgress();
+
+ uint64_t GetNextFunctionStartAfterAddress(uint64_t addr);
+ uint64_t GetNextBasicBlockStartAfterAddress(uint64_t addr);
+ uint64_t GetNextDataAfterAddress(uint64_t addr);
+ uint64_t GetNextDataVariableAfterAddress(uint64_t addr);
+ uint64_t GetPreviousFunctionStartBeforeAddress(uint64_t addr);
+ uint64_t GetPreviousBasicBlockStartBeforeAddress(uint64_t addr);
+ uint64_t GetPreviousBasicBlockEndBeforeAddress(uint64_t addr);
+ uint64_t GetPreviousDataBeforeAddress(uint64_t addr);
+ uint64_t GetPreviousDataVariableBeforeAddress(uint64_t addr);
+
+ LinearDisassemblyPosition GetLinearDisassemblyPositionForAddress(uint64_t addr, DisassemblySettings* settings);
+ std::vector<LinearDisassemblyLine> GetPreviousLinearDisassemblyLines(LinearDisassemblyPosition& pos,
+ DisassemblySettings* settings);
+ std::vector<LinearDisassemblyLine> GetNextLinearDisassemblyLines(LinearDisassemblyPosition& pos,
+ DisassemblySettings* settings);
+
+ bool ParseTypeString(const std::string& text, NameAndType& result, std::string& errors);
};
class BinaryData: public BinaryView
@@ -848,9 +924,9 @@ namespace BinaryNinja
static std::vector<Ref<BinaryViewType>> GetViewTypes();
static std::vector<Ref<BinaryViewType>> GetViewTypesForData(BinaryView* data);
- static void RegisterArchitecture(const std::string& name, uint32_t id, Architecture* arch);
- void RegisterArchitecture(uint32_t id, Architecture* arch);
- Ref<Architecture> GetArchitecture(uint32_t id);
+ static void RegisterArchitecture(const std::string& name, uint32_t id, BNEndianness endian, Architecture* arch);
+ void RegisterArchitecture(uint32_t id, BNEndianness endian, Architecture* arch);
+ Ref<Architecture> GetArchitecture(uint32_t id, BNEndianness endian);
static void RegisterPlatform(const std::string& name, uint32_t id, Architecture* arch, Platform* platform);
static void RegisterDefaultPlatform(const std::string& name, Architecture* arch, Platform* platform);
@@ -1039,16 +1115,6 @@ namespace BinaryNinja
void AddBranch(BNBranchType type, uint64_t target = 0, Architecture* arch = nullptr, bool hasDelaySlot = false);
};
- struct InstructionTextToken
- {
- BNInstructionTextTokenType type;
- std::string text;
- uint64_t value;
-
- InstructionTextToken();
- InstructionTextToken(BNInstructionTextTokenType type, const std::string& text, uint64_t value = 0);
- };
-
class LowLevelILFunction;
class FunctionRecognizer;
class CallingConvention;
@@ -1070,6 +1136,8 @@ namespace BinaryNinja
static BNEndianness GetEndiannessCallback(void* ctxt);
static size_t GetAddressSizeCallback(void* ctxt);
static size_t GetDefaultIntegerSizeCallback(void* ctxt);
+ static size_t GetMaxInstructionLengthCallback(void* ctxt);
+ static size_t GetOpcodeDisplayLengthCallback(void* ctxt);
static bool GetInstructionInfoCallback(void* ctxt, const uint8_t* data, uint64_t addr,
size_t maxLen, BNInstructionInfo* result);
static bool GetInstructionTextCallback(void* ctxt, const uint8_t* data, uint64_t addr,
@@ -1121,6 +1189,9 @@ namespace BinaryNinja
virtual size_t GetAddressSize() const = 0;
virtual size_t GetDefaultIntegerSize() const;
+ virtual size_t GetMaxInstructionLength() const;
+ virtual size_t GetOpcodeDisplayLength() const;
+
virtual bool GetInstructionInfo(const uint8_t* data, uint64_t addr, size_t maxLen, InstructionInfo& result) = 0;
virtual bool GetInstructionText(const uint8_t* data, uint64_t addr, size_t& len,
std::vector<InstructionTextToken>& result) = 0;
@@ -1262,6 +1333,8 @@ namespace BinaryNinja
virtual BNEndianness GetEndianness() const override;
virtual size_t GetAddressSize() const override;
virtual size_t GetDefaultIntegerSize() const override;
+ virtual size_t GetMaxInstructionLength() const override;
+ virtual size_t GetOpcodeDisplayLength() const override;
virtual bool GetInstructionInfo(const uint8_t* data, uint64_t addr, size_t maxLen, InstructionInfo& result) override;
virtual bool GetInstructionText(const uint8_t* data, uint64_t addr, size_t& len,
std::vector<InstructionTextToken>& result) override;
@@ -1415,12 +1488,6 @@ namespace BinaryNinja
void SetMaximumSymbolWidth(size_t width);
};
- struct DisassemblyTextLine
- {
- uint64_t addr;
- std::vector<InstructionTextToken> tokens;
- };
-
class Function;
struct BasicBlockEdge
@@ -1549,6 +1616,8 @@ namespace BinaryNinja
std::set<uint32_t> GetFlagsWrittenByLiftedILInstruction(size_t i);
Ref<Type> GetType() const;
+ void SetAutoType(Type* type);
+ void SetUserType(Type* type);
void ApplyImportedTypes(Symbol* sym);
void ApplyAutoDiscoveredType(Type* type);