Debugging 访问\u冲突\u错误\u IP

Debugging 访问\u冲突\u错误\u IP,debugging,crash,windbg,Debugging,Crash,Windbg,我正在试图找出我的应用程序中的崩溃。 WinDbg告诉我以下内容:(使用破折号代替下划线) 最后一次控制转移:从005f5c7e到6e697474 DEFAULT-BUCKET-ID:BAD_IP BUGCHECK-STR:访问冲突 很明显,6e697474不是有效地址。 我有三个问题: 1) “BAD_IP”bucket ID是否表示“错误的指令指针” 2) 这是一个多线程应用程序,因此需要考虑的一点是,我试图调用其函数的对象超出了范围。有人知道这是否会导致相同的错误消息吗? 3) 还有什么会

我正在试图找出我的应用程序中的崩溃。 WinDbg告诉我以下内容:(使用破折号代替下划线)


最后一次控制转移:从005f5c7e到6e697474
DEFAULT-BUCKET-ID:BAD_IP
BUGCHECK-STR:访问冲突

很明显,6e697474不是有效地址。

我有三个问题:
1) “BAD_IP”bucket ID是否表示“错误的指令指针”
2) 这是一个多线程应用程序,因此需要考虑的一点是,我试图调用其函数的对象超出了范围。有人知道这是否会导致相同的错误消息吗?

3) 还有什么会导致这样的错误?我的一位同事建议这可能是堆栈溢出问题,但WinDBG在过去被证明在检测和指出这些问题方面相当可靠。(我不确定它在后台诊断的伏都教)

坏IP是坏指令指针。根据对问题的描述,我认为这是堆栈损坏,而不是堆栈溢出。

我可以想到以下可能导致跳转到无效地址的情况,按可能性的降序排列:

  • 对解除分配的对象调用成员函数。(如你所怀疑)
  • 调用损坏对象的成员函数
  • 调用具有损坏vtable的对象的成员函数
  • 覆盖代码空间的胭脂指针

我将通过在005f5c7e处查找代码并查看正在访问的对象来开始调试。

问一下,是什么将字符串“ttie”写入了这个位置可能会有所帮助?通常,当字节在0x41-0x5A、0x61-0x7A([a-zA-Z])范围内时,表示字符串缓冲区溢出

至于实际被覆盖的内容,可能是返回地址、您正在使用的其他函数指针,或者偶尔对象中的虚拟函数表指针(
vfptr
)被覆盖,指向字符串的中间