剧集
访问冲突C0000005
访问冲突是应用程序读取、写入或执行无效内存地址时导致的异常类型。
异常代码0xC0000005
第一个异常参数 (0) 是冲突的类型;读取(0)、写入(1)或执行(8)
第二个异常参数 (1) 是冲突的地址。
使用适用于 Windows 的调试工具调试这些问题时,请按照以下步骤操作:
- .exr -1
- 异常代码
- Parameter[0] - 读取(0)、写入(1)、执行(8)
- Parameter[1] - Address
- .ecxr
- 在访问冲突中注册值
- 汇编程序指令
- 读取 - 查看逗号右侧的表达式
- 写入 - 查看逗号左侧的表达式
- 执行 - 查看表达式的地址
- k
- 在访问冲突中查看调用堆栈
由于以下常见方案之一,内存地址可能无效:
- NULL 指针 - 0x0 和 0x10000 (64K) 之间的地址 - 例如通常返回的指针返回 NULL 的函数(0x0),并且该指针未经验证访问
- 内存损坏 - 地址被错误或恶意覆盖 - 通常通过缓冲区溢出(或不足)
- Use-After-Free - 地址有效,但在释放地址(数据)或卸载后(代码)后正在访问该地址
- 位翻转 - RAM(硬件)问题:一个或多个位已翻转(罕见)
有关读取或写入问题,请参阅“读取”或“写入”情节。
有关 执行 问题,请参阅 “执行 ”事件。
请注意,当地址介于 0x0 和 0x10000(64K 之间)时,引发 System.NullReferenceException 异常而不是访问冲突异常的 CLR 应用程序。
其他资源:
访问冲突是应用程序读取、写入或执行无效内存地址时导致的异常类型。
异常代码0xC0000005
第一个异常参数 (0) 是冲突的类型;读取(0)、写入(1)或执行(8)
第二个异常参数 (1) 是冲突的地址。
使用适用于 Windows 的调试工具调试这些问题时,请按照以下步骤操作:
- .exr -1
- 异常代码
- Parameter[0] - 读取(0)、写入(1)、执行(8)
- Parameter[1] - Address
- .ecxr
- 在访问冲突中注册值
- 汇编程序指令
- 读取 - 查看逗号右侧的表达式
- 写入 - 查看逗号左侧的表达式
- 执行 - 查看表达式的地址
- k
- 在访问冲突中查看调用堆栈
由于以下常见方案之一,内存地址可能无效:
- NULL 指针 - 0x0 和 0x10000 (64K) 之间的地址 - 例如通常返回的指针返回 NULL 的函数(0x0),并且该指针未经验证访问
- 内存损坏 - 地址被错误或恶意覆盖 - 通常通过缓冲区溢出(或不足)
- Use-After-Free - 地址有效,但在释放地址(数据)或卸载后(代码)后正在访问该地址
- 位翻转 - RAM(硬件)问题:一个或多个位已翻转(罕见)
有关读取或写入问题,请参阅“读取”或“写入”情节。
有关 执行 问题,请参阅 “执行 ”事件。
请注意,当地址介于 0x0 和 0x10000(64K 之间)时,引发 System.NullReferenceException 异常而不是访问冲突异常的 CLR 应用程序。
其他资源:
想提供反馈? 在此处提交问题。