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

JNA - EnumProcessModules() not returning all DLLs?

我正在尝试从游戏中读取坐标。当我在通过 OpenProcess 收到的 HANDLE 上使用 ReadProcessMemory 时,这工作得很好,我在 CheatEngine 中找到了内存。例如,如果我知道 运行ning 进程中的 float 值是 0x5AB38F68,我可以读取它。

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

但是,当像以前一样在同一个 HANDLE 上使用 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?

您可能还注意到,它作为一个模块显示了 5 次 tld.exe,但其中只有 2 次 return 是一个 BaseOfDll,作为 LPMODULEINFO 的一部分 return 由 GetModuleInformation() 编辑。

难道我只是 运行 了解了 JNA 的功能(我对此表示怀疑,因为我只是调用 C 代码)?

我不确定如何更具体地询问,但您可以在 my GitHub 看到完整的代码。大部分发生在 Game.java 的 updatePosition() 方法中。

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