さて、あなたはctypes
そこにすべての教祖...
1秒間に100回メモリアドレスを読み取るPythonスクリプトがあります。このメモリアドレスに格納されている値は、符号なし整数を表します。この値は時間の経過とともに増加します。残念ながら、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)
私には、前の呼び出しで読み取る必要のあるバイト数だけを読み取っているように見えます...
どうすればこれを修正できますか?