c - 是否可以 Hook 任何时间检索功能

标签 c windows time hook detours

我需要 Hook 任何试图检索系统时间的函数,以便为不同的应用程序生成“时间无关”的重播。某些事件(如伪随机数生成)取决于对 time() 的调用,但例如其他一些事件会调用 timeGetTime() 或 _time64()。

我需要 Hook (在 Windows 中)以捕获所有时间检索函数的最少函数集是什么。实际上有可能 Hook 这些功能吗?我试图在 time() 上完成它,但我的钩子(Hook)被忽略了。我已成功 Hook 到其他函数(如 rand),但我的 time() Hook 似乎被忽略了。

我正在使用 Detours,但我愿意使用任何其他 API 拦截工具。

最佳答案

对于游戏“speedhacks”,通常 Hook 的 3 个 API 是:

大多数这些函数返回自系统启动以来的时间或类似的东西。在你的钩子(Hook)里,你需要决定你想做什么。你可以:

  1. 始终返回静态时间
  2. 执行“减慢”或“加快”时间的常用方法:
    • 当你的 DLL 被注入(inject)时,需要一个初始时间(比如 init_time)
    • 每次目标调用您的时间函数时,您都可以调用真实函数的蹦床版本,从而获得 real_time
    • 您返回的值类似于 init_time + 0.5*(real_time-init_time),例如,这会使时间减半

关于c - 是否可以 Hook 任何时间检索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8090051/

相关文章:

c - 将 C 代码放入另一个文件中

c - 输入末尾的预期声明或语句 - 错误

c++ - 无法读取已保存的TensorFlow模型(无法查找标题条目)

c++ - 我可以在同一个进程中使用同一个 DLL 的两个不兼容版本吗?

MySQL查询日期范围

c - 如何在C中获取变量字符/字符串的输入?

c - 如何将 strtok 返回的指针中的数据存储到结构中而不丢失?

c++ - Qt 小部件在某些情况下无法重新绘制

python - 如何使用timeit模块

javascript - 在时间轴上使用 In Flot 中的标记