ACCESS_VIOLATION_BAD_IP - PullRequest
       15

ACCESS_VIOLATION_BAD_IP

0 голосов
/ 25 сентября 2008

Я пытаюсь выяснить сбой в моем приложении. WinDbg говорит мне следующее: (используя тире вместо символов подчеркивания)


ПОСЛЕДНЕЕ УПРАВЛЕНИЕ-ПЕРЕДАЧА: от 005f5c7e до 6e697474
DEFAULT-BUCKET-ID: BAD_IP
BUGCHECK-STR: НАРУШЕНИЕ ДОСТУПА

Для меня очевидно, что 6e697474 НЕ является действительным адресом.

У меня три вопроса:
1) Идентификатор корзины "BAD_IP" означает "Указатель неверной инструкции?"
2) Это многопоточное приложение, поэтому одним из соображений было то, что объект, функцию которого я пытался вызвать, вышел из области видимости. Кто-нибудь знает, приведет ли это к тому же сообщению об ошибке?
3) Что еще может вызвать такую ​​ошибку? Один из моих коллег предположил, что это может быть проблема переполнение стека , но WinDBG в прошлом довольно надежно обнаруживал и указывал на них. (не то, чтобы я был уверен в вуду, которое он делает на заднем плане, чтобы диагностировать это).

Ответы [ 3 ]

2 голосов
/ 25 сентября 2008

Bad-IP - плохой указатель инструкции. Из описания вашей проблемы я бы предположил, что это повреждение стека вместо переполнения стека.

0 голосов
/ 25 сентября 2008

Может быть полезно спросить, что могло написать строку 'ttie' в это место? Часто, когда у вас есть байты в диапазоне 0x41-0x5A, 0x61-0x7A ([a-zA-Z]), это указывает на переполнение строкового буфера.

Что касается того, что на самом деле было перезаписано, это может быть адрес возврата, какой-либо другой указатель на функцию, который вы используете, или иногда указатель таблицы виртуальных функций (vfptr) в объекте перезаписывается, чтобы указывать на середину строка.

0 голосов
/ 25 сентября 2008

Я могу подумать о следующих вещах, которые могут вызвать переход на неверный адрес в порядке убывания вероятности:

  • вызов функции-члена для освобожденного объекта. (как вы подозреваете)
  • вызов функции-члена поврежденного объекта.
  • вызов функции-члена объекта с поврежденной виртуальной таблицей.
  • указатель на румяна перезаписывает пространство кода.

Я бы начал отладку, найдя код по адресу 005f5c7e и посмотрев, к каким объектам там обращаются.

...