1
Traceback (most recent call last): File "C:\Users\Nutzer\Google Drive\Code\Code\memory_read.py", line 26, in byref(bytesRead)) ctypes.ArgumentError: argument 2: : long int too long to convert
代碼:
from ctypes import *
from ctypes.wintypes import *
PID = 4016
address = 0x6C532407C
OpenProcess = windll.kernel32.OpenProcess
ReadProcessMemory = windll.kernel32.ReadProcessMemory
CloseHandle = windll.kernel32.CloseHandle
PROCESS_ALL_ACCESS = 0x1F0FFF
datadummy = b'.'*200
buffer = c_char_p(datadummy)
bufferSize = len(buffer.value)
bytesRead = c_ulong(0)
processHandle = OpenProcess(PROCESS_ALL_ACCESS, False, int(PID))
ReadProcessMemory(processHandle,
address,
buffer,
bufferSize,
byref(bytesRead))
CloseHandle(processHandle)
我試圖改變bytesRead = c_ulong(0)其它一些ctypes的,但沒有成功。我在Windows 8.1系統64位。經過數小時的搜索,我找不到任何解決方案或類似的問題。有人知道這裏有什麼錯嗎?
集'SIZE_T = c_size_t;''ReadProcessMemory.argtypes = [手柄,LPCVOID,LPVOID,SIZE_T,POINTER(SIZE_T)];''OpenProcess.restype = HANDLE;''CloseHandle.argtypes = [手柄] '。 – eryksun 2014-12-04 04:32:20
不要修改Python字符串。使用'create_string_buffer'或者使用普通的ctypes語法創建一個數組,例如'bufferSize = 201;''buffer =(c_char * bufferSize)()'。 – eryksun 2014-12-04 04:36:47
確保爲out參數使用正確的類型'bytesRead = SIZE_T()'。這是Win64中的8個字節。 – eryksun 2014-12-04 04:37:36