java - JNA - 获取基址

标签 java jna

最近我一直在做我的一个小项目,即原生游戏(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/

相关文章:

java - java中的字节比较

java - 如果 ShellExecuteEx 的调用者死亡,则停止 JVM windows 进程

java - 在 Linux 上的 Spring Boot 中使用 JNA 加载 .so 文件时出现问题

java - JNA GetExitCodeProcess() 工作异常

java - 来自 Java 的 hunspell 和个人词典

java - 为什么 JNA 的简单使用会导致 Mac OS X 上的 fork() ?

java - java解析Json文件

java - 永久保存字符串的值

java - 将类路径传递给 buildr 中基于 java/scala 的项目中的自定义任务

java - 更改 Color 对象的 Alpha