Module: Rex::Arch

Defined in:
lib/rex/arch.rb,
lib/rex/arch/x86.rb,
lib/rex/arch/sparc.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

Class Method Summary collapse

Class Method Details

.adjust_stack_pointer(arch, adjustment) ⇒ Object

This routine adjusts the stack pointer for a given architecture.



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

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



73
74
75
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
# File 'lib/rex/arch.rb', line 73

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
	end

	return ENDIAN_LITTLE
end

.pack_addr(arch, addr) ⇒ Object

This route provides address packing for the specified arch



42
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
# File 'lib/rex/arch.rb', line 42

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
			[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')
	end
end