gpt4 book ai didi

cmd - 为什么这个命令会使cmd崩溃?

转载 作者:行者123 更新时间:2023-12-01 22:33:20 28 4
gpt4 key购买 nike

我遇到了一个令人兴奋的weird script 使控制台崩溃:

set "h=/?" & call [if | for | rem] %%h%%

@jeb指出CALL doesn't execute the following special characters ,而是将它们转换为“ token ”(取决于版本):

  • &返回/
  • &&返回1
  • |返回2
  • ||返回0
  • /?返回<
  • @返回+
  • @()返回;
<小时/>
  • @if a==a :返回,
  • @for %a in () do :返回+
  • @rem :返回-

然而,即使它们有独特的解析器,它仍然不能解释为什么它们都会崩溃。所以我做了一些测试:

  • Remove call
    C:\>set "h=/?" & for %h%
%%h%% was unexpected at this time.
  • 将命令更改为其他命令。 (我尝试了所有其他内部命令,但没有任何效果)
  • 分隔两个命令:
    C:\>set "h=/?"
C:\>call for %%h%%
--FOR help message--
  • 添加@
    C:\>set "h=/?" & call for @%%h%%
CRASH!!!
  • ()包围脚本 block
    C:\>set "h=/?" & call for (%%h%%)
CRASH!!!

问题摘要:

  • call有什么作用玩吗?
  • 是什么导致解析器崩溃?

最佳答案

CALL 对于启动第二轮解析器是必需的。

但是有一个小错误(或更多),在该阶段无法执行任何特殊命令或使用 &| &&||、重定向或命令 block 。

原因似乎是解析器在内部构建了一个标记图,将特殊的东西替换为某种标记值。
但是使用CALL,执行者不再知道如何处理它们。

此代码尝试执行一个名为 3.bat 的批处理文件!!!
(名称可能不同,具体取决于Windows版本)

set "cmd=(a) & (b)"
call %%cmd%%

但在您的示例中,帮助函数是在不可执行 token 上触发的。
这似乎是刽子手完全失去理智的最终死亡触发因素。

关于cmd - 为什么这个命令会使cmd崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60348318/

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