Как можно прочитать память другого процесса? Есть программа снимающая показания с оборудования, написана на Delphi. Нужно из нее достать текущие значения. Как в python получить доступ к памяти программы и найти там нужные адреса?
Для доступа к памяти другого процесса в Python можно использовать библиотеку pywin32 (для Windows) или ptrace (для Linux).
Прежде чем пытаться получить доступ к памяти другого процесса, необходимо убедиться, что у вас есть права на чтение памяти этого процесса (например, права администратора).
Вот пример кода на Python с использованием pywin32, который позволяет получить доступ к памяти другого процесса и прочитать значения из нее:
import win32api # Получение дескриптора процесса handle = win32api.OpenProcess(win32con.PROCESS_VM_READ, False, process_id) # Адрес в памяти для чтения (можно найти в отладчике) address = 0x12345678 # Чтение данных из памяти процесса buffer = win32api.ReadProcessMemory(handle, address, 4, None) # Преобразование буфера в число value = int.from_bytes(buffer, byteorder='little') print(value) # Закрытие дескриптора процесса win32api.CloseHandle(handle)
Если вы используете Linux, то вам необходимо использовать библиотеку ptrace. Помимо этого, для поиска адресов в памяти программы можно использовать отладчик (например, gdb).
Обратите внимание, что получение доступа к памяти других процессов может быть опасным и противоречить политике безопасности операционной системы. Поэтому перед выполнением подобных операций убедитесь, что у вас есть соответствующие разрешения.
Для доступа к памяти другого процесса в Python можно использовать библиотеку pywin32 (для Windows) или ptrace (для Linux).
Прежде чем пытаться получить доступ к памяти другого процесса, необходимо убедиться, что у вас есть права на чтение памяти этого процесса (например, права администратора).
Вот пример кода на Python с использованием pywin32, который позволяет получить доступ к памяти другого процесса и прочитать значения из нее:
import win32api# Получение дескриптора процесса
handle = win32api.OpenProcess(win32con.PROCESS_VM_READ, False, process_id)
# Адрес в памяти для чтения (можно найти в отладчике)
address = 0x12345678
# Чтение данных из памяти процесса
buffer = win32api.ReadProcessMemory(handle, address, 4, None)
# Преобразование буфера в число
value = int.from_bytes(buffer, byteorder='little')
print(value)
# Закрытие дескриптора процесса
win32api.CloseHandle(handle)
Если вы используете Linux, то вам необходимо использовать библиотеку ptrace. Помимо этого, для поиска адресов в памяти программы можно использовать отладчик (например, gdb).
Обратите внимание, что получение доступа к памяти других процессов может быть опасным и противоречить политике безопасности операционной системы. Поэтому перед выполнением подобных операций убедитесь, что у вас есть соответствующие разрешения.