Perl PAR::Packer是如何工作的?

Perl PAR::Packer是如何工作的?,perl,exe,executable,Perl,Exe,Executable,我正在使用PAR::Packer,这个问题突然出现在我的脑海中。PAR::Packer在Perl中是如何工作的?它是否编译了Perl脚本到.exe,像g++一样编译C++源到.exe,或者它像python中的py2exe一样工作,将解释器和脚本打包成一个.exe?,使其完全清楚: 像这样的工具不会“编译”Perl脚本。它们将perl解释器与源文件和任何必需的模块捆绑在一起,形成一个大而胖的可执行文件。当它运行时,原始源被提取并提供给附带的perl 这项工作相当不错,但不会产生速度提升(相反…)

我正在使用PAR::Packer,这个问题突然出现在我的脑海中。PAR::Packer在Perl中是如何工作的?它是否编译了Perl脚本到.exe,像g++一样编译C++源到.exe,或者它像python中的py2exe一样工作,将解释器和脚本打包成一个.exe?

,使其完全清楚:

  • 像这样的工具不会“编译”Perl脚本。它们将perl解释器与源文件和任何必需的模块捆绑在一起,形成一个大而胖的可执行文件。当它运行时,原始源被提取并提供给附带的perl

    这项工作相当不错,但不会产生速度提升(相反…)。唯一的优点是,您可以将程序作为单个(尽管相当大)文件分发,而无需依赖项

  • 有一个非常实验性的工具叫做
    perlcc
    ,它能够将一些Perl程序翻译成C或Perl字节码序列化。正如它所说:

    以这种方式生成的代码不能保证工作。整个codegen套件(包括perlcc)应该被认为是非常实验性的。强烈反对用于生产目的

    这是因为Perl语言不支持静态编译。它需要能够在主执行阶段所在的同一会话中,在解析某些动态特性的过程中执行代码

还有其他商业工具,通常与PAR::Packer(创建fat可执行文件)属于同一类别

小结:如果您想要一个可执行文件,请使用PAR::Packer。如果您想要速度,可以内联一些C(或使用XS)。没有任何工具可以将所有Perl脚本编译成机器代码

我正在使用PAR::Packer,这个问题突然出现在我的脑海中。怎么 PAR::Packer在Perl中工作吗

它真的编译Perl吗 像g++一样的脚本到.exe编译C++源到.exe

没有pp,perl2exe没有。(尽管pp是免费的)

但看起来perlcc确实如此

或者它能起作用吗 类似于Python中的py2exe,它将解释器和脚本打包到 一个.exe

pp和perl2exe,是的

作为SeNeMeL.EXE的例子,它看起来像Par包装器或PARL2EXE中所做的事情。 它将解释器打包到exe中

您可以在7-zip中打开sendemail.exe!那里有一些文件夹,但实际上看不到它的实际文件

我想这是某种形式的自解压可执行文件,但是,它执行代码

您可以使用process monitor监视它,您可以看到

或者使用process explorer,查看它是否使用它创建的临时目录中的任何dll

它创建一个临时目录,例如


C:\Users\user\AppData\Local\Temp\pdk user
我见过一个perl EXE,它是以7-Zip格式打开的,所以可能是一种自解压Zip..或7z可以处理的自解压压缩格式。如果您在sysinternals的“进程监视器”中查看它,您会看到它生成写入临时目录的文件。如果打开temp目录
C:\Users\user\AppData\Local\temp\pdk user
,就会看到它的子目录perl58.dll,这就是它运行的perl Interrpter。
178c2b604baa8a7f1ebc80539f378bff.dll
1823e8f62785746fd29cf0b06c636600.dll
465d2954d90fe6225ea61b3907c91da8.dll
6145f78a34d5ced8200800f1455d578a <-- the directory with the perl58. dll
9c50b5816b0e35f047e41f5899721d46.dll
f4e2e0db77ed1e6572c2f490479cd815.dll
f72f556d99dfb6b0c3bb37f123e2ee96.dll
6145f78a34d5ced8200800f1455d578a\perl58.dll
...the perl2exe tool is not a way to hide your source code.
Now it's even come to the attention of the security community (reported in bugtraq, for example).

For details, see the report from net-security's page.

Please stop supporting perl2exe. Please use PAR for a complete installation package, or perlcc to simply compile the top-level program.

-- Randal L. Schwartz, Perl hacker