剧集
访问冲突C0000005 - 读取或写入
当应用程序尝试从无效的内存地址读取或写入内存时,会发生读取或写入访问冲突。 若要有效,内存页必须具有有效的状态、保护和类型。
内存必须处于MEM_COMMIT 状态。
内存可以是任何类型的;MEM_IMAGE、MEM_MAPPED或MEM_PRIVATE。
对于读取操作,必须对内存的保护PAGE_READONLY、PAGE_READWRITE、PAGE_WRITECOPY、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_WRITECOPY。
对于写入操作,必须PAGE_READWRITE、PAGE_WRITECOPY、PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_WRITECOPY保护内存。
若要查看地址的状态、保护和类型,请使用 !address address <地址>
- 请务必引用当前值;不是分配值
- 每个内存页区域(最小 4K)都会跟踪分配时的初始保护值,以及由 VirtualProtect 系列函数设置的当前保护值。
由于以下常见方案之一,内存地址可能无效:
- NULL 指针 - 0x0 和 0x10000 (64K) 之间的地址 - 例如通常返回的指针返回 NULL 的函数(0x0),并且该指针未经验证访问
- 内存损坏 - 地址被错误或恶意覆盖 - 通常通过缓冲区溢出(或不足)
- Use-After-Free - 地址有效,但在释放地址后即会访问该地址(数据)
- 位翻转 - RAM(硬件)问题:一个或多个位已翻转(罕见)
其他资源:
当应用程序尝试从无效的内存地址读取或写入内存时,会发生读取或写入访问冲突。 若要有效,内存页必须具有有效的状态、保护和类型。
内存必须处于MEM_COMMIT 状态。
内存可以是任何类型的;MEM_IMAGE、MEM_MAPPED或MEM_PRIVATE。
对于读取操作,必须对内存的保护PAGE_READONLY、PAGE_READWRITE、PAGE_WRITECOPY、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_WRITECOPY。
对于写入操作,必须PAGE_READWRITE、PAGE_WRITECOPY、PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_WRITECOPY保护内存。
若要查看地址的状态、保护和类型,请使用 !address address <地址>
- 请务必引用当前值;不是分配值
- 每个内存页区域(最小 4K)都会跟踪分配时的初始保护值,以及由 VirtualProtect 系列函数设置的当前保护值。
由于以下常见方案之一,内存地址可能无效:
- NULL 指针 - 0x0 和 0x10000 (64K) 之间的地址 - 例如通常返回的指针返回 NULL 的函数(0x0),并且该指针未经验证访问
- 内存损坏 - 地址被错误或恶意覆盖 - 通常通过缓冲区溢出(或不足)
- Use-After-Free - 地址有效,但在释放地址后即会访问该地址(数据)
- 位翻转 - RAM(硬件)问题:一个或多个位已翻转(罕见)
其他资源: