Java JNA-EnumProcessModules()是否不返回所有DLL?

Java JNA-EnumProcessModules()是否不返回所有DLL?,java,java-native-interface,jna,cheat-engine,Java,Java Native Interface,Jna,Cheat Engine,我试图从游戏中读取坐标。当在我通过OpenProcess接收到的句柄上使用ReadProcessMemory时,使用我在CheatEngine中找到的内存,这种方法工作得非常好。例如,如果我知道正在运行的进程中的浮点值为0x5AB38F68,我可以读取它 但是,每次游戏重新启动时,地址都会改变。它依赖于名为AkSoundEngine.dll的模块。所以基本上地址应该是AkSoundEngine.dll+0x168F68。然而,我一生都找不到所述DLL的基地址。它在CE中显示: 但是,在与以前相同

我试图从游戏中读取坐标。当在我通过OpenProcess接收到的句柄上使用ReadProcessMemory时,使用我在CheatEngine中找到的内存,这种方法工作得非常好。例如,如果我知道正在运行的进程中的浮点值为0x5AB38F68,我可以读取它

但是,每次游戏重新启动时,地址都会改变。它依赖于名为AkSoundEngine.dll的模块。所以基本上地址应该是AkSoundEngine.dll+0x168F68。然而,我一生都找不到所述DLL的基地址。它在CE中显示:

但是,在与以前相同的句柄上使用EnumProcessModules()时,结果如下:

[2015-02-08 09:26:09][INFO][Game:59] - C:\Windows\SYSTEM32\ntdll.dll
[2015-02-08 09:26:09][INFO][Game:59] - C:\Windows\SYSTEM32\wow64.dll
[2015-02-08 09:26:09][INFO][Game:59] - C:\Windows\SYSTEM32\wow64win.dll
[2015-02-08 09:26:09][INFO][Game:59] - C:\Windows\SYSTEM32\wow64cpu.dll
[2015-02-08 09:26:09][INFO][Game:59] - F:\Steam\steamapps\common\TheLongDark\tld.exe
[2015-02-08 09:26:09][INFO][Game:59] - F:\Steam\steamapps\common\TheLongDark\tld.exe
[2015-02-08 09:26:09][INFO][Game:59] - F:\Steam\steamapps\common\TheLongDark\tld.exe
[2015-02-08 09:26:09][INFO][Game:59] - F:\Steam\steamapps\common\TheLongDark\tld.exe
[2015-02-08 09:26:09][INFO][Game:59] - F:\Steam\steamapps\common\TheLongDark\tld.exe
DLL没有显示。因此,我的假设是,它可能位于其中一个tld.exe模块中。如果是这样,我将如何迭代模块的模块,然后接收其基址?我是否可以假设我还必须添加tld.exe的基址,如:
tld.exe+AkSoundEngine.dll+0x168F68

您可能还注意到,它将tld.exe作为一个模块显示了5次,但其中只有2次返回baseofdl,作为GetModuleInformation()返回的
LPMODULEINFO
的一部分

可能是因为我刚刚遇到了在JNA中可行的东西(我对此表示怀疑,因为我只是在调用C代码)


我不知道如何更具体地提问,但您可以在下面的位置看到整个代码。大部分都发生在Game.java的updatePosition()方法中。

解决方案是使用EnumProcessModulesEx()和32位的标志。 我还被告知,如果Java是64位的,那么每个HMODULE的长度是8字节。 此外,在较新的系统上使用EnumProcessModulesEx()时,PROCESS_ALL_访问标志存在一些问题