Serenity Operating System
at master 57 lines 1.4 kB view raw
1/* 2 * Copyright (c) 2020, Luke Wilde <lukew@serenityos.org> 3 * Copyright (c) 2022, the SerenityOS developers. 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#pragma once 9 10#include <AK/Vector.h> 11#include <LibGUI/Model.h> 12#include <LibX86/Instruction.h> 13#include <sys/arch/regs.h> 14 15namespace Debug { 16 17class DebugSession; 18 19} 20 21namespace HackStudio { 22 23struct InstructionData { 24 X86::Instruction insn; 25 DeprecatedString disassembly; 26 StringView bytes; 27 FlatPtr address { 0 }; 28}; 29 30class DisassemblyModel final : public GUI::Model { 31public: 32 static NonnullRefPtr<DisassemblyModel> create(Debug::DebugSession const& debug_session, PtraceRegisters const& regs) 33 { 34 return adopt_ref(*new DisassemblyModel(debug_session, regs)); 35 } 36 37 enum Column { 38 Address, 39 InstructionBytes, 40 Disassembly, 41 __Count 42 }; 43 44 virtual ~DisassemblyModel() override = default; 45 46 virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override; 47 virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return Column::__Count; } 48 virtual DeprecatedString column_name(int) const override; 49 virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override; 50 51private: 52 DisassemblyModel(Debug::DebugSession const&, PtraceRegisters const&); 53 54 Vector<InstructionData> m_instructions; 55}; 56 57}