我試圖從遊戲中讀取座標。當在通過OpenProcess接收到的HANDLE上使用ReadProcessMemory時,這種方法非常好,並且可以在CheatEngine中找到內存。例如,如果我知道正在運行的進程中的浮點值是0x5AB38F68,我可以讀取它。JNA - EnumProcessModules()不返回所有的DLL?
但是,每次遊戲重新啓動時地址都會更改。它取決於一個名爲AkSoundEngine.dll的模塊。所以基本上地址是AkSoundEngine.dll + 0x168F68。但是,我不能在我的生活中找到所述DLL的baseaddress。它示出了在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
?
您可能還會注意到,它將tld.exe作爲模塊顯示5次,但其中只有2個返回BaseOfDll,作爲由GetModuleInformation()返回的LPMODULEINFO
的一部分。
難道是因爲我剛纔遇到了JNA中可行的事情(我懷疑這是因爲我只是調用C代碼)?
我不確定如何更具體地詢問,但您可以在my GitHub處看到整個代碼。它大部分發生在Game.java的updatePosition()方法中。