我有一組似乎被Ruby模糊或編譯的文件。如果我做一個文件(原文如此)的文件之一:編譯或模糊處理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
這是什麼文件?我如何看到代碼或調試它?
注:紅寶石版本紅寶石2.1.3p242(2014年9月19日修訂47630)x86_64的Linux的]
這裏發生的事情是,它讀取包含紅寶石編組個字節的文件,以'Marshal.load'解組他們,然後將結果變成一個'InstructionSequence'對象或東西。 'RubyVM :: InstructionSequence'的2.2.3文檔沒有'.load'方法;你用什麼版本的Ruby來運行它?此外,請嘗試從評估變爲打印並查看出現的內容。即:'require'iseq';放置RubyVM :: InstructionSequence.load(Marshal.load(File.read(__ FILE __,nil,113)))' –
'RubyVM :: InstructionSequence :: load'是'iseq'的一部分寶石,這是在這段代碼的開始部分需要的。它尚未在YARV中正確使用,因爲YARV字節碼不安全,可能會導致VM崩潰(或更糟糕)。 YARV編譯器永遠不會產生不安全的字節碼,但很顯然,從其他地方加載的字節碼不能保證,因此字節碼加載是不允許的,直到有人花時間寫字節碼檢驗器。 –