mirror of
https://github.com/rapid7/metasploit-framework
synced 2024-11-05 14:57:30 +01:00
110 lines
1.8 KiB
Ruby
110 lines
1.8 KiB
Ruby
# -*- coding: binary -*-
|
|
require 'postgres_msf'
|
|
require 'postgres/byteorder'
|
|
|
|
# Namespace for Metasploit branch.
|
|
module Msf
|
|
module Db
|
|
|
|
module BinaryWriterMixin
|
|
|
|
# == 8 bit
|
|
|
|
# no byteorder for 8 bit!
|
|
|
|
def write_word8(val)
|
|
pw(val, 'C')
|
|
end
|
|
|
|
def write_int8(val)
|
|
pw(val, 'c')
|
|
end
|
|
|
|
alias write_byte write_word8
|
|
|
|
# == 16 bit
|
|
|
|
# === Unsigned
|
|
|
|
def write_word16_native(val)
|
|
pw(val, 'S')
|
|
end
|
|
|
|
def write_word16_little(val)
|
|
str = [val].pack('S')
|
|
str.reverse! if ByteOrder.network? # swap bytes as native=network (and we want little)
|
|
write(str)
|
|
end
|
|
|
|
def write_word16_network(val)
|
|
str = [val].pack('S')
|
|
str.reverse! if ByteOrder.little? # swap bytes as native=little (and we want network)
|
|
write(str)
|
|
end
|
|
|
|
# === Signed
|
|
|
|
def write_int16_native(val)
|
|
pw(val, 's')
|
|
end
|
|
|
|
def write_int16_little(val)
|
|
pw(val, 'v')
|
|
end
|
|
|
|
def write_int16_network(val)
|
|
pw(val, 'n')
|
|
end
|
|
|
|
# == 32 bit
|
|
|
|
# === Unsigned
|
|
|
|
def write_word32_native(val)
|
|
pw(val, 'L')
|
|
end
|
|
|
|
def write_word32_little(val)
|
|
str = [val].pack('L')
|
|
str.reverse! if ByteOrder.network? # swap bytes as native=network (and we want little)
|
|
write(str)
|
|
end
|
|
|
|
def write_word32_network(val)
|
|
str = [val].pack('L')
|
|
str.reverse! if ByteOrder.little? # swap bytes as native=little (and we want network)
|
|
write(str)
|
|
end
|
|
|
|
# === Signed
|
|
|
|
def write_int32_native(val)
|
|
pw(val, 'l')
|
|
end
|
|
|
|
def write_int32_little(val)
|
|
pw(val, 'V')
|
|
end
|
|
|
|
def write_int32_network(val)
|
|
pw(val, 'N')
|
|
end
|
|
|
|
# add some short-cut functions
|
|
%w(word16 int16 word32 int32).each do |typ|
|
|
alias_method "write_#{typ}_big", "write_#{typ}_network"
|
|
end
|
|
|
|
# == Other methods
|
|
|
|
private
|
|
|
|
# shortcut for pack and write
|
|
def pw(val, template)
|
|
write([val].pack(template))
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|