2

最近我一直在做我的一个小项目,即 Java 中用于本地游戏(C/C++/等)的内存读/写。

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

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

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

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

我做了很多研究并找到了一些在 C++ 中执行此操作的方法,但是我对 C/C++ 的了解非常有限。我发现使用 JNA 很难将其转换为 Java,我想我会在这里问看看是否有人能够提供帮助或知道完成这一壮举的替代方法。

提前感谢您的帮助,Kaden。

[编辑]

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

4

1 回答 1

2

在对亚历克斯发布的内容进行了一些处理之后,我得到了它的工作,并设法让它工作。

对于其他想要获得类似工作的人,请查看 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;
}
于 2013-04-12T03:31:40.697 回答