diff options
| author | Brian Potchik <brian@vector35.com> | 2025-09-30 15:09:48 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2025-09-30 15:09:48 -0400 |
| commit | 796932b62e7d007a46d8ad31cdb618e8125073ab (patch) | |
| tree | 35937ae27a646cc6a1d7e79cafd4b46b0991a0b1 /binaryninjaapi.h | |
| parent | 36a06931b3eac492eb1e609949e2cc5a3a03bf57 (diff) | |
Initial support for opening container formats.
Diffstat (limited to 'binaryninjaapi.h')
| -rw-r--r-- | binaryninjaapi.h | 80 |
1 files changed, 76 insertions, 4 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index fd926ebd..9da9f677 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -3816,6 +3816,18 @@ namespace BinaryNinja { */ void SetFilename(const std::string& name); + /*! Get the path to the container file if the current file is inside a container (e.g. ZIP, TAR, etc.) + + \return The path to the container file if the current file is inside a container, otherwise an empty string + */ + std::string GetVirtualPath() const; + + /*! Set the path to the container file if the current file is inside a container (e.g. ZIP, TAR, etc.) + + \param path The path to the container file if the current file is inside a container + */ + void SetVirtualPath(const std::string& path); + /*! Whether the file has unsaved modifications \return Whether the file has unsaved modifications @@ -8947,6 +8959,7 @@ namespace BinaryNinja { { protected: BNTransformType m_typeForRegister; + BNTransformCapabilities m_capabilitiesForRegister; std::string m_nameForRegister, m_longNameForRegister, m_groupForRegister; Transform(BNTransform* xform); @@ -8957,6 +8970,7 @@ namespace BinaryNinja { void* ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount); static bool EncodeCallback( void* ctxt, BNDataBuffer* input, BNDataBuffer* output, BNTransformParameter* params, size_t paramCount); + static bool CanDecodeCallback(void* ctxt, BNBinaryView* input); static std::vector<TransformParameter> EncryptionKeyParameters(size_t fixedKeyLength = 0); static std::vector<TransformParameter> EncryptionKeyAndIVParameters( @@ -8964,22 +8978,24 @@ namespace BinaryNinja { public: Transform(BNTransformType type, const std::string& name, const std::string& longName, const std::string& group); + Transform(BNTransformType type, BNTransformCapabilities capabilities, const std::string& name, const std::string& longName, const std::string& group); static void Register(Transform* xform); static Ref<Transform> GetByName(const std::string& name); static std::vector<Ref<Transform>> GetTransformTypes(); BNTransformType GetType() const; + BNTransformCapabilities GetCapabilities() const; + bool SupportsDetection() const; std::string GetName() const; std::string GetLongName() const; std::string GetGroup() const; virtual std::vector<TransformParameter> GetParameters() const; - virtual bool Decode(const DataBuffer& input, DataBuffer& output, - const std::map<std::string, DataBuffer>& params = std::map<std::string, DataBuffer>()); - virtual bool Encode(const DataBuffer& input, DataBuffer& output, - const std::map<std::string, DataBuffer>& params = std::map<std::string, DataBuffer>()); + virtual bool Decode(const DataBuffer& input, DataBuffer& output, const std::map<std::string, DataBuffer>& params = std::map<std::string, DataBuffer>()); + virtual bool Encode(const DataBuffer& input, DataBuffer& output, const std::map<std::string, DataBuffer>& params = std::map<std::string, DataBuffer>()); + virtual bool CanDecode(Ref<BinaryView> input) const; }; /*! @@ -8995,8 +9011,64 @@ namespace BinaryNinja { const std::map<std::string, DataBuffer>& params = std::map<std::string, DataBuffer>()) override; virtual bool Encode(const DataBuffer& input, DataBuffer& output, const std::map<std::string, DataBuffer>& params = std::map<std::string, DataBuffer>()) override; + virtual bool CanDecode(Ref<BinaryView> input) const override; }; + class TransformContext : public CoreRefCountObject<BNTransformContext, BNNewTransformContextReference, BNFreeTransformContext> + { + public: + TransformContext(BNTransformContext* context); + virtual ~TransformContext(); + + std::string GetTransformName() const; + std::string GetFileName() const; + Ref<BinaryView> GetInput() const; + Ref<Metadata> GetMetadata() const; + Ref<TransformContext> GetParent() const; + size_t GetChildCount() const; + std::vector<Ref<TransformContext>> GetChildren() const; + Ref<TransformContext> GetChild(const std::string& filename) const; + Ref<TransformContext> CreateChild(const DataBuffer& data, const std::string& filename); + bool IsLeaf() const; + bool IsRoot() const; + std::vector<std::string> GetAvailableFiles() const; + void SetAvailableFiles(const std::vector<std::string>& files); + bool HasAvailableFiles() const; + std::vector<std::string> GetRequestedFiles() const; + void SetRequestedFiles(const std::vector<std::string>& files); + bool HasRequestedFiles() const; + bool IsDatabase() const; + }; + + class TransformSession : public CoreRefCountObject<BNTransformSession, BNNewTransformSessionReference, BNFreeTransformSession> + { + public: + TransformSession(const std::string& filename); + TransformSession(const std::string& filename, BNTransformSessionMode mode); + TransformSession(Ref<BinaryView> initialView); + TransformSession(Ref<BinaryView> initialView, BNTransformSessionMode mode); + TransformSession(BNTransformSession* session); + virtual ~TransformSession(); + + Ref<BinaryView> GetCurrentView() const; + Ref<TransformContext> GetRootContext() const; + Ref<TransformContext> GetCurrentContext() const; + bool Process(); + bool HasAnyStages() const; + bool HasSinglePath() const; + + std::vector<Ref<TransformContext>> GetSelectedContexts() const; + void SetSelectedContexts(const std::vector<Ref<TransformContext>>& contexts); + + // UI interaction support + bool RequiresUserInput() const; + bool HasMultipleFileChoices() const; + std::vector<std::string> GetAvailableFileChoices() const; + bool SelectFiles(const std::vector<std::string>& selectedFiles); + bool ProcessWithUserInput(); + }; + + struct InstructionInfo : public BNInstructionInfo { InstructionInfo(); |
