2 #ifndef ROSE_BinaryAnalysis_DisassemblerMips_H
3 #define ROSE_BinaryAnalysis_DisassemblerMips_H
4 #include <featureTests.h>
5 #ifdef ROSE_ENABLE_BINARY_ANALYSIS
6 #include <Rose/BinaryAnalysis/Disassembler.h>
8 #include <Rose/BinaryAnalysis/InstructionEnumsMips.h>
9 #include "SageBuilderAsm.h"
12 namespace BinaryAnalysis {
19 explicit DisassemblerMips(ByteOrder::Endianness sex = ByteOrder::ORDER_MSB) { init(sex); }
37 enum Architecture { Release1, Release2, Release3, Micro };
38 Mips32(Architecture arch,
unsigned match,
unsigned mask): arch(arch), match(match), mask(mask) {}
44 virtual SgAsmMipsInstruction *operator()(rose_addr_t insn_va,
const D *d,
unsigned insn_bits) = 0;
136 void init(ByteOrder::Endianness);
SgAsmRegisterReferenceExpression * makeHwRegister(unsigned regnum) const
Create a new register reference for a hardware register.
Mips32 * find_idis(rose_addr_t insn_va, unsigned insn_bits) const
Find an instruction-specific disassembler.
DisassemblerMips(ByteOrder::Endianness sex=ByteOrder::ORDER_MSB)
Create a MIPS disassembler.
Expression that adds two operands.
SgAsmIntegerValueExpression * makeImmediate16(unsigned value, size_t bit_offset, size_t nbits) const
Create a new 16-bit value expression from a 16-bit value.
SgAsmIntegerValueExpression * makeBranchTargetRelative(rose_addr_t insn_va, unsigned offset16, size_t bit_offset, size_t nbits) const
Create a 32-bit PC-relative branch target address from a 16-bit offset.
SgAsmIntegerValueExpression * makeImmediate32(unsigned value, size_t bit_offset, size_t nbits) const
Create a new 32-bit value expression from a 32-bit value.
Base class for references to a machine register.
SgAsmBinaryAdd * makeRegisterIndexed(rose_addr_t insn_va, unsigned base_gprnum, unsigned index_gprnum) const
Build a register index expression.
SgAsmRegisterReferenceExpression * makeShadowRegister(rose_addr_t insn_va, unsigned regnum) const
Create a new register reference for a shadow GPR.
SgAsmRegisterReferenceExpression * makeCp2ccRegister(unsigned cc) const
Create a new register reference for a COP2 condition code.
Base class for machine instructions.
SgAsmRegisterReferenceExpression * makeCp0Register(rose_addr_t insn_va, unsigned regnum, unsigned sel) const
Create a new register reference for Coprocessor 0.
SgAsmMipsInstruction * makeInstruction(rose_addr_t insn_va, MipsInstructionKind, const std::string &mnemonic, SgAsmExpression *arg1=NULL, SgAsmExpression *arg2=NULL, SgAsmExpression *arg3=NULL, SgAsmExpression *arg4=NULL) const
Create a new instruction.
virtual SgAsmInstruction * disassembleOne(const MemoryMap::Ptr &, rose_addr_t start_va, AddressSet *successors=NULL) override
This is the lowest level disassembly function and is implemented in the architecture-specific subclas...
void insert_idis(Mips32 *, bool replace=false)
Insert an instruction-specific disassembler.
virtual SgAsmInstruction * makeUnknownInstruction(const Disassembler::Exception &) override
Makes an unknown instruction from an exception.
Main namespace for the ROSE library.
SgAsmRegisterReferenceExpression * makeFpccRegister(rose_addr_t insn_va, unsigned cc) const
Create a new floating point condition flag register reference expression.
SgAsmRegisterReferenceExpression * makeFpRegister(rose_addr_t insn_va, unsigned regnum) const
Create a new floating point register reference expression.
SgAsmIntegerValueExpression * makeBranchTargetAbsolute(rose_addr_t insn_va, unsigned insn_index, size_t bit_offset, size_t nbits) const
Create a 32-bit branch address from an instruction index value.
SgAsmRegisterReferenceExpression * makeCp2Register(unsigned regnum) const
Create a new register reference for Coprocessor 2.
Interface for disassembling a single instruction.
SgAsmBinaryAdd * makeRegisterOffset(rose_addr_t insn_va, unsigned gprnum, unsigned offset16) const
Build an expression for an offset from a register.
Reference to memory locations.
virtual Unparser::BasePtr unparser() const override
Unparser.
SgAsmMemoryReferenceExpression * makeMemoryReference(SgAsmExpression *addr, SgAsmType *type) const
Build a memory reference expression.
Base class for integer values.
Base class for expressions.
MipsInstructionKind
Kinds of MIPS instructions.
Represents one MIPS machine instruction.
Base class for binary types.
SgAsmMipsInstruction * disassemble_insn(rose_addr_t insn_va, unsigned insn_bits) const
Disassemble a single instruction.
Exception thrown by the disassemblers.
virtual DisassemblerMips * clone() const override
Creates a new copy of a disassembler.
SgAsmRegisterReferenceExpression * makeRegister(rose_addr_t insn_va, unsigned regnum) const
Create a new general purpose register reference expression.
virtual bool canDisassemble(SgAsmGenericHeader *) const override
Predicate determining the suitability of a disassembler for a specific file header.
Virtual base class for instruction disassemblers.
SgAsmIntegerValueExpression * makeImmediate8(unsigned value, size_t bit_offset, size_t nbits) const
Create a new 8-bit value expression from an 8-bit value.
std::vector< Mips32 * > idis_table
Table of instruction-specific disassemblers.