11195Srgrimes/* 29970Sbde * Copyright 2012, Alex Smith, alex@alex-smith.me.uk. 337Srgrimes * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 437Srgrimes * Distributed under the terms of the MIT License. 537Srgrimes */ 6147Srgrimes#ifndef DISASSEMBLER_X86_64_H 7147Srgrimes#define DISASSEMBLER_X86_64_H 85356Sache 93017Srgrimes#include <String.h> 107526Sjkh 117487Srgrimes#include "Types.h" 127487Srgrimes 137487Srgrimes 145356Sacheclass CpuState; 151734Sjkhclass InstructionInfo; 161734Sjkh 1737Srgrimes 1837Srgrimesclass DisassemblerX8664 { 1937Srgrimespublic: 2037Srgrimes DisassemblerX8664(); 211773Sjkh virtual ~DisassemblerX8664(); 22147Srgrimes 23147Srgrimes virtual status_t Init(target_addr_t address, const void* code, 242779Srgrimes size_t codeSize); 252779Srgrimes 262779Srgrimes virtual status_t GetNextInstruction(BString& line, 271767Sjkh target_addr_t& _address, 282570Srgrimes target_size_t& _size, 292570Srgrimes bool& _breakpointAllowed); 302570Srgrimes virtual status_t GetPreviousInstruction( 312570Srgrimes target_addr_t nextAddress, 322570Srgrimes target_addr_t& _address, 332570Srgrimes target_size_t& _size); 342570Srgrimes virtual status_t GetNextInstructionInfo( 352570Srgrimes InstructionInfo& _info, 366982Srgrimes CpuState* state); 371782Sjkh 381782Sjkhprivate: 39491Srgrimes target_addr_t GetInstructionTargetAddress( 407273Srgrimes CpuState* state) const; 416177Samuraiprivate: 426177Samurai struct UdisData; 4337Srgrimes 4437Srgrimesprivate: 4537Srgrimes target_addr_t fAddress; 4637Srgrimes const uint8* fCode; 47263Srgrimes size_t fCodeSize; 482779Srgrimes UdisData* fUdisData; 498857Srgrimes}; 50993Srgrimes 51277Srgrimes 522779Srgrimes#endif // DISASSEMBLER_X86_64_H 53284Srgrimes