python读取进程内存_python中ReadProcessMemory读取64位进程内存时出现问题

当使用ReadProcessMemory读取64位进程(扫雷舰)的内存时,我得到错误代码998(error_NOACCESS)。我在Windows7上使用的是64位的Python3.5。在

奇怪的是,这个错误只发生在更高的地址上,例如0x 0000 0000 FF3E 0000。较低的地址,如0x 0000 0000 0012 AE40,不会抛出错误并返回正确的扫雷艇数据。在

当我在C#.NET中使用几乎相同的代码编写相同的程序并查看相同的地址时,它可以正常工作,而且不会出错!在

我知道我正在查看的地址是正确的,因为我可以通过作弊引擎和VMMap看到它。我不知道它是否相关,但我要查看的更高地址是扫雷舰.exe扫雷艇模块。在

为什么python代码不能工作?在

Python代码(对于较高的地址抛出错误,但对于较低的地址有效):import ctypes, struct

pid = 3484 # Minesweeper

processHandle = ctypes.windll.kernel32.OpenProcess(0x10, False, pid)

addr = 0x00000000FF3E0000 # Minesweeper.exe module base address

buffer = (ctypes.c_byte * 8)()

bytesRead = ctypes.c_ulonglong(0)

result = ctypes.windll.kernel32.ReadProcessMemory(processHandle, addr, buffer, len(buffer), ctypes.byref(bytesRead))

e = ctypes.windll.kernel32.GetLastError()

print('result: ' + str(result) + ', err code: ' + str(e))

print('data: ' + str(struct.unpack('Q', buffer)[0]))

ctypes.windll.kernel32.CloseHandle(processHandle)

# Output:

# result: 0, err code: 998

# data: 0

C#.NET代码(64位项目,无错误):

^{pr2}$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值