1 #ifndef ROSE_BinaryAnalysis_DisassemblerAarch32_H
2 #define ROSE_BinaryAnalysis_DisassemblerAarch32_H
3 #include <Rose/BinaryAnalysis/Disassembler.h>
4 #ifdef ROSE_ENABLE_ASM_AARCH32
6 #include <capstone/capstone.h>
9 namespace BinaryAnalysis {
15 class DisassemblerAarch32:
public Disassembler {
20 THUMB = CS_MODE_THUMB,
21 MCLASS = CS_MODE_MCLASS,
26 using Modes = BitFlags<Mode>;
35 explicit DisassemblerAarch32(Modes modes = Modes())
36 : modes_(modes), capstoneOpened_(false) {
40 static DisassemblerAarch32* instanceA32() {
41 return new DisassemblerAarch32(Modes(Mode::ARM32));
44 static DisassemblerAarch32* instanceT32() {
45 return new DisassemblerAarch32(Modes(Mode::THUMB));
48 ~DisassemblerAarch32();
52 Disassembler* clone()
const override;
53 Unparser::BasePtr unparser()
const override;
54 SgAsmInstruction* disassembleOne(
const MemoryMap::Ptr&, rose_addr_t startVa, AddressSet *successors=
nullptr)
override;
61 uint32_t bytesToWord(
size_t nBytes,
const uint8_t *bytes);
67 std::string fixMnemonic(
const std::string&, arm_cc);
77 void wrapPrePostIncrement(SgAsmAarch32Instruction*,
const cs_insn&,
const uint32_t insnWord);
81 RegisterDescriptor makeRegister(arm_reg);
87 RegisterDescriptor makeCoprocRegister(
int registerNumber);
90 RegisterDescriptor subRegister(RegisterDescriptor,
int idx);
93 SgAsmType* registerType(RegisterDescriptor);
97 SgAsmType* typeForMemoryRead(
const cs_insn&);
100 uint32_t opcode(
const cs_insn&);
Base class for machine instructions.
Main namespace for the ROSE library.
const char * Mode(int64_t)
Convert Rose::AST::cmdline::graphviz_t::Mode enum constant to a string.
Base class for expressions.
Base class for binary types.