JNA-EnumProcessModules()没有返回所有DLLs?

 2023-01-19    352  

问题描述

我试图阅读游戏中的坐标.当我通过OpenProcess收到的句柄上使用ReadProcessMemory时,这很好地效果很好,并且我在CheatEngine中找到了记忆.例如,如果我知道运行过程中的浮点值为0x5ab38f68,我可以阅读此.

但是,每次游戏重新启动时地址会更改.它取决于一个称为aksoundengine.dll的模块.因此,基本上,地址将在aksoundengine.dll+0x168f68上.但是,我一生都找不到上述DLL的基础.它在CE中显示:单击以获取图像

JNA-EnumProcessModules()没有返回所有DLLs?

但是,当在与以前的同一手柄上使用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次作为模块,但只有2次返回一个基本ofdll,作为LPMODULEINFO的一部分,如getModuleInformation返回().

可能是,我刚刚遇到了JNA中可行的内容(我怀疑,因为我只是在调用C代码)?

我不确定如何更具体地询问,但是您可以在我的github .大部分发生在game.java的updatePosition()方法中.

推荐答案

解决方案是将EnumProcessModulesex()与标志使用32位.
有人告诉我,如果Java为64位,则每个Hmodule长8个字节.
此外,在新系统上使用EnumProcessModulesex()时,Process_all_Access标志也存在一些问题.

以上所述是小编给大家介绍的JNA-EnumProcessModules()没有返回所有DLLs?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/25868.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。