class Metasm::Ia32::Argument
some ruby magic to declare classes with index -> name association (registers)
Attributes
i_to_s[RW]
for subclasses
s_to_i[RW]
for subclasses
Public Class Methods
new(v)
click to toggle source
# File metasm/cpu/ia32/main.rb, line 32 def initialize(v) raise Exception, "invalid #{self.class} #{v}" unless self.class.i_to_s[v] @val = v end
Private Class Methods
double_map(h)
click to toggle source
size -> (index -> name), name -> [index, size]
# File metasm/cpu/ia32/main.rb, line 46 def self.double_map(h) # { 32 => { 1 => 'ecx' } } @i_to_s = h # { 'ecx' => [1, 32] } @s_to_i = {} ; @i_to_s.each { |sz, hh| hh.each_with_index { |r, i| @s_to_i[r] = [i, sz] } } class_eval { attr_accessor :val, :sz def initialize(v, sz) raise Exception, "invalid #{self.class} #{sz}/#{v}" unless self.class.i_to_s[sz] and self.class.i_to_s[sz][v] @val = v @sz = sz end def ==(o) self.class == o.class and val == o.val and sz == o.sz end def self.from_str(s) raise "Bad #{name} #{s.inspect}" if not x = @s_to_i[s] new(*x) end } end
from_str(s)
click to toggle source
# File metasm/cpu/ia32/main.rb, line 41 def self.from_str(s) new(@s_to_i[s]) end
simple_map(a)
click to toggle source
index -> name, name -> index
# File metasm/cpu/ia32/main.rb, line 24 def self.simple_map(a) # { 1 => 'dr1' } @i_to_s = Hash[*a.flatten] # { 'dr1' => 1 } @s_to_i = @i_to_s.invert class_eval { attr_accessor :val def initialize(v) raise Exception, "invalid #{self.class} #{v}" unless self.class.i_to_s[v] @val = v end def ==(o) self.class == o.class and val == o.val end def self.from_str(s) new(@s_to_i[s]) end } end
Private Instance Methods
==(o)
click to toggle source
# File metasm/cpu/ia32/main.rb, line 37 def ==(o) self.class == o.class and val == o.val end