2

我使用PAR 打包程序 (pp)foo.exe从 Perl 脚本创建了一个 Windows 可执行文件foo.pl。Perl 脚本运行良好 ( perl foo.pl <arguments>)。可执行文件也可以运行 ( foo.exe <arguments>),但不会产生与 Perl 脚本相同的结果。我想调试可执行文件运行的 perl 脚本,以找出差异来自何处。我怎么做?换句话说,我如何将 a 传递给执行时开始-d的那个?perl.exefoo.exe

附录 2020-05-26

使用“Process Explorer”我找到了最终被执行的应用程序。这是%TEMP%\par-<ID1>\cache-<ID2>\foo.exe, where<ID1><ID2>是短和长的十六进制字符串。我原本希望找到...\perl.exe foo.pl,然后我可以将我-d的注入命令行。

在该文件夹中运行foo.exe会产生错误“无法在 @INC 中找到 PAR.pm”。

同一个文件夹还包含许多 *.pm、*.dll(包括 perl528.dll)和一些 *.pl 文件,其中 *.pl 和 *.pm 文件的名称是十六进制短字符串。其中一个 *.pl 文件(进程的 PAR_0 环境变量中提到的那个)结果与 具有相同的内容foo.pl,并带有以下两行前缀:

package main;
#line 1 "script/foo.pl"

如果我使用该 perl 脚本的名称perl -Iinc/lib <ID>.pl在该文件夹中运行<ID>.pl,那么它会产生所需的结果,即不会遇到 exe 遇到的问题。我希望该文件夹中的 perl528.dll 和其他 dll 是构成 Perl 的位,但不知道如何调用它们。该foo.exe文件夹中的文件大小只有 78 kB,因此除了让其他位完成工作外,它不能做更多的事情。

4

0 回答 0