Okay все вы ctypes
гуру там ...Python ReadProcessMemory не читает достаточно, байты
У меня есть скрипт, питона, который считывает адреса памяти в сотни раз в секунду. Значение, сохраненное на этом адресе памяти, представляет собой целое число без знака. Это значение увеличивается с течением времени. К сожалению, когда он проходит 2^8, 2^16 или 2^24, вызов ReadProcessMemory не считывает достаточное количество байтов, чтобы получить большее целое число. На самом деле, похоже, что после первого чтения не было прочитано правильное количество байтов.
Вот фрагмент кода:
from time import sleep
from ctypes import *
from struct import *
pid = 0x0D50
op = windll.kernel32.OpenProcess
rpm = windll.kernel32.ReadProcessMemory
ch = windll.kernel32.CloseHandle
PAA = 0x1F0FFF
addy = 0x38D53368
ph = op(PAA,False,int(pid)) #program handle
lastvalue = 0
while True:
datadummy = b'.'*4
buff = c_char_p(datadummy)
bufferSize = (len(buff.value))
bytesRead = c_ulong(0)
if rpm(ph,addy,buff,bufferSize,byref(bytesRead)):
value = unpack('I',datadummy)[0]
if lastvalue != value:
print value
print bytesRead
lastvalue = value
sleep(.01)
И выход может быть что-то вроде:
191
c_ulong(4L) ////Here it got 4 bytes like I expected
211
c_ulong(1L) ////But here it only got 1 byte.?? It should be reading 4 bytes everytime
231
c_ulong(1L)
251
c_ulong(1L)
15 ////This value is incorrect, because it only reads 1 byte. (should be 271)
c_ulong(1L)
Что мне кажется, что это только чтение количество байт, что предыдущий звонок необходимо читать ...
Как это исправить?
Очень хороший ответ! Спасибо за подробное объяснение того, что произошло. –