JNA - 获取基地址

ab_non 发布于 2019-03-09 java 最后更新 2019-03-09 14:39 8 浏览

最近我一直在研究我的一个小项目,即在Java中为本地游戏(C / C++ / etc)进行内存读取/写入。 目前,我有一个可以读写游戏内存的基地,但我现在需要一种方法来获取正在运行的应用程序的基地址。例如: 我有一个使用Cheat Engine和它的指针搜索器收集的指针列表。 这些都是稳定的,每次游戏重新加载时都会工作。 我现在面临的问题是第一个指针使用程序的基地址(每次程序重新启动时都会更改): “ac_client.exe” + 000DF73C 我需要一种方法来使用JNA获取“ac_client.exe”的基本值。 我做了大量的研究,并发现了一些在C++中实现它的方法,但是我对C / C++的知识是相当有限的。我发现使用JNA将它转换为Java很困难,我想我会问这里和看看是否有人能够帮助或知道替代方式做这样的壮举。 提前感谢您的帮助, 卡登。 [编辑] 阅读我的解决方案吼叫!谢谢您的帮助。

已邀请:

iest

赞同来自:

我对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;
}