2015-05-15 3 views
2

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

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

+0

Что такое вычислительная архитектура? 64Bit/32Bit? Каков размер процесса/кучи, когда он сбрасывает ядро? около 4 ГБ? –

+0

Выполняете ли вы стандартное соглашение о вызове x64 или используете свое собственное соглашение? Вы сохраняете и восстанавливаете энергонезависимые регистры? –

+0

Компиляция с/RTCs [MSDN] (https://msdn.microsoft.com/en-us/library/8wtf2dfz%28v=vs.120%29.aspx) –

ответ

1

Выполните это в следующем порядке:

  • Compile с предупреждением высокого уровня, и исправить большинство ПРЕДУПРЕЖДЕНИЙ
  • Выполнить анализ кода на проекте, и исправить предупреждения - особенно тот, который говорит слово о буфере/массиве/стеке и т. д.
  • Если повреждение по-прежнему не исправлено, уменьшите размер функции (закомментируйте верхнюю или нижнюю часть функции). Не просто return - буферизация стека может по-прежнему выделяться - комментирование будет пропускать плохой стек из программного кода.
  • Рефакторинг wWinMain - разделить на подзадачи (функции). Одна из функций завершится неудачно из-за стека, и вы найдете реальную проблему.
0

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

спасибо всем респондентам.

Смежные вопросы