栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有ctypes的ReadProcessMemory

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有ctypes的ReadProcessMemory

检查社区对MSDN ReadProcessMemory页面的评论,引用:

W7不会运行读取进程内存

您可能需要检查当前进程令牌的“ SE_DEBUG_NAME”访问权限。如果未启用。启用它。当然,这必须以管理员身份完成。

还要完全声明返回类型并使用

use_last_error
参数,该参数
ctypes
GetLastError()
在调用后直接在内部缓存该值。否则,可能不正确。如果您使用的是64位系统,则SIZE_T和指针是64位值,因此ctypes需要知道用于正确设置调用堆栈的类型。

...from ctypes import wintypes...rPM = ctypes.WinDLL('kernel32',use_last_error=True).ReadProcessMemoryrPM.argtypes = [wintypes.HANDLE,wintypes.LPCVOID,wintypes.LPVOID,ctypes.c_size_t,ctypes.POINTER(ctypes.c_size_t)]rPM.restype = wintypes.BOOLwPM = ctypes.WinDLL('kernel32',use_last_error=True).WriteProcessMemorywPM.argtypes = [wintypes.HANDLE,wintypes.LPVOID,wintypes.LPCVOID,ctypes.c_size_t,ctypes.POINTER(ctypes.c_size_t)]wPM.restype = wintypes.BOOLADDRESS1 = 0x00E97074ADDRESS2 = ctypes.create_string_buffer(64)bytes_read = ctypes.c_size_t()print(rPM(PROCESS,ADDRESS1,ADDRESS2,64,ctypes.byref(bytes_read)))print(ctypes.get_last_error())

同样,FYI,即使使用所有修复程序,我也得到相同的错误值,但是我没有遇到启用问题

SE_DEBUG_NAME

解决了

以下是问题所在:

PROCESS = win32api.OpenProcess(PROCESS_ALL_ACCESS,0,PID).handle

win32api.OpenProcess
返回一个
PyHANDLE
被销毁的临时文件, 在检索 到句柄 之后 关闭该句柄

解决方案是使用:

PROCESS = win32api.OpenProcess(PROCESS_ALL_ACCESS,0,PID)...rPM(PROCESS.handle,ADDRESS1,ADDRESS2,64,0)

PROCESS
然后握住该
PyHANDLE
对象,并且手柄保持有效。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/669324.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号