Скомпилированный или запутанный Ruby
У меня есть набор файлов, которые, похоже, запутаны или скомпилированы Ruby. Если я сделаю файл [sic] для одного из файлов:
a /usr/bin/env ruby script text executable
все они начинаются с этого:
#!/usr/bin/env ruby
require 'iseq';RubyVM::InstructionSequence.load(Marshal.load(File.read(__FILE__,nil,113))).eval
Что это за файл? Как я могу увидеть код или отладить его?
ПРИМЕЧАНИЕ. Ruby-версия ruby 2.1.3p242 (2014-09-19, редакция 47630) [x86_64-linux]
1 ответ
Решение
Это код, скомпилированный в виртуальную машину Ruby. Он использует гем iseq, который предоставляет приватный метод RubyVM::InstructionSequence::load
,
Вы не можете извлечь исходный код из него, но отладчик должен работать. Вы можете прочитать скомпилированный код в форме, удобной для чтения с помощью RubyVM:: InstructionSequence # disassemble. Если предположить, Marshal.load
возвращает RubyVM::InstructionSequence
объект, это должно сделать это.
require 'iseq';puts RubyVM::InstructionSequence.load(Marshal.load(File.read(__FILE__,nil,161))).disassemble