我有一组似乎被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]
答案 0 :(得分:3)
这是编译为Ruby虚拟机的代码。它使用公开私有方法RubyVM::InstructionSequence::load
的{{3}}。
您无法从中提取原始源代码,但调试器应该可以正常工作。您可以使用iseq gem以类似人类可读的形式阅读已编译的代码。假设Marshal.load
返回RubyVM::InstructionSequence
个对象,则应该这样做。
require 'iseq';puts RubyVM::InstructionSequence.load(Marshal.load(File.read(__FILE__,nil,161))).disassemble