metasm/cpu/arm64/main.rb in metasm-1.0.3 vs metasm/cpu/arm64/main.rb in metasm-1.0.4

- old
+ new

@@ -22,11 +22,11 @@ @sz = sz end Sym = @i_to_s[64].inject({}) { |h, (k, v)| h.update k => v.to_sym } - def symbolic + def symbolic(di=nil) if @sz == 64 Sym[@i] else Expression[Sym[@i], :&, 0xffffffff] end @@ -39,11 +39,11 @@ @reg = reg @mode = mode @shift = shift end - def symbolic + def symbolic(di=nil) sym = @reg.symbolic if shift != 0 case @mode when :lsl; Expression[sym, :<<, shift] when :lsr; Expression[sym, :>>, shift] @@ -57,29 +57,29 @@ class RegCC attr_accessor :cc def initialize(cc) @cc = cc end - def symbolic + def symbolic(di=nil) 0 end end class Memref attr_accessor :base, :index, :scale, :offset, :sz, :incr def initialize(base, index, scale, offset, sz, incr=nil) @base, @index, @scale, @offset, @sz, @incr = base, index, scale, offset, sz, incr end - def symbolic(orig=nil) + def symbolic(di=nil) o = Expression[@base.symbolic] if @index si = @index.symbolic si = Expression[@scale, :*, @index] if @scale != 1 o = Expression[o, :+, si] end o = Expression[o, :+, @offset] if @offset and @incr != :post - Indirection[o.reduce, @sz, orig] + Indirection[o.reduce, @sz, (di.address if di)] end end class RegList attr_accessor :list