1 #ifndef ROSE_BinaryAnalysis_Disassembler_Aarch32_H
2 #define ROSE_BinaryAnalysis_Disassembler_Aarch32_H
3 #include <Rose/BinaryAnalysis/Disassembler/Base.h>
4 #ifdef ROSE_ENABLE_ASM_AARCH32
6 #include <capstone/capstone.h>
9 namespace BinaryAnalysis {
10 namespace Disassembler {
16 class Aarch32:
public Base {
24 THUMB = CS_MODE_THUMB,
25 MCLASS = CS_MODE_MCLASS,
30 using Modes = BitFlags<Mode>;
35 bool capstoneOpened_ =
false;
39 explicit Aarch32(Modes = Modes());
43 static Ptr instanceA32();
46 static Ptr instanceT32();
49 static Ptr instance();
55 Base::Ptr clone()
const override;
56 Unparser::BasePtr unparser()
const override;
65 uint32_t bytesToWord(
size_t nBytes,
const uint8_t *bytes);
71 std::string fixMnemonic(
const std::string&, arm_cc);
81 void wrapPrePostIncrement(SgAsmAarch32Instruction*,
const cs_insn&,
const uint32_t insnWord);
85 RegisterDescriptor makeRegister(arm_reg);
91 RegisterDescriptor makeCoprocRegister(
int registerNumber);
94 RegisterDescriptor subRegister(RegisterDescriptor,
int idx);
97 SgAsmType* registerType(RegisterDescriptor);
101 SgAsmType* typeForMemoryRead(
const cs_insn&);
104 uint32_t opcode(
const cs_insn&);
Base class for machine instructions.
Sawyer::SharedPointer< Aarch32 > Aarch32Ptr
Reference counted pointer for ARM Aarch32 decoder.
Main namespace for the ROSE library.
MemoryMapPtr Ptr
Reference counting pointer.
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.
Sawyer::SharedPointer< Node > Ptr
Reference counting pointer.