module Rex::Arch
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.
Constants
- ARCH_ALL
- ARCH_ANY
Architecture constants
- ENDIAN_BIG
- ENDIAN_LITTLE
Endian constants
- IS_ENDIAN_BIG
- IS_ENDIAN_LITTLE
- VERSION
Public Class Methods
adjust_stack_pointer(arch, adjustment)
click to toggle source
This routine adjusts the stack pointer for a given architecture.
# File lib/rex/arch.rb, line 72 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)
click to toggle source
This routine reports the endianess of a given architecture
# File lib/rex/arch.rb, line 134 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_X64 return ENDIAN_LITTLE when ARCH_MIPS # ambiguous return ENDIAN_BIG when ARCH_MIPSLE return ENDIAN_LITTLE when ARCH_MIPSBE return ENDIAN_BIG when ARCH_MIPS64 return ENDIAN_BIG when ARCH_MIPS64LE return ENDIAN_LITTLE when ARCH_PPC # ambiguous return ENDIAN_BIG when ARCH_PPCE500V2 return ENDIAN_BIG when ARCH_PPC64LE return ENDIAN_LITTLE when ARCH_SPARC return ENDIAN_BIG when ARCH_SPARC64 return ENDIAN_BIG when ARCH_ARMLE return ENDIAN_LITTLE when ARCH_ARMBE return ENDIAN_BIG when ARCH_AARCH64 return ENDIAN_LITTLE when ARCH_ZARCH return ENDIAN_BIG end return ENDIAN_LITTLE end
pack_addr(arch, addr)
click to toggle source
This route provides address packing for the specified arch
# File lib/rex/arch.rb, line 89 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_MIPS64 [addr].pack('Q>') when ARCH_MIPS64LE [addr].pack('Q<') when ARCH_PPC # ambiguous [addr].pack('N') when ARCH_PPCE500V2 [addr].pack('N') when ARCH_PPC64LE [addr].pack('Q<') when ARCH_SPARC [addr].pack('N') when ARCH_SPARC64 [addr].pack('Q>') when ARCH_ARMLE [addr].pack('V') when ARCH_ARMBE [addr].pack('N') when ARCH_AARCH64 [addr].pack('Q<') when ARCH_ZARCH [addr].pack('Q>') end end