1#ifndef ROSE_BinaryAnalysis_Disassembler_Aarch64_H
2#define ROSE_BinaryAnalysis_Disassembler_Aarch64_H
3#include <featureTests.h>
4#ifdef ROSE_ENABLE_ASM_AARCH64
5#include <Rose/BinaryAnalysis/Disassembler/Base.h>
7#include <capstone/capstone.h>
10namespace BinaryAnalysis {
11namespace Disassembler {
20class Aarch64:
public Base {
44 using Ptr = Aarch64Ptr;
48 MODE_MCLASS = CS_MODE_MCLASS,
52 using Modes = BitFlags<Mode>;
57 bool capstoneOpened_ =
false;
61 Aarch64(
const Architecture::BaseConstPtr&, Modes);
65 static Ptr instance(
const Architecture::BaseConstPtr&, Modes modes = Modes());
70 Base::Ptr clone()
const override;
71 SgAsmInstruction* disassembleOne(
const MemoryMap::Ptr&, rose_addr_t startVa, AddressSet *successors=
nullptr)
override;
78 uint32_t opcode(
const cs_insn&);
85 RegisterDescriptor makeRegister(arm64_reg);
88 RegisterDescriptor subRegister(RegisterDescriptor reg,
int idx, arm64_vess elmtSize);
99 SgAsmType* registerType(RegisterDescriptor, arm64_vas);
103 SgAsmType* typeForMemoryRead(
const cs_insn&);
Base class for expressions.
Base class for machine instructions.
List of operands for an instruction.
Base class for binary types.
Sawyer::SharedPointer< Node > Ptr
Reference counting pointer.
const char * Mode(int64_t)
Convert Rose::AST::cmdline::graphviz_t::Mode enum constant to a string.