class FSA
Public Class Methods
new(buffer_size = 0)
click to toggle source
# File lib/fsa.rb, line 6 def initialize(buffer_size = 0) @mem = {} @buffer_size = buffer_size end
s(addr, arg_index)
click to toggle source
# File lib/fsa.rb, line 71 def self.s(addr, arg_index) if addr.class <= Integer addr = addr % 4294967296 else raise TypeError, "Address must be Integer" end if arg_index.class <= Integer arg_index = arg_index % 4294967296 else raise TypeError, "Address must be Integer" end [addr].pack("L") + "%#{arg_index}$s" end
Public Instance Methods
[](addr)
click to toggle source
# File lib/fsa.rb, line 59 def [](addr) @mem[addr] end
[]=(addr, value)
click to toggle source
# File lib/fsa.rb, line 11 def []=(addr, value) if addr.class <= Integer addr = addr % 4294967296 else raise TypeError, "Address must be Integer" end value_class = value.class case when value_class == Array value.each do |v| addr = self.[]=(addr, v) end return addr when value_class == String value.bytes.each_with_index do |v, i| @mem[addr + i] = v end return addr + value.length else bit_length = value.bit_length case when bit_length <= 8 @mem[addr] = value return addr + 1 when bit_length <= 16 2.times do |i| @mem[addr + i] = (value.to_i >> (i * 8)) % 256 end return addr + 2 when bit_length <= 32 4.times do |i| @mem[addr + i] = (value.to_i >> (i * 8)) % 256 end return addr + 4 end end end
payload(arg_index, padding = 0, start_len = 0)
click to toggle source
# File lib/fsa.rb, line 63 def payload(arg_index, padding = 0, start_len = 0) raise TypeError, "Index must be Integer" unless arg_index.class <= Integer raise TypeError, "Padding must be Integer" unless padding.class <= Integer raise TypeError, "Start_len must be Integer" unless start_len.class <= Integer gen = PayloadGenerator.new(@mem, @buffer_size) gen.payload(arg_index, padding, start_len) end