Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2079963
  • 博文数量: 519
  • 博客积分: 10070
  • 博客等级: 上将
  • 技术积分: 3985
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-29 14:05
个人简介

只问耕耘

文章分类

全部博文(519)

文章存档

2016年(1)

2013年(5)

2011年(46)

2010年(220)

2009年(51)

2008年(39)

2007年(141)

2006年(16)

我的朋友

分类: WINDOWS

2007-08-29 09:37:29

写脚本遇到需要Sleep的地方借助于ping来实现,因为Windows的ping在发每个包之间都会调用KERNEL32!Sleep来挂起1秒钟。最有意思的是在给Sleep传递参数的时候还会扣掉通信往返所花的时间,所以非常精确。这部分反汇编出来是这样的:

010020fe b8e8030000         mov        eax,3E8h       ;1000ms
01002103 8b7608             mov        esi,dword ptr [esi+8] ;取出icmp包往返所花的时间
01002106 3bf0               cmp        esi,eax     ;ping 127.0.0.1当然不会超过1000ms
01002108 7309               jae        ping+0x2113 (01002113)
0100210a 2bc6               sub        eax,esi ;减去通信耗时
0100210c 50                 push       eax
0100210d ff1528100001       call       KERNEL32!Sleep

假设需要Sleep 10秒,就可以这样写:

SET SLEEP=ping 127.0.0.1 -n
%SLEEP% 11 > nul

阅读(3633) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-04-07 11:33:11

不错,很实用