module Xploit::Pack

Constants

PACK_HASH

Public Instance Methods

p16(*data) click to toggle source
# File lib/xploit/util.rb, line 26
def p16(*data)
  pack(data, :uword)
end
p32(*data) click to toggle source
# File lib/xploit/util.rb, line 34
def p32(*data)
  pack(data, :udword)
end
p64(*data) click to toggle source
# File lib/xploit/util.rb, line 42
def p64(*data)
  pack(data, :uqword)
end
p8(*data) click to toggle source
# File lib/xploit/util.rb, line 18
def p8(*data)
  pack(data, :ubyte)
end
pack(data, type) click to toggle source
# File lib/xploit/util.rb, line 82
def pack(data, type)
  data.flatten.pack("#{PACK_HASH[type][0]}*")
end
pi16(*data) click to toggle source
# File lib/xploit/util.rb, line 30
def pi16(*data)
  pack(data, :word)
end
pi32(*data) click to toggle source
# File lib/xploit/util.rb, line 38
def pi32(*data)
  pack(data, :dword)
end
pi64(*data) click to toggle source
# File lib/xploit/util.rb, line 46
def pi64(*data)
  pack(data, :qword)
end
pi8(*data) click to toggle source
# File lib/xploit/util.rb, line 22
def pi8(*data)
  pack(data, :byte)
end
u16(*data) click to toggle source
# File lib/xploit/util.rb, line 58
def u16(*data)
  unpack(data, :uword)
end
u32(*data) click to toggle source
# File lib/xploit/util.rb, line 66
def u32(*data)
  unpack(data, :udword)
end
u64(*data) click to toggle source
# File lib/xploit/util.rb, line 74
def u64(*data)
  unpack(data, :uqword)
end
u8(*data) click to toggle source
# File lib/xploit/util.rb, line 50
def u8(*data)
  unpack(data, :ubyte)
end
ui16(*data) click to toggle source
# File lib/xploit/util.rb, line 62
def ui16(*data)
  unpack(data, :word)
end
ui32(*data) click to toggle source
# File lib/xploit/util.rb, line 70
def ui32(*data)
  unpack(data, :dword)
end
ui64(*data) click to toggle source
# File lib/xploit/util.rb, line 78
def ui64(*data)
  unpack(data, :qword)
end
ui8(*data) click to toggle source
# File lib/xploit/util.rb, line 54
def ui8(*data)
  unpack(data, :byte)
end
unpack(data, type) click to toggle source
# File lib/xploit/util.rb, line 86
def unpack(data, type)
  
  tempchar, tempbyte = PACK_HASH[type]
  
  data = data.flatten.map do |d|
    unless (pad_size = d.bytesize % tempbyte) == 0
      pad_size = d.bytesize + tempbyte - (d.bytesize % tempbyte)
    end
    d.ljust(pad_size, "\x00").unpack("#{tempchar}*")
  end
  
  data.flatten
  
end