[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
并不是传址,用OllyDbg调试可知,%cmdcmdline%是通过GetCommandLine函数来获取的:

GetCommandLine函数返回指向当前命令行缓冲区的指针,一般来说,程序是不应该修改这个缓冲区中的数据的,而是应该先拷贝一份再进行修改,

然而CMD在进行变量偏移或变量替换时,却直接修改了缓冲区中的数据,导致之后调用GetCommandLine时返回的都是修改后的值。

例如,在替换%cmdcmdline:~m,n%时,CMD大致是这么做的:
  1. wchar_t *argv = GetCommandLine();
  2. wcsncpy(argv, argv+m, n);
复制代码
所以在下次调用GetCommandLine时仍然是修改后的值。
1

评分人数

    • CrLf: 汇编万能技术 + 1

TOP

返回列表