【问题标题】:Good compilers for compiling perl/python/php scripts into linux executables?将 perl/python/php 脚本编译成 linux 可执行文件的好编译器?
【发布时间】:2010-07-17 06:11:18
【问题描述】:

我正在从事一个需要读取文本文件、从中提取数据然后生成报告(文本文件)的项目。因为有很多字符串解析,我决定用 Perl 或 Python 或 PHP 来做(优先顺序)。但我不想将源代码公开给我的客户。有没有好的编译器可以将 perl/python/php 脚本编译成 linux 可执行文件?

我不是在寻找一个 100% 完美的,但我在寻找一个至少 90% 完美的。完美,我的意思是编译器不需要编写具有有限语言功能子集的脚本。

【问题讨论】:

  • 你可以给客户端字节码编译版本的 Python 脚本吗? (.pyc 文件。)

标签: php python perl compiler-construction scripting-language


【解决方案1】:

对不起,根本不值得花时间在上面。对于您选择的任何语言(从您列出的语言中),对于某人选择提出的任何编译器/混淆器,我向您保证我可以从中获得可读的源代码(如果是 Perl,则在一小时内;如果是 Python,则更长或 PHP 只是因为我不太熟悉这些语言的实现,不是因为这些语言本质上更难)。

我认为您应该更好地了解您的目标是什么以及为什么要为您假设先验想要欺骗您的客户工作。如果您仍想继续使用这样的方案,请用 C 或 Fortran 编写——当然不是以“P”开头的任何东西。

【讨论】:

    【解决方案2】:

    确实存在一个用于 perl 的编译器,称为 perlcc。我对 perl 不熟悉,但它看起来像您正在寻找的东西。

    【讨论】:

    • Kinopiko:现在可以在 CPAN 上使用。
    • 否定。它以前包含在 perl 发行版中(这就是它出现在 CPAN 上的原因),但它被删除了,因为它从来都不是很有用。请注意,如果您搜索它,出现的 dist 是 perl-5.8.9?那是因为 5.10+ 不包含它。
    • hobbs:从 5.10 中删除后,Reini Urban 开始对其进行维护,使其与 5.10 和(几乎)5.12 兼容。
    • chorny 是对的;我编辑了答案中的链接以指向最新的 CPAN 版本。
    【解决方案3】:

    有 3 种加密 Perl 代码的选项:

    1. 使用 PAR 创建带有 PAR::Filter::Obfuscate 或 PAR::Filter::Crypto 的可执行文件

    2. 使用 Filter::Crypto::CryptFile(需要在目标操作系统上安装一些模块)

    3. 转成模块,加密成Module::Crypt。

    您也可以尝试 B::C - 它已从核心 Perl 发行版中删除,现在可在 CPAN 上使用。

    【讨论】:

    • 前两个依赖于用户不知道谷歌是什么(解密工具是公开的);第三个有点强硬,但它甚至没有试图抵御明显的 gdb 攻击:)
    • hobbs,链接,好吗?您不是在谈论 Filter::Crypto::Decrypt,是吗?阅读 Filter::Crypto 联机帮助页。它经历了一些痛苦,使恢复至少不愉快。
    • @tsee 不,我的意思是 Filter::Crypto::CryptFile / crypt_file (来自同一个发行版)。 “安全性”完全基于用户没有该模块,也没有在互联网上找到它。如果你找到它,你可以运行“crypt_file --crypt-mode=decrypt”,所以Filter::Crypto::Decrypt 的技巧并不重要。
    • hobbs: "crypt_file --crypt-mode=decrypt" 仅适用于开发者计算机。
    【解决方案4】:

    到目前为止,我们已经听说了带有一些混淆过滤器的 perlcc 和 PAR。这些可能会起作用。

    我与ActiveState's PerlApp which is part of their Perl Dev Kit. 相处得非常好

    捆绑您的代码并将其隐藏起来效果很好。您可以免费试用它,它附带一些不错的附加功能。贵还是便宜,取决于你的看法。对我来说,它很便宜。使用 PAR 或弄乱 perlcc 使代码隐藏工作和可靠的时间成本很容易低于软件包的价格。 YMMV。

    【讨论】:

    • perlapp +1,但您知道您可以为 PAR 做出贡献以使其变得更好,对吧?即使它只是“如何”样式文档。
    • PAR 很棒,我的本意不是要渣。真正的问题是,从哲学上讲,它有利于开放性——很容易提取打包的代码。就我个人的价值观而言,这太棒了。对于许多企业和业务人员来说,这是一个根本性的问题。他们要求对其资产进行可靠保护。他们还希望有人向他们保证他们的资产得到了适当的保护。向在 Perl 生态系统中投入大量工作的 ActiveState 支付 300 美元,对于让这些人开心并简化我的生活来说,这是一个很小的代价。
    【解决方案5】:

    对于 Python,您可以调用您的代码并将 *.pyc 文件提供给客户端。

    【讨论】:

    • 我需要编译成 linux 可执行文件,而不是 windows .exe 文件。而且我更喜欢perl,虽然如果没有perl的解决方案,python和php也是可以接受的。我用谷歌搜索了“Linux 的 perl 编译器”,但找不到任何解决方案。还是谢谢!
    • @Ethan:我不知道你从哪里知道这会创建一个 windows .exe 文件。 .pyc 文件包含由 Python VM 运行的 Python 字节码。它可以在任何安装了 Python 的平台上移植。
    • 抱歉。我回复得太快了。似乎 Quonux 在他发布后立即编辑了他的答案。它是“... py2exe ...”我更喜欢 perl,因为我不熟悉 python。但如果没有更好的解决方案,我会选择 .pyc。
    【解决方案6】:

    对于 linux,可执行文件是设置了 +x 的东西,因此不需要编译脚本。要隐藏您的源代码,您可以使用混淆器。这使您的源代码不可读。

    【讨论】:

      【解决方案7】:

      我从来没有使用过这个,所以我不知道设置起来有多容易,但是你可以使用 HipHop PHP 将你的 PHP 脚本转换成 C++ 代码并编译它们。 (假设你选择用 PHP 编写)

      http://developers.facebook.com/blog/post/358

      http://github.com/facebook/hiphop-php

      【讨论】:

        【解决方案8】:

        对于 Python,您可以使用 cx.freeze。我没有使用过这个,但我相信它基本上将 .pyc 捆绑到一个 zip 文件中并添加了一个可执行的前端。

        或者,您可以尝试使用Cython 编译您的 Python 代码。这会将修改后的 Python 语言版本转换为 C 代码,然后可以对其进行编译。这通常用于编写高性能扩展或与现有 C 库的接口,但最新版本也可用于制作完整的可执行文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-02
          相关资源
          最近更新 更多