DisassemblerArm Class Reference

#include <DisassemblerArm.h>

Inheritance diagram for DisassemblerArm:

Inheritance graph
[legend]
Collaboration diagram for DisassemblerArm:

Collaboration graph
[legend]
List of all members.

Detailed Description

Disassembler for the ARM architecture.

Most of the useful disassembly methods can be found in the superclass.


Public Member Functions

 DisassemblerArm ()
 DisassemblerArm (const DisassemblerArm &other)
virtual ~DisassemblerArm ()
virtual Disassemblerclone () const
 Creates a new copy of a disassembler.
virtual bool can_disassemble (SgAsmGenericHeader *) const
 See Disassembler::can_disassemble.
virtual SgAsmInstructiondisassembleOne (const MemoryMap *map, rose_addr_t start_va, AddressSet *successors=NULL)
 See Disassembler::disassembleOne.
virtual void assembleOne (SgAsmInstruction *, SgUnsignedCharList &)
 See Disassembler::assembleOne.
virtual SgAsmInstructionmake_unknown_instruction (const Exception &)
 See Disassembler::can_disassemble.

Private Member Functions

SgAsmArmRegisterReferenceExpressionmakeRegister (uint8_t reg) const
 Creates a general-purpose register reference expression.
SgAsmArmRegisterReferenceExpressionmakePsrFields (bool useSPSR, uint8_t fields) const
 Create a reference to one of the program status registers.
SgAsmArmRegisterReferenceExpressionmakePsr (bool useSPSR) const
SgAsmExpressionmakeRotatedImmediate () const
SgAsmExpressionmakeShifterField () const
 Decode last 12 bits and bit 25 (I).
SgAsmArmInstructionmakeDataProcInstruction (uint8_t opcode, bool s, SgAsmExpression *rn, SgAsmExpression *rd, SgAsmExpression *rhsOperand)
SgAsmDoubleWordValueExpressionmakeSplit8bitOffset () const
SgAsmDoubleWordValueExpressionmakeBranchTarget () const
SgAsmExpressiondecodeMemoryAddress (SgAsmExpression *rn) const
SgAsmArmInstructiondecodeMediaInstruction () const
SgAsmArmInstructiondecodeMultiplyInstruction () const
SgAsmArmInstructiondecodeExtraLoadStores () const
SgAsmArmInstructiondecodeMiscInstruction () const
SgAsmArmInstructiondisassemble ()
void init ()
 Initialize instances of this class.
void startInstruction (rose_addr_t start_va, uint32_t c)
 Resets disassembler state to beginning of an instruction.

Static Private Member Functions

static SgAsmArmInstructionmakeInstructionWithoutOperands (uint32_t address, const std::string &mnemonic, int condPos, ArmInstructionKind kind, ArmInstructionCondition cond, uint32_t insn)

Private Attributes

bool decodeUnconditionalInstructions
 set by init()
uint32_t ip
 instruction pointer
uint32_t insn
 4-byte instruction word
ArmInstructionCondition cond

Classes

class  ExceptionArm
 Same as Disassembler::Exception except with a different constructor for ease of use in DisassemblerArm. More...


Constructor & Destructor Documentation

DisassemblerArm::DisassemblerArm (  )  [inline]

DisassemblerArm::DisassemblerArm ( const DisassemblerArm other  )  [inline]

virtual DisassemblerArm::~DisassemblerArm (  )  [inline, virtual]


Member Function Documentation

virtual Disassembler* DisassemblerArm::clone (  )  const [inline, virtual]

Creates a new copy of a disassembler.

The new copy has all the same settings as the original.

Thread safety: The thread safety of this virtual method depends on the implementation in the subclass.

Implements Disassembler.

bool DisassemblerArm::can_disassemble ( SgAsmGenericHeader  )  const [virtual]

See Disassembler::can_disassemble.

Implements Disassembler.

SgAsmInstruction * DisassemblerArm::disassembleOne ( const MemoryMap map,
rose_addr_t  start_va,
AddressSet successors = NULL 
) [virtual]

See Disassembler::disassembleOne.

Implements Disassembler.

virtual void DisassemblerArm::assembleOne ( SgAsmInstruction ,
SgUnsignedCharList  
) [inline, virtual]

See Disassembler::assembleOne.

SgAsmInstruction * DisassemblerArm::make_unknown_instruction ( const Exception &   )  [virtual]

See Disassembler::can_disassemble.

SgAsmArmInstruction * DisassemblerArm::makeInstructionWithoutOperands ( uint32_t  address,
const std::string &  mnemonic,
int  condPos,
ArmInstructionKind  kind,
ArmInstructionCondition  cond,
uint32_t  insn 
) [static, private]

SgAsmArmRegisterReferenceExpression * DisassemblerArm::makeRegister ( uint8_t  reg  )  const [private]

Creates a general-purpose register reference expression.

SgAsmArmRegisterReferenceExpression * DisassemblerArm::makePsrFields ( bool  useSPSR,
uint8_t  fields 
) const [private]

Create a reference to one of the program status registers.

If useSPSR is true then create a reference to the saved program status register, otherwise create a reference to the current program status register. The fields is a 4-bit mask indicating which individual fields of the register are selected.

The field bits are 0x01 => c control field mask bit 0x02 => x extension field mask bit 0x04 => s status field mask bit 0x08 => f flags field mask bit

SgAsmArmRegisterReferenceExpression * DisassemblerArm::makePsr ( bool  useSPSR  )  const [private]

SgAsmExpression * DisassemblerArm::makeRotatedImmediate (  )  const [private]

SgAsmExpression * DisassemblerArm::makeShifterField (  )  const [private]

Decode last 12 bits and bit 25 (I).

SgAsmArmInstruction * DisassemblerArm::makeDataProcInstruction ( uint8_t  opcode,
bool  s,
SgAsmExpression rn,
SgAsmExpression rd,
SgAsmExpression rhsOperand 
) [private]

SgAsmDoubleWordValueExpression * DisassemblerArm::makeSplit8bitOffset (  )  const [private]

SgAsmDoubleWordValueExpression * DisassemblerArm::makeBranchTarget (  )  const [private]

SgAsmExpression * DisassemblerArm::decodeMemoryAddress ( SgAsmExpression rn  )  const [private]

SgAsmArmInstruction * DisassemblerArm::decodeMediaInstruction (  )  const [private]

SgAsmArmInstruction * DisassemblerArm::decodeMultiplyInstruction (  )  const [private]

SgAsmArmInstruction * DisassemblerArm::decodeExtraLoadStores (  )  const [private]

SgAsmArmInstruction * DisassemblerArm::decodeMiscInstruction (  )  const [private]

SgAsmArmInstruction * DisassemblerArm::disassemble (  )  [private]

void DisassemblerArm::init (  )  [private]

Initialize instances of this class.

Called by constructor.

void DisassemblerArm::startInstruction ( rose_addr_t  start_va,
uint32_t  c 
) [inline, private]

Resets disassembler state to beginning of an instruction.


Member Data Documentation

bool DisassemblerArm::decodeUnconditionalInstructions [private]

set by init()

uint32_t DisassemblerArm::ip [private]

instruction pointer

uint32_t DisassemblerArm::insn [private]

4-byte instruction word

ArmInstructionCondition DisassemblerArm::cond [private]


The documentation for this class was generated from the following files:
Generated on Tue Jan 31 05:34:03 2012 for ROSE by  doxygen 1.4.7