我一直致力于一个涉及Java的JNA库和读/写游戏内存的项目,并遇到了一些问题。
为了说明一切,我试图找到游戏的基地址(因为它会在每次重新打开时改变),然后我相信我应该能够添加我在Cheat Engine中找到的偏移,然后我得到了我需要修改的地址。例如,Cheat Engine为我提供了指针" Game.exe" + 0170AFC0以及49C的偏移量。我的理解是,如果我通过我的程序getBaseAddress方法获取Game.exe的基地址,我可以添加0170AFC0& 49C到那个基地址,给我留下我想要修改的地址(至少,这是我的理解)。
我相信我正确地找到了基本地址(?),因为我在网上找到了一个有用的调试方法。该方法返回1BB5310的基址,这正是我的getBaseAddress方法所找到的。
问题在于,当我遵循上述逻辑时,我的地址与我正在寻找的地址不匹配,直接将它与Cheat Engine进行比较。例如:我找到1bb5310的基地址,添加我的偏移量0170AFC0& 49C,并获得地址32C076C。但是,Cheat Engine告诉我" Game.exe" + 0170AFC0 - > 18F8CA1C + 49C - > 18F8CEB8
这给我留下了两个结论之一,我的逻辑关于如何从基地址到我想要修改的地址不正确,或者我的getBaseAddress方法不正确。
Here is the github of my current project (main class is Editor/MemEdit.java)
任何帮助清理哪个问题都将非常感激。
作弊引擎的澄清: Cheat Engine是一个程序,它将自身附加到正在运行的进程,并允许您查看/编辑与所述进程关联的内存。一个例子是here。我们正在查看程序Calculator.exe的值为1000的所有内存。由于内存的性质,每次重新启动程序时,内存地址都会发生变化。但是,您可以找到指向特定内存地址的指针,并为您提供类似于this的信息。顶部地址是当前地址,然后它具有49c的偏移量,最后是#34; Game.exe" + 0170AFC0,我相信它是游戏的基地址+偏移量。然后允许我做的是访问相同的信息,无论我是否重新启动游戏(因为它离开游戏基地址,我相信)。不幸的是,Cheat Engine似乎没有关于它如何获得" Game.exe"的任何确切文档。地址,但从我发现的,它应该只是进程基地址。
答案 0 :(得分:0)
我的代码计算程序的基地址以及查找动态地址的逻辑都是关闭的。我的代码将很快在GitHub上更新给任何想要这样做的人。
关于我的逻辑:
作弊引擎会为你提供一个指针,如“Game.exe”+ 016F572C,你将获得1D4的偏移量。 “Game.exe”实际上是基地址。在我的情况下,使用getBaseAddress方法找到“Game.exe”。然后你必须做的是将“016F572C”(或者你的数字恰好是什么)添加到你的基地址,结果我将调用X.现在,读取位于X的内存,你将收到Y(读为4) 32位应用程序的字节,64位的8字节)。如果只有一个偏移量,请将偏移量添加到Y并完成!