Скомпилированный или запутанный 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))).disass‌​emble
Другие вопросы по тегам