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