You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Under certain conditions (active shared memory, for example), modifying a shared memory map with PAGE_WRITECOPY can have adverse effects on the target process.
In the Process class exists the following:
hProcess = self.get_handle( win32.PROCESS_VM_WRITE |
win32.PROCESS_VM_OPERATION |
win32.PROCESS_QUERY_INFORMATION )
mbi = self.mquery(lpBaseAddress)
if not mbi.has_content():
raise ctypes.WinError(win32.ERROR_INVALID_ADDRESS)
if mbi.is_image() or mbi.is_mapped():
prot = win32.PAGE_WRITECOPY
elif mbi.is_writeable():
prot = None
elif mbi.is_executable():
prot = win32.PAGE_EXECUTE_READWRITE
else:
prot = win32.PAGE_READWRITE
if prot is not None:
In my case, I'm debugging a process that communicates with another via a shared memory section (via CreateFileMappingW with INVALID_HANDLE_VALUE and MapViewOfFile). When I attempt to write to this shared section, poke_dword will first attempt to detect the page protections and, if it's an image or mapped, mprotect it with PAGE_WRITECOPY, even if the section is writable. This causes the parent process to lock up and/or crash.
A couple things are unclear to me:
Why mprotect a shared memory section PAGE_WRITECOPY if it's writable?
Why check a mapped section's protection if it's writable?
Why would this cause other processes sharing/accessing the section to crash/freeze?
I was able to fix this by simply switching the order of the checks:
I haven't fully debugged the root cause, but I do think the PAGE_WRITECOPY is at fault here. I'm also not sure what implications my fix may have under other scenarios.
The text was updated successfully, but these errors were encountered:
Under certain conditions (active shared memory, for example), modifying a shared memory map with PAGE_WRITECOPY can have adverse effects on the target process.
In the
Process
class exists the following:In my case, I'm debugging a process that communicates with another via a shared memory section (via
CreateFileMappingW
with INVALID_HANDLE_VALUE andMapViewOfFile
). When I attempt to write to this shared section,poke_dword
will first attempt to detect the page protections and, if it's an image or mapped,mprotect
it with PAGE_WRITECOPY, even if the section is writable. This causes the parent process to lock up and/or crash.A couple things are unclear to me:
PAGE_WRITECOPY
if it's writable?I was able to fix this by simply switching the order of the checks:
I haven't fully debugged the root cause, but I do think the
PAGE_WRITECOPY
is at fault here. I'm also not sure what implications my fix may have under other scenarios.The text was updated successfully, but these errors were encountered: