1 #include "arm.h" 2 #include "arm_common.h" 3 #include "metaarm_emulator.h" 4 5 namespace REDasm { 6 ARMAssembler()7ARMAssembler::ARMAssembler(): ARMCommonAssembler<CS_ARCH_ARM, CS_MODE_ARM>() { } flags() const8u32 ARMAssembler::flags() const { return AssemblerFlags::CanEmulate; } createEmulator(DisassemblerAPI * disassembler) const9Emulator *ARMAssembler::createEmulator(DisassemblerAPI *disassembler) const { return new MetaARMEmulator(disassembler); } createPrinter(DisassemblerAPI * disassembler) const10Printer *ARMAssembler::createPrinter(DisassemblerAPI *disassembler) const { return new MetaARMPrinter(m_cshandle, disassembler); } 11 pc(const InstructionPtr & instruction) const12u64 ARMAssembler::pc(const InstructionPtr &instruction) const 13 { 14 /* 15 * https://stackoverflow.com/questions/24091566/why-does-the-arm-pc-register-point-to-the-instruction-after-the-next-one-to-be-e 16 * 17 * In ARM state: 18 * - The value of the PC is the address of the current instruction plus 8 bytes. 19 */ 20 21 return instruction->address + 8; 22 } 23 24 } // namespace REDasm 25