diff options
| author | Rusty Wagner <rusty@vector35.com> | 2015-02-16 21:37:24 -0500 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2015-02-16 21:37:24 -0500 |
| commit | 993d98ede9231759d8718cb33779fd1571d0475c (patch) | |
| tree | 185bd4b353157cf56c53b803aff7cef76aaa12ad /binaryninjaapi.h | |
| parent | b22b98c156c76e35e20724a8d1b86883790fbd8e (diff) | |
Add architecture plugin type, x86 plugin, and get ready for threads
Diffstat (limited to 'binaryninjaapi.h')
| -rw-r--r-- | binaryninjaapi.h | 97 |
1 files changed, 66 insertions, 31 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 06c4c8c0..dbbd4b25 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -285,7 +285,6 @@ namespace BinaryNinja Ref<FileMetadata> m_file; BinaryView(FileMetadata* file); - BinaryView(BNBinaryView* view); private: static size_t ReadCallback(void* ctxt, void* dest, uint64_t offset, size_t len); @@ -298,7 +297,20 @@ namespace BinaryNinja static bool IsExecutableCallback(void* ctxt); static bool SaveCallback(void* ctxt, BNFileAccessor* file); + virtual size_t PerformRead(void* dest, uint64_t offset, size_t len) { (void)dest; (void)offset; (void)len; return 0; } + virtual size_t PerformWrite(uint64_t offset, const void* data, size_t len) { (void)offset; (void)data; (void)len; return 0; } + virtual size_t PerformInsert(uint64_t offset, const void* data, size_t len) { (void)offset; (void)data; (void)len; return 0; } + virtual size_t PerformRemove(uint64_t offset, uint64_t len) { (void)offset; (void)len; return 0; } + + virtual BNModificationStatus PerformGetModification(uint64_t offset) { (void)offset; return Original; } + virtual uint64_t PerformGetStart() const { return 0; } + virtual uint64_t PerformGetLength() const { return 0; } + virtual bool PerformIsExecutable() const { return false; } + + virtual bool PerformSave(FileAccessor* file) { (void)file; return false; } + public: + BinaryView(BNBinaryView* view); virtual ~BinaryView(); FileMetadata* GetFile() const { return m_file; } @@ -317,54 +329,34 @@ namespace BinaryNinja uint64_t GetCurrentOffset(); bool Navigate(const std::string& view, uint64_t offset); - virtual size_t Read(void* dest, uint64_t offset, size_t len) = 0; + size_t Read(void* dest, uint64_t offset, size_t len); DataBuffer ReadBuffer(uint64_t offset, size_t len); - virtual size_t Write(uint64_t offset, const void* data, size_t len) { (void)offset; (void)data; (void)len; return 0; } + size_t Write(uint64_t offset, const void* data, size_t len); size_t WriteBuffer(uint64_t offset, const DataBuffer& data); - virtual size_t Insert(uint64_t offset, const void* data, size_t len) { (void)offset; (void)data; (void)len; return 0; } + size_t Insert(uint64_t offset, const void* data, size_t len); size_t InsertBuffer(uint64_t offset, const DataBuffer& data); - virtual size_t Remove(uint64_t offset, uint64_t len) { (void)offset; (void)len; return 0; } + size_t Remove(uint64_t offset, uint64_t len); - virtual BNModificationStatus GetModification(uint64_t offset) { (void)offset; return Original; } + BNModificationStatus GetModification(uint64_t offset); std::vector<BNModificationStatus> GetModification(uint64_t offset, size_t len); - virtual uint64_t GetStart() const { return 0; } + uint64_t GetStart() const; uint64_t GetEnd() const; - virtual uint64_t GetLength() const = 0; + uint64_t GetLength() const; - virtual bool IsExecutable() const { return false; } + bool IsExecutable() const; - virtual bool Save(FileAccessor* file) { (void)file; return false; } + bool Save(FileAccessor* file); bool Save(const std::string& path); void RegisterNotification(BinaryDataNotification* notify); void UnregisterNotification(BinaryDataNotification* notify); }; - class CoreBinaryView: public BinaryView - { - public: - CoreBinaryView(BNBinaryView* view); - - virtual size_t Read(void* dest, uint64_t offset, size_t len) override; - virtual size_t Write(uint64_t offset, const void* data, size_t len) override; - virtual size_t Insert(uint64_t offset, const void* data, size_t len) override; - virtual size_t Remove(uint64_t offset, uint64_t len) override; - - virtual BNModificationStatus GetModification(uint64_t offset) override; - - virtual uint64_t GetStart() const override; - virtual uint64_t GetLength() const override; - - virtual bool IsExecutable() const override; - - virtual bool Save(FileAccessor* file) override; - }; - - class BinaryData: public CoreBinaryView + class BinaryData: public BinaryView { public: BinaryData(FileMetadata* file); @@ -374,6 +366,8 @@ namespace BinaryNinja BinaryData(FileMetadata* file, FileAccessor* accessor); }; + class Architecture; + class BinaryViewType: public RefCountObject { protected: @@ -393,6 +387,10 @@ namespace BinaryNinja static Ref<BinaryViewType> GetByName(const std::string& name); 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); + std::string GetName(); std::string GetLongName(); @@ -568,4 +566,41 @@ namespace BinaryNinja virtual bool Encode(const DataBuffer& input, DataBuffer& output, const std::map<std::string, DataBuffer>& params = std::map<std::string, DataBuffer>()) override; }; + + struct InstructionInfo: public BNInstructionInfo + { + InstructionInfo(); + void AddBranch(BNBranchType type, uint64_t target = 0); + }; + + class Architecture: public RefCountObject + { + protected: + BNArchitecture* m_arch; + std::string m_nameForRegister; + + Architecture(BNArchitecture* arch); + + static bool GetInstructionInfoCallback(void* ctxt, BNBinaryView* data, uint64_t addr, BNInstructionInfo* result); + + public: + Architecture(const std::string& name); + + BNArchitecture* GetArchitectureObject() const { return m_arch; } + + static void Register(Architecture* arch); + static Ref<Architecture> GetByName(const std::string& name); + static std::vector<Ref<Architecture>> GetList(); + + std::string GetName() const; + + virtual bool GetInstructionInfo(BinaryView* data, uint64_t addr, InstructionInfo& result) = 0; + }; + + class CoreArchitecture: public Architecture + { + public: + CoreArchitecture(BNArchitecture* arch); + virtual bool GetInstructionInfo(BinaryView* view, uint64_t addr, InstructionInfo& result) override; + }; } |
