Class: Unarm::ArmIns

Inherits:
Ins
  • Object
show all
Defined in:
lib/unarm/unarm.rb

Constant Summary collapse

@@size =
4

Constants included from UnarmBind

UnarmBind::ARGUMENT_KIND, UnarmBind::ARGUMENT_KIND_MAP, UnarmBind::Arg, UnarmBind::Args, UnarmBind::CONDITION, UnarmBind::CONDITION_MAP, UnarmBind::CO_REG, UnarmBind::CO_REG_MAP, UnarmBind::ENDIAN, UnarmBind::ENDIAN_MAP, UnarmBind::OPCODE, UnarmBind::OPCODE_MNEMONIC, UnarmBind::REGISTER, UnarmBind::REGISTER_MAP, UnarmBind::SHIFT, UnarmBind::SHIFT_MAP, UnarmBind::STATUS_REG, UnarmBind::STATUS_REG_MAP

Instance Attribute Summary

Attributes inherited from Ins

#address, #arguments, #raw

Instance Method Summary collapse

Methods inherited from Ins

#branch_destination, #branch_to_register?, #eql?, #function_end?, #has_imod?, #is_conditional?, #is_data_operation?, #is_illegal?, #is_unconditional?, #mnemonic, #opcode, #sets_flags?, #size, #string, #target_address

Constructor Details

#initialize(ins, addr = 0, loc = Unarm.cpu.to_s) ⇒ ArmIns

Returns a new instance of ArmIns.



706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
# File 'lib/unarm/unarm.rb', line 706

def initialize(ins, addr = 0, loc = Unarm.cpu.to_s)
  @raw = ins
  @address = addr ? addr : nil
  @ptr = FFI::AutoPointer.new(send(:"#{Unarm.cpu.to_s}_new_arm_ins", ins), method(:free_arm_ins))

  if Unarm.symbols
    syms = Unarm.get_raw_syms(loc)
    @str = CStr.new(send(:"#{Unarm.cpu.to_s}_arm_ins_to_str_with_syms", @ptr, syms.ptr, syms.count, addr, 0))
  else
    @str = CStr.new(send(:"#{Unarm.cpu.to_s}_arm_ins_to_str", @ptr))
  end

  @arguments = Arguments.new(send(:"#{Unarm.cpu.to_s}_arm_ins_get_args", @ptr))
  @opcode_id = send(:"#{Unarm.cpu.to_s}_arm_ins_get_opcode_id", @ptr)

  @conditional = arm_ins_is_conditional(@ptr)
  @data_op     = arm_ins_is_data_operation(@ptr)
  @sets_flags  = arm_ins_updates_condition_flags(@ptr)
end

Instance Method Details

#is_compare_operation?Boolean Also known as: is_compare_op?

does opcode compare a register with another value?

Returns:

  • (Boolean)


726
727
728
# File 'lib/unarm/unarm.rb', line 726

def is_compare_operation? # does opcode compare a register with another value?

  [:cmn, :cmp, :teq, :tst].include? opcode
end