我正在尝试编写一个Python脚本,它读取特定进程的一系列内存位置。
我怎样才能在Python中执行此操作?
如果重要的话,我会使用Windows。我有我正在尝试阅读/编辑的进程PID。
我是否必须恢复调用ReadProcessMemory()并使用ctypes?
答案 0 :(得分:24)
我没有看到标准python库中的任何内容,但我发现了一个使用ctypes的例子,就像你在另一个网站上建议的那样:
from ctypes import *
from ctypes.wintypes import *
OpenProcess = windll.kernel32.OpenProcess
ReadProcessMemory = windll.kernel32.ReadProcessMemory
CloseHandle = windll.kernel32.CloseHandle
PROCESS_ALL_ACCESS = 0x1F0FFF
pid = 4044 # I assume you have this from somewhere.
address = 0x1000000 # Likewise; for illustration I'll get the .exe header.
buffer = c_char_p("The data goes here")
bufferSize = len(buffer.value)
bytesRead = c_ulong(0)
processHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
if ReadProcessMemory(processHandle, address, buffer, bufferSize, byref(bytesRead)):
print "Success:", buffer
else:
print "Failed."
CloseHandle(processHandle)
答案 1 :(得分:0)
是的,ctypes
(或win32all
)和ReadProcessMemory
正是要走的路。你在寻找额外/不同的东西吗?什么,特别是?
答案 2 :(得分:-3)
请参阅http://www.windowsreference.com/windows-xp/dos-commands-and-equivalent-linux-commands/
您可以使用tasklist.exe列出进程,然后抓取结果。然后使用taskkill.exe(或tstskill.exe)结束它们。
但是ctypes和kernal32可能更安全。