我正在编写一个程序来更改给定内存地址处的值,我已经使用 Cheat Engine 计算出了指针
我找到了
UnityPlayer.dll
的图像库,并且在作弊引擎中,一切似乎都工作正常
但是,当我尝试在 python 中实现相同的功能时,遇到了一些问题
pm = pymem.Pymem("hollow_knight.exe")
#204F36DB1C4
gameModule = module_from_name(pm.process_handle, "UnityPlayer.dll").lpBaseOfDll
print(gameModule)
def getPtrAddress(base, offsets):
addr = pm.read_int(base)
for i in offsets:
if i != offsets[-1]:
addr = pm.read_int(addr + i)
addr = addr + offsets[-1]
return addr
geo = pm.read_int(getPtrAddress(gameModule+0x019B8900, offsets = [0x0, 0xD8, 0x268, 0xC8, 0x1C4]))
print(geo)
运行此代码时,我遇到错误,因为我尝试访问的内存地址不存在。
pymem.exception.MemoryReadError: Could not read memory at: 6257936, length: 4 - GetLastError: 299
更新:我能够通过使用 RemotePointers 解决该问题
pm = Pymem("hollow_knight.exe")
gameModule = module_from_name(pm.process_handle, "UnityPlayer.dll").lpBaseOfDll
def getPointerAddress(base, offsets):
remote_pointer = RemotePointer(pm.process_handle, base)
for offset in offsets:
if offset != offsets[-1]:
remote_pointer = RemotePointer(pm.process_handle, remote_pointer.value + offset)
else:
return remote_pointer.value + offset
while True:
if keyboard.is_pressed("q"):
geo = pm.read_int(getPointerAddress(gameModule+0x019B8900, offsets=[0x0, 0xD8, 0x268, 0xC8, 0x1C4]))
pm.write_int(getPointerAddress(gameModule+0x019B8900, offsets=[0x0, 0xD8, 0x268, 0xC8, 0x1C4]), geo+1)
抱歉再次提出这个问题,但 RemotePointer 似乎不是 Pymem 的一部分?您可以添加您的导入,以便我可以更好地遵循您的代码吗?谢谢 @Himanshu Sardana