如何加快/减慢应用程序的“时间”

ove*_*ing 5 macos time

我想我没有在标题中说得对。我打算做的是挂钩一些系统api,就像每次都会发生时间中断(这是操作系统中的每个应用程序解释时间的方式),并使应用程序对该api的调用返回一些更大/更小的结果。所以从应用的角度来看,时间有加速或减速的趋势。我在 Windows 上发现了一些应用程序这样做,谁能给我一些关于如何在 Mac OS X 上实现它的指示?

Nik*_*uhe 3

你的问题必须分为两部分:

  1. 许多应用程序使用的时间值的来源是什么?
  2. 我如何拦截这个来源?

1) 的答案是(大致按重要性排序):

  • 系统时钟,由gettimeofday(依次由 NSDate、CFAbsoluteTime 等使用)读取
  • 音频卡的时钟。许多多媒体应用程序将视觉与音频同步,并使用音频作为时间的驱动源。
  • 视频时钟(计算垂直同步)
  • 处理器滴答计数器、中断等。
  • 只是程序计数器的进步(执行速度)。

编辑:

  • 马赫计时功能。谢谢@tc 指出这一点。

拦截gettimeofday相对容易:只需构建一个动态库,其中包含与原始函数具有相同名称和签名的函数gettimeofday(请参阅 参考资料#include <sys/time.h>)。该函数应该返回您当时想要的任何值。

要在应用程序中使用此特殊gettimeofday功能,请在终端上启动它,如下所示:

DYLD_INSERT_LIBRARIES=/path/to/myGetTimeOfDay.dylib /Applications/TextEdit.app/Contents/MacOS/TextEdit
Run Code Online (Sandbox Code Playgroud)

当然,您的 dylib 必须与应用程序架构相匹配。