DisassemblyModel.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. private:
  39. DisassemblyModel(const Debug::DebugSession&, const PtraceRegisters&);
  40. Vector<InstructionData> m_instructions;
  41. };
  42. }