0

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


LAST-CONTROL-TRANSFER:从 005f5c7e 到 6e697474
DEFAULT-BUCKET-ID:BAD_IP
BUGCHECK-STR:ACCESS-VIOLATION

对我来说很明显 6e697474 不是一个有效的地址。

我有三个问题:
1)“BAD_IP”存储桶 ID 是否意味着“错误指令指针”?
2) 这是一个多线程应用程序,因此一个考虑因素是我试图调用其函数的对象超出范围。有谁知道这是否会导致相同的错误消息?
3)还有什么可能导致这样的错误?我的一位同事建议这可能是堆栈溢出问题,但 WinDBG 过去已证明在检测和指出这些问题方面相当可靠。(并不是说我确定它在后台进行的巫术诊断)。

4

3 回答 3

2

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

于 2008-09-25T00:00:51.243 回答
0

问一下可能会有所帮助,什么可以将字符串 'ttie' 写入此位置?通常当您有 0x41-0x5A、0x61-0x7A ([a-zA-Z]) 范围内的字节时,它表示字符串缓冲区溢出。

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

于 2008-09-25T13:07:57.607 回答
0

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

  • 在释放的对象上调用成员函数。(正如你所怀疑的)
  • 调用损坏对象的成员函数。
  • 使用损坏的 vtable 调用对象的成员函数。
  • 覆盖代码空间的胭脂指针。

我会通过在 005f5c7e 找到代码并查看那里正在访问哪些对象来开始调试。

于 2008-09-25T00:06:38.703 回答