当前位置:ZYG首页 > 变速齿轮有什么用 > 《变速齿轮》的技术原理是什么,为什么可以改变操作系统的速度?

《变速齿轮》的技术原理是什么,为什么可以改变操作系统的速度?

ZYG网logo图标
创始人 ZYG
2020-04-05 阅读 变速齿轮有什么用

引用原作者王荣的解释:

Q:开发变速齿轮的起因是什么?
A:开发变速齿轮主要是因为自己打游戏的水平比较差,希望能有一个完美的游戏修改工具,于是就决定自己编写一个。开发过程中我认为修改游戏速度是游戏修改工具的重要功能之一,但是我却始终没看到基于Windows系统的变速工具,因此我就先开发出了变速功能,既现在的变速齿轮。而最初想开发的游戏修改工具则最终没有编写完成。

Q:能向广大读者介绍一下“变速齿轮”的工作原理吗?
A:当然可以。当游戏运行在不同配置的电脑上时,如果你想得到游戏相同的运行速度(如赛车每秒行驶50米),那么就需要使用某种方法来获取时间信息,然后根据这个时间来调整游戏运行速度。只要让游戏得到的时间比真实时间更快或更慢,那么游戏运行速度也随之能得到增减。 由于Windows下的应用程序不能像DOS那样直接访问硬件寄存器,因此得到时间的唯一方法就是通过调用Windows应用程序编程接口(API)来实现。只要能修改这些API,那么所有Windows应用程序的速度都可以实现加快或减慢,而且这种方式对游戏的兼容性也非常好。

Q:开发变速齿轮过程中是否遇到过技术难题?
A:开发过程中最大难题就是如何去修改这些API。修改API时,我采取的是修改内存中指令的方法,但由于Windows系统对内存进行了保护,无法轻易对内存中的指令进行修改。当时我曾试图编写一个设备驱动程序来实现,但由于没到找到设备驱动程序开发工具包,只能作罢。实现修改API的另一个问题是,由于Windows系统是多线程的,如果API的截取进行到一半时,另一个线程再次调用这个API,那么就会使Windows崩溃(死机)。在没有任何技术资料可以参考的情况下,我通过使用SoftICE(一款著名的内核级调试工具)一点点摸索,最终解决了问题。最后使用的方法是强行禁止中断。由于线程的切换是在中断中进行,因此禁止了中断也就禁止了线程切换。

来源 变速齿轮作者王荣前辈_代码小卒_新浪博客

编辑于 2018-12-30

首先,变速齿轮改变的是应用程序(一般是游戏)的速度,而不是操作系统的。以下回答出于对这个前提的假设和理解。

一些游戏中的时间不使用系统提供的实际时间,而是采用与程序所占用的 CPU 时间相关的某个逻辑时间,比如事件循环每 n 次算一个单位时间,或者画面重画一次算一个单位时间。这一计算时间的方式多见于早期的电子游戏,不使用系统提供的时间的理由多为 API 支持不完善,不能获取足够精确的时间,而在多媒体应用中,获取高精度时间有时是很必要的。现在这一情况已经大不相同,参考:C++ high precision time measurement in Windows

所以变速齿轮的实现方式应该有两种(只是猜测,我没有写过),一是和应用程序抢 CPU,让应用程序跑得慢,二是 hook 系统 API,让应用程序感受到的时间变慢。

对于第一种情况,举例来说,假设本来应用程序一秒钟可以循环 10000 次,现在由于使用了变速齿轮占用了 CPU,应用程序一秒钟只能循环 5000 次,它感受到的时间就变慢了一半。

对于第二种情况,应用程序在调用获取时间的 API 时,由于这个 API 被变速齿轮 hook 住了,变速齿轮可以任意修改返回的时间,比如实际经过了 2 分钟,但只返回 1 分钟,应用程序得到的就是 1 分钟的结果,就会认为时间只经过了 1 分钟。
发布于 2014-02-09

我记得在变速齿轮的user guide里面提到是变更电脑主板晶振的频率,来加速运行。所以会出现电脑时间也一同加速的情况。这款软件确实是一款神器。怀念。

发布于 2017-11-02

咨询建站推广添加微信号:zyh20150225
© 著作权归ZYG网所有