From 1fe6dc4c6e423c7231516f3a96a9c688fb0b7126 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Mon, 10 Jan 2022 21:38:52 +0100 Subject: [PATCH] fix: Occasional crash when disassembling files --- .../content/views/view_disassembler.cpp | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/plugins/builtin/source/content/views/view_disassembler.cpp b/plugins/builtin/source/content/views/view_disassembler.cpp index 8123f7a09..97154f134 100644 --- a/plugins/builtin/source/content/views/view_disassembler.cpp +++ b/plugins/builtin/source/content/views/view_disassembler.cpp @@ -281,31 +281,34 @@ namespace hex::plugin::builtin { ImGui::TableSetupColumn("hex.builtin.view.disassembler.disassembly.bytes"_lang); ImGui::TableSetupColumn("hex.builtin.view.disassembler.disassembly.title"_lang); - ImGuiListClipper clipper; - clipper.Begin(this->m_disassembly.size()); + if (!this->m_disassembling) { + ImGuiListClipper clipper; + clipper.Begin(this->m_disassembly.size()); - ImGui::TableHeadersRow(); - while (clipper.Step()) { - for (u64 i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - if (ImGui::Selectable(("##DisassemblyLine"s + std::to_string(i)).c_str(), false, ImGuiSelectableFlags_SpanAllColumns)) { - EventManager::post(Region { this->m_disassembly[i].offset, this->m_disassembly[i].size }); + ImGui::TableHeadersRow(); + while (clipper.Step()) { + for (u64 i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) { + const auto &instruction = this->m_disassembly[i]; + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (ImGui::Selectable(("##DisassemblyLine"s + std::to_string(i)).c_str(), false, ImGuiSelectableFlags_SpanAllColumns)) { + EventManager::post(Region { instruction.offset, instruction.size }); + } + ImGui::SameLine(); + ImGui::TextFormatted("0x{0:X}", instruction.address); + ImGui::TableNextColumn(); + ImGui::TextFormatted("0x{0:X}", instruction.offset); + ImGui::TableNextColumn(); + ImGui::TextUnformatted(instruction.bytes.c_str()); + ImGui::TableNextColumn(); + ImGui::TextFormattedColored(ImColor(0xFFD69C56), "{}", instruction.mnemonic); + ImGui::SameLine(); + ImGui::TextUnformatted(instruction.operators.c_str()); } - ImGui::SameLine(); - ImGui::TextFormatted("0x{0:X}", this->m_disassembly[i].address); - ImGui::TableNextColumn(); - ImGui::TextFormatted("0x{0:X}", this->m_disassembly[i].offset); - ImGui::TableNextColumn(); - ImGui::TextUnformatted(this->m_disassembly[i].bytes.c_str()); - ImGui::TableNextColumn(); - ImGui::TextFormattedColored(ImColor(0xFFD69C56), "{}", this->m_disassembly[i].mnemonic); - ImGui::SameLine(); - ImGui::TextUnformatted(this->m_disassembly[i].operators.c_str()); } - } - clipper.End(); + clipper.End(); + } ImGui::EndTable(); }