Module: Rex::Arch::Sparc
- Defined in:
- lib/rex/arch/sparc.rb
Overview
Everything here is mostly stolen from vlad’s perl sparc stuff
Constant Summary collapse
- RegisterNumber =
Register number constants
{ 'g0' => 0, 'g1' => 1, 'g2' => 2, 'g3' => 3, 'g4' => 4, 'g5' => 5, 'g6' => 6, 'g7' => 7, 'o0' => 8, 'o1' => 9, 'o2' => 10, 'o3' => 11, 'o4' => 12, 'o5' => 13, 'o6' => 14, 'o7' => 15, 'l0' => 16, 'l1' => 17, 'l2' => 18, 'l3' => 19, 'l4' => 20, 'l5' => 21, 'l6' => 22, 'l7' => 23, 'i0' => 24, 'i1' => 25, 'i2' => 26, 'i3' => 27, 'i4' => 28, 'i5' => 29, 'i6' => 30, 'i7' => 31, 'sp' => 14, 'fp' => 30, }
Class Method Summary collapse
-
.ori(src, constant, dst) ⇒ Object
Encodes an OR instruction with the value ‘constant’ being OR’ed with the ‘src’ register into the ‘dst’ register.
-
.set(constant, dst) ⇒ Object
Puts ‘constant’ into the ‘dst’ register using as few instructions as possible by checking the size of the value.
-
.set_dword(constant, dst) ⇒ Object
Puts ‘constant’ into the ‘dst’ register using both sethi and ori (necessary to use both uncessarily in some cases with encoders).
-
.sethi(constant, dst) ⇒ Object
Encodes a SETHI instruction with the value ‘constant’ being put into ‘dst’ register.
Class Method Details
.ori(src, constant, dst) ⇒ Object
Encodes an OR instruction with the value ‘constant’ being OR’ed with the ‘src’ register into the ‘dst’ register
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/rex/arch/sparc.rb', line 41 def self.ori(src, constant, dst) [ (2 << 30) | (RegisterNumber[dst] << 25) | (2 << 19) | (RegisterNumber[src] << 14) | (1 << 13) | (constant & 0x1fff) ].pack('N') end |
.set(constant, dst) ⇒ Object
Puts ‘constant’ into the ‘dst’ register using as few instructions as possible by checking the size of the value. XXX: signedness support
56 57 58 59 60 61 62 63 64 |
# File 'lib/rex/arch/sparc.rb', line 56 def self.set(constant, dst) if (constant <= 4095 and constant >= 0) ori('g0', constant, dst) elsif (constant & 0x3ff != 0) set_dword(constant, dst) else sethi(constant, dst) end end |
.set_dword(constant, dst) ⇒ Object
Puts ‘constant’ into the ‘dst’ register using both sethi and ori (necessary to use both uncessarily in some cases with encoders)
69 70 71 |
# File 'lib/rex/arch/sparc.rb', line 69 def self.set_dword(constant, dst) sethi(constant, dst) + ori(dst, constant & 0x3ff, dst) end |
.sethi(constant, dst) ⇒ Object
Encodes a SETHI instruction with the value ‘constant’ being put into ‘dst’ register
30 31 32 33 34 35 36 |
# File 'lib/rex/arch/sparc.rb', line 30 def self.sethi(constant, dst) [ (RegisterNumber[dst] << 25) | (4 << 22) | (constant >> 10) ].pack('N') end |