更新游戏没有覆盖exe文件
本文关键字:exe 文件 覆盖 游戏 更新 | 更新日期: 2023-09-27 18:03:48
我想做的是制作一个游戏和一个更新游戏的启动器。
这个启动器将更新游戏而不覆盖游戏的。exe文件。
我认为这是可能的通过使用dll,但我不知道在哪里学习这个…
这可能吗?
这听起来像你希望修改运行进程的内存而不修改可执行文件(无论是游戏还是其他程序)
您可以使用ReadProcessMemory和WriteProcessMemory API调用来读写正在运行的进程的内存,它们属于kernel32.dll库。你还需要使用OpenProcess为进程创建一个有效的句柄,然后才能读写它的内存。
根据您使用的语言,可以非常直接地访问它们。在c#中,您需要使用以下语法声明Dll导入:
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(IntPtr hProcess, int lpBaseAddress, ref byte[] buffer, int size, ref int lpNumberOfBytesRead);
[DllImport("kernel32.dll")]
public static extern bool WriteProcessMemory(IntPtr hProcess, int lpBaseAddress, ref byte[] buffer, int size, ref int lpNumberOfBytesWritten);
然后使用OpenProcess获得进程句柄,并使用ReadProcessMemory和WriteProcessMemory适当地读写内存。
你可以使用像OLLYDBG这样的调试工具来帮助你找出你想要编辑的内存位置。另一个很棒的工具是ArtMoney,它允许你在运行过程中监视和跟踪值,以确定存储游戏信息的位置,如金钱,健康值等。
如果你需要进一步的帮助,添加一些关于你正在做什么的额外信息可能会很有用。
有很多资源可以用来学习如何创建一个dll项目。
从microsoft教程开始http://msdn.microsoft.com/en-us/library/ms235636 (v = vs.100) . aspx
从一开始就仔细考虑你的游戏设计。为了使其更易于管理和更新,你可能需要将游戏分成核心部分,如物理,渲染等,并将其作为dll。如果在以后的日期你升级你的渲染器,你只需要交换dll,或者,正如你所说,有一个启动器覆盖客户端的渲染器dll。
使用dll的一些缺点是,你现在需要与更多的文件一起发布游戏,最终用户可能会发现更容易包装你的dll用于他们自己的建模目的(尽管你可能会发现使游戏可建模?)。