From e8bc35a6297da6bea1eed833ac25cfebe1fee355 Mon Sep 17 00:00:00 2001 From: Oxore Date: Sun, 23 Apr 2023 19:17:01 +0300 Subject: Impl separate xref types call and branch --- main.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'main.cpp') diff --git a/main.cpp b/main.cpp index f84c55e..5dd27f5 100644 --- a/main.cpp +++ b/main.cpp @@ -82,7 +82,8 @@ void DisasmMap::DisasmAll(const DataBuffer &code, const Settings & s) auto *ref_node = insertTracedNode( node->branch_addr, TracedNodeType::kInstruction); ref_node->Disasm(code, s); - ref_node->AddReferencedBy(node->offset); + ref_node->AddReferencedBy( + node->offset, node->is_call ? ReferenceType::kCall : ReferenceType::kBranch); } } } @@ -115,6 +116,16 @@ static size_t RenderRawDataComment( return overall_sz; } +static const char *ReferenceTypeToString(ReferenceType type) +{ + switch (type) { + case ReferenceType::kUnknown: return "UNKN"; + case ReferenceType::kBranch: return "BRANCH"; + case ReferenceType::kCall: return "CALL"; + } + return "UNKN"; +} + static void RenderDisassembly( FILE *output, const DisasmMap &disasm_map, const DataBuffer &code, const Settings &) { @@ -124,11 +135,15 @@ static void RenderDisassembly( char comment[100]{}; RenderRawDataComment(comment, sizeof(comment) - 1, node->offset, node->size, code); if (node->ref_by) { - fprintf(output, "| Referenced by:\n"); + fprintf(output, "| XREFS:\n"); for (ReferenceNode *ref{node->ref_by}; ref; ref = ref->next) { + if (ref->refs_count == 0) { + continue; + } fprintf(output, "|"); for (size_t i = 0; i < ref->refs_count; i++) { - fprintf(output, " @%08x", ref->refs[i]); + const ReferenceRecord r = ref->refs[i]; + fprintf(output, " %s @%08x", ReferenceTypeToString(r.type), r.address); } fprintf(output, "\n"); } -- cgit v1.2.3