最近我一直在研究我的一个小项目,即java中的内存读取/写入本机游戏(C / C ++ /等)。
目前我有一个基础,我可以读取和写入游戏的内存,但我现在需要一种方法来获取正在运行的应用程序的基地址。例如:
我有一个使用Cheat Engine及其Pointer搜索器收集的指针列表。 这些都是稳定的,每次游戏重新加载时都能正常工作。
我现在面临的问题是,第一个指针使用程序的基地址(每次程序重启时都会改变): “ac_client.exe” + 000DF73C
我需要一种使用JNA获取“ac_client.exe”基值的方法。
我已经做了很多研究并找到了一些用C ++做的方法,但是我对C / C ++的了解非常有限。我发现很难用JNA将它转换为Java,我想我会在这里询问,看看是否有人能够提供帮助或知道其他方式来做这样的壮举。
先谢谢你的帮助, 卡登。
[编辑]
阅读我的解决方案!谢谢你的帮助。
答案 0 :(得分:2)
我对Alex发布的内容进行了一些处理后得到了它的工作,并设法让它发挥作用。
对于任何想要获得此类工作的人,请查看Alex发布的项目,您将看到所需的课程。然后我就用这个:
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;
}