Serenity Operating System
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}