如何调试使用 perl PAR 打包器 (pp) 创建的可执行文件?

How do I debug an executable created using the perl PAR packager (pp)?

提问人:Louis Strous 提问时间:5/25/2020 最后编辑:Louis Strous 更新时间:5/26/2020 访问量:241

问:

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

附录 2020-05-26

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

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

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

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

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

perl 调试 pp-perl-par-packager

评论

0赞 Håkon Hægland 5/26/2020
不幸的是,似乎无法将选项传递给 .也许尝试在 GitHub 问题跟踪器上添加对此功能的请求?在任何情况下,您始终可以通过在代码中的选定点添加语句来尝试调试。-dperl.exeprint
0赞 rai-gaurav 5/26/2020
您期待的结果是什么?是一些“印刷”声明吗?看一看 - stackoverflow.com/questions/58817812/... .这是常见问题之一。你必须写 $|=1 在顶部。
0赞 Louis Strous 5/26/2020
@Håkon Hægland:我希望避免“按打印调试”。
0赞 Louis Strous 5/26/2020
@Maverick:不幸的是,你的建议没有区别。exe 和 pl 都产生输出,但 exe 似乎挂起,而 pl 继续产生输出并快速完成。

答: 暂无答案