最近我一直在做我的一个小项目,即原生游戏(C/C++/etc)的 Java 内存读写。
目前我有一个可以读取和写入游戏内存的基址,但我现在需要一种方法来获取正在运行的应用程序的基址。例如:
我有一个使用 Cheat Engine 及其指针搜索器收集的指针列表。 这些都很稳定,并且每次游戏重新加载时都可以工作。
我现在面临的问题是第一个指针使用程序的基地址(每次程序重新启动时都会改变): “ac_client.exe”+000DF73C
我需要一种使用 JNA 获取“ac_client.exe”的基值的方法。
我做了很多研究,发现了一些用 C++ 实现的方法,但我对 C/C++ 的了解非常有限。我发现使用 JNA 将其转换为 Java 很困难,我想我会在这里询问,看看是否有人能够提供帮助或知道实现这一壮举的其他方法。
感谢您提前提供的任何帮助, 卡登。
[编辑]
阅读下面我的解决方案!感谢您的帮助。
最佳答案
在对 Alex 发布的内容进行了一番修改之后,我让它开始工作,并设法让它工作。
对于任何其他想要实现类似功能的人,请查看 Alex 发布的项目,您将看到所需的类(class)。然后我就用了这个:
public int getBaseAddress() {
try {
Pointer hProcess = gethProcess();
List<Module> hModules = PsapiHandler.getInstance().EnumProcessModules(hProcess);
for(Module m: hModules){
if(m.getFileName().contains(exeName)){
misc.log(m.getFileName() + ": 0x" + Long.toHexString(Pointer.nativeValue(m.getEntryPoint())));
return Integer.valueOf("" + Pointer.nativeValue(m.getLpBaseOfDll()));
}
}
} catch (Exception e) { e.printStackTrace(); }
return -1;
}
关于java - JNA - 获取基址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15954142/