Я пытаюсь прочитать координаты из игры. Это отлично работает при использовании ReadProcessMemory для HANDLE, который я получаю через OpenProcess, с памятью, которую я нахожу в CheatEngine. Например, если я знаю, что значение с плавающей запятой в запущенном процессе равно 0x5AB38F68, я могу это прочитать.
Однако адрес меняется каждый раз при перезапуске игры. Это зависит от модуля под названием AkSoundEngine.dll. Таким образом, в основном адрес будет AkSoundEngine.dll+0x168F68. Однако я не могу найти базовый адрес указанной DLL. Это отображается в CE: Нажмите для просмотра изображения
Однако при использовании EnumProcessModules() с тем же HANDLE, что и раньше, результаты следующие:
[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 из них возвращают BaseOfDll как часть LPMODULEINFO
, возвращаемого GetModuleInformation().
Может быть, я только что столкнулся с тем, что выполнимо в JNA (я сомневаюсь в этом, поскольку я просто вызываю код C)?
Я не знаю, как спросить более конкретно, но вы можете увидеть весь код на моем GitHub. Большая часть этого происходит в методе updatePosition() Game.java.