当前位置: 代码迷 >> 汇编语言 >> 自个儿实现GetTickCount
  详细解决方案

自个儿实现GetTickCount

热度:8098   发布时间:2013-02-26 00:00:00.0
自己实现GetTickCount
就是那个变速齿轮,有人利用这个加速,我们不希望他加速。
想自己实现一个GetTickCount的代码。
这个有人实现过么?
一定要XP,WIN7都兼容

在线等。。。。急急急急急
------最佳解决方案--------------------------------------------------------
可以使用RDTSC指令模拟,不过对于支持变频(节能或者turbo boost模式)的处理器就不准了。

------其他解决方案--------------------------------------------------------
没什么好办法,因为整个系统都可以被rootkit,你无法读到真实的tick间隔,

无论是GetTickCount还是直接从系统结构中读dword。

你要做的是不让他hook你的api,阻止他debug你的app
------其他解决方案--------------------------------------------------------
楼上的不错,不过考虑变态版的硬断点调试引擎,这个也能破鸟。
------其他解决方案--------------------------------------------------------
变速齿轮是通过修改计时器输出中断的频率实现变速的吗?如果是的话,那系统时间也会受影响,任务调度也会受影响,但是除了使用RDTSC指令它影响不了,读CMOS RTC的时间它也影响不了。

------其他解决方案--------------------------------------------------------
一定要兼容xp, win7 32 64位才行。。。
------其他解决方案--------------------------------------------------------
而且除非你在每个地方做内联,否则你还是要封装成一个函数,这样用hook就足以破鸟。
------其他解决方案--------------------------------------------------------
首先谢谢大家了

基本上变速齿轮不会修改计时器输出中断的频率,那样系统的时间和所有跟tick相关的都有影响,这个不是很好。
RDTSC 这个对变频CPU和多核的CPU都不是一个很好的选择。

变速齿轮网上找到的资料:
http://hi.baidu.com/clwtdjanuebeowd/item/4b6f8e1d3f204517e2f986b7
这先关资料很多,我也没有记录网址,就不贴了。

变速齿轮大部分都是hook那几个API。

GetTickCount的原理
http://blog.csdn.net/misterliwei/article/details/4351662
这里有些说明

我主要是想得到SharedUserData的偏移,得到对应结构的数据就可以计算出tick值了。
当时是因为SharedUserData这个偏移不知道怎么获得,网上看了一下,好像是固定的。然后我也不管了,就当作固定值使用
。。。。。
最后我就直接把GetTickCount的取SharedUserData并计算tick的汇编代码拿来用了。
虽然不能保证兼容,目前在xp,win7 32,64位都还是可用的。

再次在这里谢谢大家了。。结贴。。。
------其他解决方案--------------------------------------------------------
那你使用mmsystem的timeGetTime,看看是否能绕过它。
  相关解决方案