windows - Windows 批处理文件末尾的简单插入符 (^) 占用所有内存

标签 windows security batch-file cmd

这个简单的批处理文件以相对较短的顺序消耗了 Windows 7 (x64) 上的所有可用内存。这是怎么回事?可以采取哪些预防措施来预防它?

any-invalid-command-you-like-here ^

显示效果的必要先决条件:

  • 插入符号 ^ 是文件中的最后一个内容,脚本不会以换行符终止
  • 插入符前面至少有 2 个空格或字符,例如如果下面的点代表空格,则不会触发内存泄漏.^,而这个会..^(只是很慢)

在这个 Process Explorer 屏幕截图中,脚本已经运行了大约 30 秒,消耗了 2.9GB,并且仍在以稳定的速度攀升:

2.9GB memory consumed and still climbing

如果您打算对此进行试验,请确保您可以使用关闭窗口 [X] 控件或启动任务管理器或进程资源管理器并准备好 Ctrl-CCtrl-BreakAlt-F4 无效

看起来多个插入符号会导致内存使用量增加得更快。我第一次遇到这个问题时,1 或 2 分钟内没有足够的可用内存来执行简单的操作,例如 Alt-Tab 甚至三指敬礼 Ctrl-Alt-Del 无效。我不得不硬关闭机器。

最佳答案

想法

(根据我的理解)造成这种情况的原因是 cmd 解释器寻找要转义的字符,因为 ^ 是批量转义字符。在这种情况下,cmd 并没有正确识别文件 eof 的结尾,而是在寻找要转义的字符的同时不断循环和初始化一些东西。

在 Windows 8 Pro (64) 上使用 cc^^^ 转载(多个插入符号用于加速泄漏)。

试验

cc^ 无限循环并且泄漏非常缓慢。

cc^^ 因正常的无效命令错误而崩溃。

cc^^^ 无限循环和泄漏更快。

cc ^ 无限循环并且泄漏非常缓慢。

cc ^^ 因正常的无效命令错误而崩溃。

cc ^^^ 无限循环和泄漏更快。

cc"^ 因正常的无效命令错误而崩溃。

cc"^^ 因正常的无效命令错误而崩溃。

cc"^^^ 因正常的无效命令错误而崩溃。

注意事项

  • 仅当插入符号 ^ 按字面意义(引号外)使用时才会出现无限循环和泄漏。添加引用时,脚本会因标准无效命令错误而崩溃。
  • 当批处理文件被编码为 UTF-8ASCII 时,只有无限循环和泄漏。当 UTF-16 时,脚本因标准无效命令错误而崩溃。
  • 必须是奇数个插入符号,以免逃脱最后一个插入符号。

注意事项

  • 确保没有批处理脚本以插入符 ^ (0x5E) 或至少奇数个插入符结尾。
  • 或者用 UTF-16 编码。

关于windows - Windows 批处理文件末尾的简单插入符 (^) 占用所有内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466298/

相关文章:

javascript - 为什么我的 browserify require 路径在 Windows 中无法解析?

windows - 错误 : cannot find D:/gstreamer-sdk/0. 10/x86/lib:权限被拒绝:Qt5

security - 使用正确的文件名在浏览器中安全下载文件

perl - 相当于 Perl 中的 >nul 2>&1 (来自 Batch)?

windows - 批量使用ffmpeg时如何使用临时文件并替换输入?

windows - Delphi TOpenDialog/TSaveDialog 上次使用的路径

c# - 如何创建比其父进程生命周期更长的进程

security - 记录登录时间和 session 持续时间 - Java - Spring Security

security - apt 找不到公钥 6DB5542C356545CF

batch-file - 错误 "| was unexpected at this time."