最近,我一直在从事我的一个小项目,该项目是使用Java为本地游戏(C / C ++ / etc)进行内存读取/写入。
目前,我有一个可以读写游戏内存的基址,但是现在我需要一种方法来获取正在运行的应用程序的基址。例如:
我有使用作弊引擎及其指针搜索器收集的指针列表。这些是稳定的,并且在每次游戏重新加载时都能正常工作。
我现在面临的问题是,第一个指针使用程序的基址(每次重新启动程序时都会更改):“ ac_client.exe” + 000DF73C
我需要一种使用JNA获取“ ac_client.exe”基本值的方法。
我已经做了大量研究,发现了几种用C 进行处理的方法,但是我对C / C 的了解非常有限。我发现很难使用JNA将其转换为Java,我想在这里问一下,看看是否有人能够提供帮助或知道执行此壮举的其他方法。
谢谢您的提前帮助,Kaden。
[编辑]
阅读下面的解决方案!谢谢您的帮助。
在弄乱了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; }