1 #ifndef ROSE_DISASSEMBLER_ARM_H
2 #define ROSE_DISASSEMBLER_ARM_H
3 #include <Disassembler.h>
4 #ifdef ROSE_ENABLE_ASM_A64
6 #include <capstone/capstone.h>
15 class DisassemblerArm:
public Disassembler {
40 ARCH_ARM = CS_ARCH_ARM,
41 ARCH_ARM64 = CS_ARCH_ARM64
46 MODE_ARM32 = CS_MODE_ARM,
47 MODE_THUMB = CS_MODE_THUMB,
48 MODE_MCLASS = CS_MODE_MCLASS,
53 using Modes = BitFlags<Mode>;
63 DisassemblerArm(Architecture arch, Modes modes = Modes())
64 : arch_(arch), modes_(modes), capstoneOpened_(false) {
72 Disassembler* clone()
const override;
73 Unparser::BasePtr unparser()
const override;
74 SgAsmInstruction* disassembleOne(
const MemoryMap::Ptr&, rose_addr_t startVa, AddressSet *successors=NULL)
override;
81 uint32_t opcode(
const cs_insn&);
88 RegisterDescriptor makeRegister(arm64_reg);
91 RegisterDescriptor subRegister(RegisterDescriptor reg,
int idx, arm64_vess elmtSize);
101 SgAsmType* registerType(RegisterDescriptor, arm64_vas);
105 SgAsmType* typeForMemoryRead(
const cs_insn&);
Base class for machine instructions.
const char * Mode(int64_t)
Convert Rose::BinaryAnalysis::DisassemblerArm::Mode enum constant to a string.
Main namespace for the ROSE library.
List of operands for an instruction.
Base class for expressions.
Base class for binary types.
const char * Architecture(int64_t)
Convert Rose::BinaryAnalysis::DisassemblerMips::Mips32::Architecture enum constant to a string...