From 2f84b5c600f08101a6a7ee08738a3e3a32686f46 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Fri, 22 Feb 2019 15:36:40 -0500 Subject: Add API for constructing disassembly text --- binaryninjaapi.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'binaryninjaapi.h') diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 5f02b41b..33b0c24a 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1048,6 +1048,7 @@ namespace BinaryNinja InstructionTextToken(BNInstructionTextTokenType type, BNInstructionTextTokenContext context, const std::string& text, uint64_t address, uint64_t value = 0, size_t size = 0, size_t operand = BN_INVALID_OPERAND, uint8_t confidence = BN_FULL_CONFIDENCE, const std::vector& typeName={}); + InstructionTextToken(const BNInstructionTextToken& token); InstructionTextToken WithConfidence(uint8_t conf); static BNInstructionTextToken* CreateInstructionTextTokenList(const std::vector& tokens); @@ -4386,4 +4387,49 @@ namespace BinaryNinja static void RegisterGenericDataRenderer(DataRenderer* renderer); static void RegisterTypeSpecificDataRenderer(DataRenderer* renderer); }; + + class DisassemblyTextRenderer: public CoreRefCountObject + { + public: + DisassemblyTextRenderer(Function* func, DisassemblySettings* settings = nullptr); + DisassemblyTextRenderer(LowLevelILFunction* func, DisassemblySettings* settings = nullptr); + DisassemblyTextRenderer(MediumLevelILFunction* func, DisassemblySettings* settings = nullptr); + DisassemblyTextRenderer(BNDisassemblyTextRenderer* renderer); + + Ref GetFunction() const; + Ref GetLowLevelILFunction() const; + Ref GetMediumLevelILFunction() const; + + Ref GetBasicBlock() const; + Ref GetArchitecture() const; + Ref GetSettings() const; + void SetBasicBlock(BasicBlock* block); + void SetArchitecture(Architecture* arch); + void SetSettings(DisassemblySettings* settings); + + virtual bool IsIL() const; + virtual bool HasDataFlow() const; + + virtual void GetInstructionAnnotations(std::vector& tokens, uint64_t addr); + virtual bool GetInstructionText(uint64_t addr, size_t& len, + std::vector& tokens, uint64_t& displayAddr); + + virtual bool GetDisassemblyText(uint64_t addr, size_t& len, std::vector& lines); + void ResetDeduplicatedComments(); + + bool AddSymbolToken(std::vector& tokens, uint64_t addr, size_t size, size_t operand); + void AddStackVariableReferenceTokens(std::vector& tokens, + const StackVariableReference& ref); + + static bool IsIntegerToken(BNInstructionTextTokenType type); + void AddIntegerToken(std::vector& tokens, const InstructionTextToken& token, + Architecture* arch, uint64_t addr); + + void WrapComment(DisassemblyTextLine& line, + std::vector& lines, + const std::string& comment, + bool hasAutoAnnotations, + const std::string& leadingSpaces=" "); + }; } -- cgit v1.3.1