diff --git a/misc/ujit_disasm.rb b/misc/ujit_disasm.rb new file mode 100644 index 0000000000..0e54f952c9 --- /dev/null +++ b/misc/ujit_disasm.rb @@ -0,0 +1,34 @@ +begin +require "crabstone" +require "stringio" + +module UJIT + def self.disasm(iseq) + blocks = UJIT.blocks_for(iseq) + return if blocks.empty? + + io = StringIO.new + + cs = Crabstone::Disassembler.new(Crabstone::ARCH_X86, Crabstone::MODE_64) + + io.puts iseq.disasm + + blocks.sort_by(&:address).reverse.each do |block| + io.puts "== ISEQ RANGE: #{block.iseq_start_index} -> #{block.iseq_end_index} ".ljust(80, "=") + cs.disasm(block.code, 0).each do |i| + io.printf( + "\t0x%
x:\t%