2

我有一组似乎被 Ruby 混淆或编译的文件。如果我对其中一个文件执行文件 [原文如此]:

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]

4

1 回答 1

3

这是编译到 Ruby 虚拟机的代码。它使用了公开私有方法的iseq gemRubyVM::InstructionSequence::load

您无法从中提取原始源代码,但调试器应该可以工作。您可以使用RubyVM::InstructionSequence#disassemble以类似于人类可读形式的方式读取编译后的代码。假设Marshal.load返回一个RubyVM::InstructionSequence对象,应该这样做。

require 'iseq';puts RubyVM::InstructionSequence.load(Marshal.load(File.read(__FILE__,nil,161))).disass‌​emble
于 2015-10-16T00:35:02.153 回答