gpt4 book ai didi

windows - 如何在 Windows 上使用 x86 perl 系统启动 x64 shell

转载 作者:可可西里 更新时间:2023-11-01 10:10:45 25 4
gpt4 key购买 nike

我使用 perl 调用 system start,我需要指定我希望我的程序绑定(bind)到的 cpu 编号。

当我使用 x86 perl 时,它会启动 x86 cmd 来运行启动命令。此 x86 start 不接受参数 0x100000000,因为它超过 32 位长度。如果我使用 x64 perl,整个过程都很好,因为 x64 perl 启动 x64 cmd,它接受 0x100000000

那么在使用 32 位 perl 时如何启动 x64 cmd 来运行 start 命令?

详细信息:

首先,我验证了 32 位 cmd shell 不接受 start/affinity 100000000 而 64 位 cmd shell 接受。在 32 位 cmd shell 中,它抛出错误 The system cannot accept the START command parameter 100000000.

然后我分别尝试了 x64 perl 和 x86 perl,发现 x86 perl 也会得到同样的错误。请参阅下面的命令。

path/to/x64/perl.exe -e "system qq{start /b /wait /affinity 100000000 my.exe}"
path/to/x86/perl.exe -e "system qq{start /b /wait /affinity 100000000 my.exe}"

有什么方法可以使用 x86 perl 启动 x64 shell 来执行启动吗?

最佳答案

File System RedirectorWOW64 模拟器将 %SystemRoot%\system32 的文件系统路径重定向到 %SystemRoot%\SysWOW64 其中 %SystemRoot% 是系统环境变量它指的是 Windows 目录,例如C:\Windows

所以通常情况下,WOW64进程(运行在64位windows上的32位进程)是无法访问system32目录的。

但是,从 windows Vista 开始,32 位进程可以通过将 system32 替换为特殊别名来引用和访问 sysetm32 目录中的文件和文件夹 SysNative 在文件路径中。

要从 x86 perl 实例启动 x64 cmd shell,您需要通过 %SystemRoot%\SysNative\cmd.exe 显式指定 64 位 cmd.exe 的路径

Path_to_x86_perl\perl -e "system $ENV{SystemRoot}.'\sysnative\cmd.exe /x /d /c start /b /wait /affinity 100000000 my.exe'"

但是请注意,这仅适用于 WOW64 进程,因此它不能用作 Windows 下 x86 和 x64 版本的 perl 的单一单行解决方案。但是,您可以在程序中使用以下内容:

use Config qw( %Config );
my $system = $ENV{SystemRoot} . '\\' . ( $Config{ptrsize} == 4 ? 'SysNative' : 'System32' );

关于windows - 如何在 Windows 上使用 x86 perl 系统启动 x64 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57212964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com