Debugging 访问\u冲突\u错误\u IP
我正在试图找出我的应用程序中的崩溃。 WinDbg告诉我以下内容:(使用破折号代替下划线)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) 还有什么会
最后一次控制转移:从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
)被覆盖,指向字符串的中间