Board logo

标题: [特效代码] 批处理中的转义符为何把内存在十秒之内会用得精光 [打印本页]

作者: x9tiancmd    时间: 2009-4-30 20:08     标题: 批处理中的转义符为何把内存在十秒之内会用得精光

@echo off
>>a.txt echo ^%^%

运行上面这段代码你会发现你电脑的内存十秒之内会用得精光,  天呀太恐怖了! 哪个能解释这是为什么  这应当是批处理最简短的一个病毒写法吧晕晕

再试试
echo ^%^%>>a.txt
却没有出现这个现像


还有关于为什么批处理在DOS窗口 "%i"   要写成"%%i"的原因:

“ % ”    要写入文本不能用“^ ”  转义     要用“%”来转义  如:
echo.%%i>a.bat   
打开a.bat   
你会发现   只一个%i    这因当是批处理文本为什么%i 要写成%%i的真正原因吧

[ 本帖最后由 x9tiancmd 于 2009-4-30 20:21 编辑 ]
作者: x9tiancmd    时间: 2009-4-30 20:23

>>a.txt echo ^%^%
谁能解释下这 个运行为什么会出现内存一下耗光的情况  呀   

知道的说下嘛
作者: yslyxqysl    时间: 2009-4-30 20:31

是不是把磁盘剩下的文件全都写进去?
猜想:转义结尾符

echo ^%^%>>a.txt
却没有出现这个现像
因为只转义了一个>符号
作者: pusofalse    时间: 2009-4-30 20:43

对NULL字符转义的结果吧,你确定echo ^%^%后面无任何内容了吗? 任何,包括回车或者其他空白字符。
作者: x9tiancmd    时间: 2009-4-30 20:43

我到虚拟机里面用空白虚拟磁盘试下   

等下有了结果再来回复下   嘿嘿
作者: x9tiancmd    时间: 2009-4-30 20:53

虚拟机试了没是 但是我这就是运行就内存十秒内用个精光, 真是怪事来了

我就复制上面的代码保存为BAT(附件里有) 运行的,   不信你们自忆试下嘛,  真的太恐怖了

[ 本帖最后由 x9tiancmd 于 2009-4-30 20:57 编辑 ]
作者: 随风    时间: 2009-4-30 21:55

测试了下,确实是的,好像是因为echo后没有换行,至于为什么这样就不知道了,好像形成了个死循环。难道是因为转义符号没东西转?
作者: x9tiancmd    时间: 2009-4-30 21:59

因当不是死循环,   你多加入一条命令 (红色的)
@echo off
>a.txt  echo.^%
>>a.txt  echo.^%^%

你运行这个,  它根本就没有创建a.bat  出来呀,,   你说这不是怪了,死循环最少也会创建“a.bat”吧
作者: everest79    时间: 2009-5-1 00:49

原帖由 随风 于 2009-4-30 21:55 发表
测试了下,确实是的,好像是因为echo后没有换行,至于为什么这样就不知道了,好像形成了个死循环。难道是因为转义符号没东西转?


我猜是因为^后边没回车,执行时转义破坏了textfile的eof标志,因为标志的最后一个ascii码是0x13
而使用追加符又跳过了行输出长度检查,所以造成批处理一直往缓存空字符
作者: wxcute    时间: 2009-5-1 11:23

我这儿内存倒是不会被用光,只是严重影响了运行速度。

echo ^%^% 先把 ^ 当作变量解释,变量 ^ 未定义,因此等同于 echo ^
>>a.txt echo ^%^% 等同于 >>a.txt echo ^
作者: x9tiancmd    时间: 2009-5-3 21:22

嗯  楼上的说法好像蛮有理的,   呵呵,,  学习了谢谢


    难道说,  这echo     是:  先写入内存, 再生成 a.bat ?   然后再把内存的数据写入a.bat  ??

我用个十几M的文件没这个现像呀,,,     好像是:   先生成a.bat    再把数据 慢慢的写入a.bat  看到窗口里面的  a.bat 文件变化呀 ??



还是有点?    我想也只能是楼上的么解释了@

[ 本帖最后由 x9tiancmd 于 2009-5-3 21:28 编辑 ]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2