首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将程序挂接到正在运行的游戏上,更新每一帧

将程序挂接到正在运行的游戏上,更新每一帧
EN

Stack Overflow用户
提问于 2018-07-26 04:56:54
回答 1查看 602关注 0票数 2

我正在尝试为一个使用虚幻引擎4的游戏编写一个自定义的AI API。虽然我可以使用Python很好地读取进程内存,但我遇到了一个更大的问题-只有在相关的时候才读取进程内存,只有在可能的情况下才发送输入-因此只渲染了一次帧。如果我想发送输入,它们需要以帧的形式发送(游戏是格斗游戏)。

因此,我需要更新我自己的AI API与相同的帧率作为游戏本身。我的第一个想法是查看进程内存,找出每一帧是否有更新的值-虽然一直都有更新的值,但它们似乎在8帧发生后在内存中更新。不幸的是,8帧不允许AI正确地执行输入,因为更新循环更新得不够快。

我将更多地查看内存,但我想知道是否有可能将一个程序附加到正在运行的进程中,以查看窗口本身-如果它已经更新(一些新的东西已经被渲染),更新AI本身的游戏状态。有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-07-28 21:45:38

我们谈论的是一个建立在虚幻引擎上的游戏,你不可能发现每一帧都有一个地址被改变。

这让我担心您在哪里/如何查找每个帧中正在更改的地址。也许可以试试CheatEngine之类的内存扫描工具,以防万一。

每一帧应该有几个地址在改变。我脑海中浮现的是:

使用此函数时引用的地址之一:UGameplayStatics::GetRealTimeSeconds(GetWorld());

如果你真的找不到改变每一帧的变量,那么我提供了一种解决方案,通过执行以下操作来挂钩到每一帧在进程中调用的函数:

这无论如何都不是一个完整的解决方案,因为它涵盖了一个主观上很复杂的主题,您可能需要从其他来源了解它。

笔记

如果这个游戏使用了反作弊,你可能会因为这种行为而被禁止,我建议你在尝试之前做一下研究。对于您因使用以下建议而产生的任何问题或损失,我不承担任何责任。

备份选项:

  1. 使用CheatEngine打开目标进程。
  2. 查找每帧都被调用的函数(如下所示):
    • 查找您怀疑每帧都被读取的变量(不必更改)
    • 将其添加到您的地址中,然后从地址列表中选择条目并选择:找出什么访问此计数并在提示符后附加一个调试器到计数,它是否运行得非常快?太棒了!这可能是在每帧读取
    • 停止工具并单击列表中具有高计数
    • 的指令条目单击显示反汇编程序按钮
    • 您现在正在查看每帧访问您的地址的函数的解释操作码
    • 只需右键单击突出显示的行,然后单击选择当前函数
    • 我会亲自切换此行上的断点(F5),游戏在边上可见,以确保它被触发每次中断后继续使用F9).

  1. 您现在在突出显示的行的Address列中有了基址+ Function Address。下面是需要进一步解释的难点部分,您需要进行学习练习。

代码语言:javascript
复制
- Read up on patching a function by injecting code into the process or by modifying the process before you run it.
- The injected code can communicate with your process via a **Memory Mapped File** or a **Named Pipe**, setting a flag every frame.
- You will need to do this while retaining the original opcodes to ensure the program works as normal by either:  
    - restoring after executing
    - **OR**
    - jumping to a code cave and executing original opcodes before jumping back
    - **OR**
    - Redirecting the function altogether (not suitable for your current use but worth reading about)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51527523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档