From d8e3001e535fad178c621ff07418f81f25123dc4 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Thu, 22 Aug 2024 12:55:49 -0600 Subject: Allow multiple high level representations for display, add Pseudo Rust and a Pseudo Python example plugin --- datarenderer.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'datarenderer.cpp') diff --git a/datarenderer.cpp b/datarenderer.cpp index a2ed1dae..4e4a3346 100644 --- a/datarenderer.cpp +++ b/datarenderer.cpp @@ -64,7 +64,7 @@ bool DataRenderer::IsValidForDataCallback( BNDisassemblyTextLine* DataRenderer::GetLinesForDataCallback(void* ctxt, BNBinaryView* view, uint64_t addr, BNType* type, const BNInstructionTextToken* prefix, size_t prefixCount, size_t width, size_t* count, - BNTypeContext* typeCtx, size_t ctxCount) + BNTypeContext* typeCtx, size_t ctxCount, const char* language) { CallbackRef renderer(ctxt); Ref viewObj = new BinaryView(BNNewViewReference(view)); @@ -80,7 +80,8 @@ BNDisassemblyTextLine* DataRenderer::GetLinesForDataCallback(void* ctxt, BNBinar contextType->AddRef(); context.push_back({contextType, typeCtx[i].offset}); } - auto lines = renderer->GetLinesForData(viewObj, addr, typeObj, prefixes, width, context); + auto lines = renderer->GetLinesForData(viewObj, addr, typeObj, prefixes, width, context, + language ? language : string()); *count = lines.size(); BNDisassemblyTextLine* buf = new BNDisassemblyTextLine[lines.size()]; for (size_t i = 0; i < lines.size(); i++) @@ -128,7 +129,7 @@ bool DataRenderer::IsValidForData(BinaryView* data, uint64_t addr, Type* type, v vector DataRenderer::GetLinesForData(BinaryView* data, uint64_t addr, Type* type, - const std::vector& prefix, size_t width, vector>& context) + const std::vector& prefix, size_t width, vector>& context, const string& language) { BNInstructionTextToken* prefixes = InstructionTextToken::CreateInstructionTextTokenList(prefix); BNTypeContext* typeCtx = new BNTypeContext[context.size()]; @@ -139,7 +140,7 @@ vector DataRenderer::GetLinesForData(BinaryView* data, uint } size_t count = 0; BNDisassemblyTextLine* lines = BNGetLinesForData(m_object, data->GetObject(), addr, type->GetObject(), prefixes, - prefix.size(), width, &count, typeCtx, context.size()); + prefix.size(), width, &count, typeCtx, context.size(), language.c_str()); delete[] typeCtx; for (size_t i = 0; i < prefix.size(); i++) @@ -168,7 +169,7 @@ vector DataRenderer::GetLinesForData(BinaryView* data, uint vector DataRenderer::RenderLinesForData(BinaryView* data, uint64_t addr, Type* type, - const std::vector& prefix, size_t width, vector>& context) + const std::vector& prefix, size_t width, vector>& context, const string& language) { BNInstructionTextToken* prefixes = InstructionTextToken::CreateInstructionTextTokenList(prefix); BNTypeContext* typeCtx = new BNTypeContext[context.size()]; @@ -179,7 +180,8 @@ vector DataRenderer::RenderLinesForData(BinaryView* data, u } size_t count = 0; BNDisassemblyTextLine* lines = BNRenderLinesForData( - data->GetObject(), addr, type->GetObject(), prefixes, prefix.size(), width, &count, typeCtx, context.size()); + data->GetObject(), addr, type->GetObject(), prefixes, prefix.size(), width, &count, typeCtx, context.size(), + language.c_str()); delete[] typeCtx; for (size_t i = 0; i < prefix.size(); i++) -- cgit v1.3.1