小编典典

JNA-获取基本地址

java

最近,我一直在从事我的一个小项目,该项目是使用Java为本地游戏(C / C ++ / etc)进行内存读取/写入。

目前,我有一个可以读写游戏内存的基址,但是现在我需要一种方法来获取正在运行的应用程序的基址。例如:

我有使用作弊引擎及其指针搜索器收集的指针列表。这些是稳定的,并且在每次游戏重新加载时都能正常工作。

我现在面临的问题是,第一个指针使用程序的基址(每次重新启动程序时都会更改):“ ac_client.exe” + 000DF73C

我需要一种使用JNA获取“ ac_client.exe”基本值的方法。

我已经做了大量研究,发现了几种用C 进行处理的方法,但是我对C / C
的了解非常有限。我发现很难使用JNA将其转换为Java,我想在这里问一下,看看是否有人能够提供帮助或知道执行此壮举的其他方法。

谢谢您的提前帮助,Kaden。

[编辑]

阅读下面的解决方案!谢谢您的帮助。


阅读 402

收藏
2020-11-26

共1个答案

小编典典

在弄乱了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;
}
2020-11-26