DisassemblyModel.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Copyright (c) 2020, Luke Wilde <lukew@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Vector.h>
  8. #include <LibGUI/Model.h>
  9. #include <LibX86/Instruction.h>
  10. #include <sys/arch/i386/regs.h>
  11. namespace Debug {
  12. class DebugSession;
  13. }
  14. namespace HackStudio {
  15. struct InstructionData {
  16. X86::Instruction insn;
  17. String disassembly;
  18. StringView bytes;
  19. FlatPtr address { 0 };
  20. };
  21. class DisassemblyModel final : public GUI::Model {
  22. public:
  23. static NonnullRefPtr<DisassemblyModel> create(const Debug::DebugSession& debug_session, const PtraceRegisters& regs)
  24. {
  25. return adopt_ref(*new DisassemblyModel(debug_session, regs));
  26. }
  27. enum Column {
  28. Address,
  29. InstructionBytes,
  30. Disassembly,
  31. __Count
  32. };
  33. virtual ~DisassemblyModel() override;
  34. virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override;
  35. virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return Column::__Count; }
  36. virtual String column_name(int) const override;
  37. virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
  38. virtual void update() override;
  39. private:
  40. DisassemblyModel(const Debug::DebugSession&, const PtraceRegisters&);
  41. Vector<InstructionData> m_instructions;
  42. };
  43. }