Ruby混淆器

有没有一个ruby混淆器或“编译器”?

有几个选项,比如RubyScript2ExeAllInOneRuby 。 然而, 所有解释型语言的混淆器往往有一个严重的缺陷:他们通常不了解更复杂的元编程技术。

也就是说,他们不一定会告诉像foo.send(:bar, ...)是在一个完全不同的库中的bar方法上的调用,或者eval("require %w{abc def ghi}")意味着需要三个不同的库。 这些都是微不足道的例子 – 当您将method_missing及其同stream合并时,情况会变得更加复杂。

当混淆器遇到这种types的代码时,它会尽职尽责地编译相应的指令,但不知道是否还包含某些库或其他代码。 这可能会导致严重的问题,因为dynamicinclude d或require d在运行时不会在静态链接的可执行文件中可用。

不幸的是,许多gem和图书馆使用复杂的元编程技术。 如果您尝试使用混淆并期望程序具有相同的行为,则可能会在此处遇到麻烦。 更糟糕的是,因为有那么多的间接程度,如果在混淆版本中出现一个错误,你可能永远不知道究竟发生了什么或者如何重现它。

根据你所要做的事情,有一个Gem可以让你从Ruby脚本创build一个C扩展,然后在Ruby应用程序中作为一个需求使用。 它叫ruby2cext。 它会把你所有的代码混淆到C中,你可以在单独的Ruby脚本中使用.so,它的function就像一个普通的Ruby脚本。