昨日の続き。隠蔽といってもアセンブラレベルでは見れてしまうので頑張れば解析可能なわけだが。Rubyのアセンブラは高レベルなので読みやすいというのが難点か。 ともあれ、このようなファイルを作る。名前はiseqloader.rbとしよう。 require 'fiddle' class RubyVM class InstructionSequence addr = Fiddle.dlopen(nil)['rb_iseq_load'] fn = Fiddle::Function.new( addr, [Fiddle::TYPE_VOIDP] * 3, Fiddle::TYPE_VOIDP) define_singleton_method(:load) do |dat, par=nil, opt=nil| fn.call(Fiddle.dlwrap(dat), par, opt).to_value