剧集

访问冲突C0000005

访问冲突是应用程序读取、写入或执行无效内存地址时导致的异常类型。

异常代码0xC0000005

第一个异常参数 (0) 是冲突的类型;读取(0)、写入(1)或执行(8)

第二个异常参数 (1) 是冲突的地址。

使用适用于 Windows调试工具调试这些问题时,请按照以下步骤操作:

  1. .exr -1
    • 异常代码
    • Parameter[0] - 读取(0)、写入(1)、执行(8)
    • Parameter[1] - Address
  2. .ecxr
    • 在访问冲突中注册值
    • 汇编程序指令
      • 读取 - 查看逗号右侧的表达式
      • 写入 - 查看逗号左侧的表达式
      • 执行 - 查看表达式的地址
  3. k
    • 在访问冲突中查看调用堆栈

由于以下常见方案之一,内存地址可能无效:

  • NULL 指针 - 0x0 和 0x10000 (64K) 之间的地址 - 例如通常返回的指针返回 NULL 的函数(0x0),并且该指针未经验证访问
  • 内存损坏 - 地址被错误或恶意覆盖 - 通常通过缓冲区溢出(或不足)
  • Use-After-Free - 地址有效,但在释放地址(数据)或卸载后(代码)后正在访问该地址
  • 位翻转 - RAM(硬件)问题:一个或多个位已翻转(罕见)

有关读取写入问题,请参阅“读取”或“写入情节。
有关 执行 问题,请参阅 “执行 ”事件。

请注意,当地址介于 0x0 和 0x10000(64K 之间)时,引发 System.NullReferenceException 异常而不是访问冲突异常的 CLR 应用程序。

其他资源: