Как я могу прочитать память другого процесса в Python в Windows?
Я пытаюсь написать Python script, который читает серию мест памяти определенного процесса.
Как я могу сделать это в Python?
Я буду использовать Windows, если это имеет значение. У меня есть процессы PID, которые я пытаюсь читать/редактировать.
Мне нужно вернуться к вызову ReadProcessMemory() и использовать ctypes?
Ответы
Ответ 1
Я не видел ничего в стандартных библиотеках 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)
Ответ 2
Да, ctypes
(или win32all
) и ReadProcessMemory
- это именно то, что нужно. Вы искали что-то дополнительное/другое? Что, в частности?
Ответ 3
См. http://www.windowsreference.com/windows-xp/dos-commands-and-equivalent-linux-commands/
Вы можете использовать tasklist.exe для перечисления процессов, а затем очистить результаты. Затем используйте taskkill.exe(или tstskill.exe), чтобы закончить их.
Но ctypes и kernal32, вероятно, безопаснее.