JNA - 获取基地址

时间:2013-04-11 16:32:24

标签: java jna

最近我一直在研究我的一个小项目,即java中的内存读取/写入本机游戏(C / C ++ /等)。

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

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

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

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

我已经做了很多研究并找到了一些用C ++做的方法,但是我对C / C ++的了解非常有限。我发现很难用JNA将它转换为Java,我想我会在这里询问,看看是否有人能够提供帮助或知道其他方式来做这样的壮举。

先谢谢你的帮助, 卡登。

[编辑]

阅读我的解决方案!谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

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