更新游戏没有覆盖exe文件

本文关键字:exe 文件 覆盖 游戏 更新 | 更新日期: 2023-09-27 18:03:48

我想做的是制作一个游戏和一个更新游戏的启动器。

这个启动器将更新游戏而不覆盖游戏的。exe文件。

我认为这是可能的通过使用dll,但我不知道在哪里学习这个…

这可能吗?

更新游戏没有覆盖exe文件

这听起来像你希望修改运行进程的内存而不修改可执行文件(无论是游戏还是其他程序)

您可以使用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用于他们自己的建模目的(尽管你可能会发现使游戏可建模?)。