Методы отладки стека

Я сталкиваюсь с повреждением стека, которое прерывается прямо перед возвращением wWinMain функция.. кто-нибудь может предложить мне способ или несколько советов, как отладить повреждение стека? (желательно в winDbg)

Я знаю, что повреждение происходит в процедуре, которую я написал в masm для своей программы, но стек кажется нормальным в течение всей процедуры. rsp Регистрация имеет все, что нужно в течение всего времени..

2 ответа

Выполните это по порядку:

  • Компилируйте с предупреждением высокого уровня и исправьте большинство предупреждений
  • Запустите анализ кода проекта и исправьте предупреждения, особенно те, которые говорят о буфере / массиве / стеке и т. Д.
  • Если повреждение все еще не исправлено, уменьшите размер функции (закомментируйте верхнюю или нижнюю часть функции). Не просто return - буфер поврежденного стека все еще может быть выделен - комментирование исключит плохой стек из программного кода.
  • Рефакторинг wWinMain - разделить на подзадачи (функции). Одна из функций потерпит неудачу из-за стека, и вы обнаружите реальную проблему.

Хорошо, мне удалось отследить ошибку! Я переписал содержимое переменной по ошибке, переместив значение в qword ptr[rsp+20h], 20h(смещение) было слишком далеко, и оно переписало мою переменную HINSTANCE.:) Повреждение стека произошло вокруг переменной 'instance'. удалось отследить с помощью WinDbg хорошую практику.

спасибо всем ответчикам.

Другие вопросы по тегам