This is my updated version, it still doesn't work :(
base = mbi.BaseAddress buffer = ctypes.c_int32() buffer_pointer = ctypes.byref(buffer) ReadProcessMemory = Kernel32.ReadProcessMemory if ReadProcessMemory(Process, base, buffer_pointer, mbi.RegionSize, None): print('buffer is: ',buffer) else: raise ctypes.WinError(ctypes.get_last_error()) On Fri, Oct 6, 2017 at 2:06 PM, Michael C <mysecretrobotfact...@gmail.com> wrote: > like this? > > buffer = ctypes.byref(ctypes.create_string_buffer(4)) > > On Fri, Oct 6, 2017 at 1:55 PM, eryk sun <eryk...@gmail.com> wrote: > >> On Fri, Oct 6, 2017 at 9:12 PM, Michael C >> <mysecretrobotfact...@gmail.com> wrote: >> > >> > How do I create a buffer, or rather, is a buffer just a variable? >> >> A buffer is a block of memory for an I/O operation. For example, if >> you need to read a 4-byte (32-bit) integer at an address in another >> process, the 'buffer' could be ctypes.c_int32(). In general, to read >> an arbitrary-sized block of memory, use ctypes.create_string_buffer() >> to create a char array. >> >> > How do I create a pointer to it? >> >> Pass it byref(). >> >> > print('mbi.State: ',mbi.State) >> >> Check whether mbi.State is MEM_COMMIT before trying to read it. If >> it's MEM_FREE or MEM_RESERVE, then ReadProcessMemory will fail. >> >> > buffer = ctypes.create_string_buffer(4) >> > bufferSize = (ctypes.sizeof(buffer)) >> > >> > ReadProcessMemory = Kernel32.ReadProcessMemory >> > >> > if ReadProcessMemory(Process, ctypes.byref(mbi), buffer, bufferSize, >> None): >> > print('buffer is: ',buffer) >> > else: >> > print('something is wrong') >> >> Don't print "something is wrong". You're capturing the thread's last >> error value, so use it to raise an informative exception. For example: >> >> if not success: >> raise ctypes.WinError(ctypes.get_last_error()) >> > > _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor