Module: Rex::Arch

Defined in:
lib/rex/arch.rb,
lib/rex/arch/x86.rb,
lib/rex/arch/sparc.rb,
lib/rex/arch/zarch.rb

Overview

This module provides generalized methods for performing operations that are architecture specific. Furthermore, the modules contained within this module provide features that are specific to a given architecture.

Defined Under Namespace

Modules: Sparc, X86, ZARCH

Class Method Summary collapse

Class Method Details

.adjust_stack_pointer(arch, adjustment) ⇒ Object

This routine adjusts the stack pointer for a given architecture.



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rex/arch.rb', line 26

def self.adjust_stack_pointer(arch, adjustment)

  if ( arch.is_a?(::Array))
    arch = arch[0]
  end

  case arch
    when /x86/
      Rex::Arch::X86.adjust_reg(Rex::Arch::X86::ESP, adjustment)
    else
      nil
  end
end

.endian(arch) ⇒ Object

This routine reports the endianess of a given architecture



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/rex/arch.rb', line 76

def self.endian(arch)

  if ( arch.is_a?(::Array))
    arch = arch[0]
  end

  case arch
    when ARCH_X86
      return ENDIAN_LITTLE
    when ARCH_X86_64
      return ENDIAN_LITTLE
    when ARCH_MIPS # ambiguous
      return ENDIAN_BIG
    when ARCH_MIPSLE
      return ENDIAN_LITTLE
    when ARCH_MIPSBE
      return ENDIAN_BIG
    when ARCH_PPC  # ambiguous
      return ENDIAN_BIG
    when ARCH_SPARC
      return ENDIAN_BIG
    when ARCH_ARMLE
      return ENDIAN_LITTLE
    when ARCH_ARMBE
      return ENDIAN_BIG
    when ARCH_ZARCH
      return ENDIAN_BIG
  end

  return ENDIAN_LITTLE
end

.pack_addr(arch, addr) ⇒ Object

This route provides address packing for the specified arch



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/rex/arch.rb', line 43

def self.pack_addr(arch, addr)

  if ( arch.is_a?(::Array))
    arch = arch[0]
  end

  case arch
    when ARCH_X86
      [addr].pack('V')
    when ARCH_X86_64, ARCH_X64
      [addr].pack('Q<')
    when ARCH_MIPS # ambiguous
      [addr].pack('N')
    when ARCH_MIPSBE
      [addr].pack('N')
    when ARCH_MIPSLE
      [addr].pack('V')
    when ARCH_PPC  # ambiguous
      [addr].pack('N')
    when ARCH_SPARC
      [addr].pack('N')
    when ARCH_ARMLE
      [addr].pack('V')
    when ARCH_ARMBE
      [addr].pack('N')
    when ARCH_ZARCH
      [addr].pack('Q>')
  end
end