summaryrefslogtreecommitdiff
path: root/datarenderer.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2024-08-22 12:55:49 -0600
committerRusty Wagner <rusty.wagner@gmail.com>2024-10-21 13:56:55 -0400
commitd8e3001e535fad178c621ff07418f81f25123dc4 (patch)
tree54c03cef2f0bdfd9a3b6df4334c81becb63e4993 /datarenderer.cpp
parent0e281a30d73c0f31ef9442fef0346779164231ad (diff)
Allow multiple high level representations for display, add Pseudo Rust and a Pseudo Python example plugin
Diffstat (limited to 'datarenderer.cpp')
-rw-r--r--datarenderer.cpp14
1 files changed, 8 insertions, 6 deletions
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<DataRenderer> renderer(ctxt);
Ref<BinaryView> 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<DisassemblyTextLine> DataRenderer::GetLinesForData(BinaryView* data, uint64_t addr, Type* type,
- const std::vector<InstructionTextToken>& prefix, size_t width, vector<pair<Type*, size_t>>& context)
+ const std::vector<InstructionTextToken>& prefix, size_t width, vector<pair<Type*, size_t>>& context, const string& language)
{
BNInstructionTextToken* prefixes = InstructionTextToken::CreateInstructionTextTokenList(prefix);
BNTypeContext* typeCtx = new BNTypeContext[context.size()];
@@ -139,7 +140,7 @@ vector<DisassemblyTextLine> 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<DisassemblyTextLine> DataRenderer::GetLinesForData(BinaryView* data, uint
vector<DisassemblyTextLine> DataRenderer::RenderLinesForData(BinaryView* data, uint64_t addr, Type* type,
- const std::vector<InstructionTextToken>& prefix, size_t width, vector<pair<Type*, size_t>>& context)
+ const std::vector<InstructionTextToken>& prefix, size_t width, vector<pair<Type*, size_t>>& context, const string& language)
{
BNInstructionTextToken* prefixes = InstructionTextToken::CreateInstructionTextTokenList(prefix);
BNTypeContext* typeCtx = new BNTypeContext[context.size()];
@@ -179,7 +180,8 @@ vector<DisassemblyTextLine> 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++)