/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace X86 { class Disassembler { public: explicit Disassembler(InstructionStream& stream) : m_stream(stream) { } Optional next() { if (!m_stream.can_read()) return {}; #if ARCH(I386) return Instruction::from_stream(m_stream, ProcessorMode::Protected); #else # if ARCH(X86_64) return Instruction::from_stream(m_stream, ProcessorMode::Long); # else dbgln("Unsupported platform"); return {}; # endif #endif } private: InstructionStream& m_stream; }; }