我使用PAR 打包程序 (pp)foo.exe
从 Perl 脚本创建了一个 Windows 可执行文件foo.pl
。Perl 脚本运行良好 ( perl foo.pl <arguments>
)。可执行文件也可以运行 ( foo.exe <arguments>
),但不会产生与 Perl 脚本相同的结果。我想调试可执行文件运行的 perl 脚本,以找出差异来自何处。我怎么做?换句话说,我如何将 a 传递给执行时开始-d
的那个?perl.exe
foo.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,因此除了让其他位完成工作外,它不能做更多的事情。