我要做的是制作一款更新游戏的游戏和启动器。
此启动器将更新游戏而不会覆盖游戏的.exe文件。
我认为这可以通过使用dll但我不知道从哪里学习...
这可能吗?
答案 0 :(得分:1)
听起来我希望在不修改可执行文件(无论是游戏还是其他程序)的情况下修改正在运行的进程的内存。
您可以使用属于kernel32.dll库的ReadProcessMemory和WriteProcessMemory API调用来读取和写入正在运行的进程的内存。 在读取和写入内存之前,您还需要使用OpenProcess来创建进程的有效句柄。
根据您使用的语言,访问它们非常简单。在C#中,您需要使用以下语法声明Dll Import:
[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,它允许您监视和跟踪正在运行的过程中的值,以识别存储游戏信息的位置,例如金钱,健康状况等。
如果您需要进一步的帮助,可能需要添加一些关于您正在做什么的其他信息。
答案 1 :(得分:0)
有许多资源可供学习如何制作dll项目。
从微软教程开始 - http://msdn.microsoft.com/en-us/library/ms235636(v=vs.100).aspx
从一开始就仔细考虑游戏的设计。为了使其更易于管理和更容易更新,您可能希望将游戏分成核心部分,即物理,渲染等,并将这些视为dll。
如果您以后升级渲染器,则只需更换dll,或者如您所说,在客户端计算机上覆盖渲染器dll的启动器。
使用dll的一些缺点是你现在需要发布包含更多文件的游戏,并且最终用户可能会发现更容易包装你的dll用于他们自己的修改目的(尽管你可能会发现游戏可以加密吗?)