diff options
| author | Rusty Wagner <rusty@vector35.com> | 2019-02-22 15:36:40 -0500 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2019-02-22 15:41:02 -0500 |
| commit | 2f84b5c600f08101a6a7ee08738a3e3a32686f46 (patch) | |
| tree | 909537511998daa9796737e4cd287b89488761f7 /binaryninjaapi.h | |
| parent | e7228de8fe2640f126a01064a8485c1270846bd1 (diff) | |
Add API for constructing disassembly text
Diffstat (limited to 'binaryninjaapi.h')
| -rw-r--r-- | binaryninjaapi.h | 46 |
1 files changed, 46 insertions, 0 deletions
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<std::string>& typeName={}); + InstructionTextToken(const BNInstructionTextToken& token); InstructionTextToken WithConfidence(uint8_t conf); static BNInstructionTextToken* CreateInstructionTextTokenList(const std::vector<InstructionTextToken>& tokens); @@ -4386,4 +4387,49 @@ namespace BinaryNinja static void RegisterGenericDataRenderer(DataRenderer* renderer); static void RegisterTypeSpecificDataRenderer(DataRenderer* renderer); }; + + class DisassemblyTextRenderer: public CoreRefCountObject<BNDisassemblyTextRenderer, + BNNewDisassemblyTextRendererReference, BNFreeDisassemblyTextRenderer> + { + public: + DisassemblyTextRenderer(Function* func, DisassemblySettings* settings = nullptr); + DisassemblyTextRenderer(LowLevelILFunction* func, DisassemblySettings* settings = nullptr); + DisassemblyTextRenderer(MediumLevelILFunction* func, DisassemblySettings* settings = nullptr); + DisassemblyTextRenderer(BNDisassemblyTextRenderer* renderer); + + Ref<Function> GetFunction() const; + Ref<LowLevelILFunction> GetLowLevelILFunction() const; + Ref<MediumLevelILFunction> GetMediumLevelILFunction() const; + + Ref<BasicBlock> GetBasicBlock() const; + Ref<Architecture> GetArchitecture() const; + Ref<DisassemblySettings> 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<InstructionTextToken>& tokens, uint64_t addr); + virtual bool GetInstructionText(uint64_t addr, size_t& len, + std::vector<InstructionTextToken>& tokens, uint64_t& displayAddr); + + virtual bool GetDisassemblyText(uint64_t addr, size_t& len, std::vector<DisassemblyTextLine>& lines); + void ResetDeduplicatedComments(); + + bool AddSymbolToken(std::vector<InstructionTextToken>& tokens, uint64_t addr, size_t size, size_t operand); + void AddStackVariableReferenceTokens(std::vector<InstructionTextToken>& tokens, + const StackVariableReference& ref); + + static bool IsIntegerToken(BNInstructionTextTokenType type); + void AddIntegerToken(std::vector<InstructionTextToken>& tokens, const InstructionTextToken& token, + Architecture* arch, uint64_t addr); + + void WrapComment(DisassemblyTextLine& line, + std::vector<DisassemblyTextLine>& lines, + const std::string& comment, + bool hasAutoAnnotations, + const std::string& leadingSpaces=" "); + }; } |
