我正在使用 PAR::Packer,这个问题突然出现在我的脑海中。如何
PAR::Packer 在 Perl 中工作吗?
它真的编译 Perl
像 g++ 这样的 .exe 脚本将 C++ 源代码编译为 .exe
没有 pp 和 perl2exe 没有。 (虽然 pp 是免费的)。
但它看起来像 perlcc 那样
或者它是否有效
就像 Python 中的 py2exe 一样,它将解释器和脚本打包到
一个.exe?
pp 和 perl2exe,是的
例如,sendemail.exe 看起来像是在 PAR Packer 或 Perl2exe 中完成的
它将解释器打包到 exe 中。
您可以在 7-zip 中打开 sendemail.exe!那里有一些文件夹,但看不到实际文件。
我想这是某种形式的自解压可执行文件,但是,它执行代码。
你可以用进程监视器来监控它,你看。
或者,使用进程资源管理器,看看它是否使用了它创建的临时目录中的任何 dll..
它会创建一个临时目录,例如
C:\Users\user\AppData\Local\Temp\pdk-user
或
C:\Documents and Settings\user\Local Settings\Temp\pdk-user
它创建的临时目录包含一堆奇怪的命名DLL和一个名为perl58.dll的DLL,这无疑是perl解释器
我确定有一次我看到它有一个正常名称的 dll。 SSLEAY32.DLL 有趣的是,当我运行 pl 文件时,它使用了我的 c:\perl64 目录中具有相似名称的 dll。所以EXE看起来真的有点像黑客。直接运行pl文件更可靠。
该目录中的DIR /s/b,显示-
178c2b604baa8a7f1ebc80539f378bff.dll
1823e8f62785746fd29cf0b06c636600.dll
465d2954d90fe6225ea61b3907c91da8.dll
6145f78a34d5ced8200800f1455d578a <-- the directory with the perl58. dll
9c50b5816b0e35f047e41f5899721d46.dll
f4e2e0db77ed1e6572c2f490479cd815.dll
f72f556d99dfb6b0c3bb37f123e2ee96.dll
6145f78a34d5ced8200800f1455d578a\perl58.dll
没有显示除 perl58.dll 以外的正常命名的 DLL(尽管我过去曾在那里看到过正常的 DLL)。
如果你查看进程资源管理器,你会看到它使用 perl58.dll 和其他正常命名的 dll
如果你查看 PAR 网站,一个页面描述了 perl2exe
Perl2Exe 是可以构建的商业命令行应用程序
来自 perl 源的独立可执行文件。它通过创建一个
可执行文件包含
一个独立的 perl 解释器(能够理解 perl 5.8.x)
您的 perl 脚本和您的 perl 引用的所有 perl 模块
脚本。
pp - PAR Packager 提供相同的功能,但免费。
如果你看这里
http://www.perlmonks.org/?node_id=237943
...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
所以,PP 和 perl2exe 将解释器结合到了 EXE 中,当它在 7zip 中打开时,您会发现 EXE 有一些有趣的非典型性!
perlcc 编译正确。
它似乎已经有一段时间没有维护了 http://www.perlmonks.org/?node_id=654568 ,人们说它有问题,但最近在 2014 年 6 月完成了一些工作 http://www.yapcna.org/yn2014/talk/5603 它比解释的 perl 获得更好的性能。 (与打包解释器的 EXE 不同,后者比正常运行 perl 脚本要慢)。