Отладка сбоя сегментации

На ваш вопрос, кажется, здесь хорошо ответил, но я просто хочу добавить еще один комментарий к этой теме.

Те, кто проектирует базу данных, должны хорошо знать зарезервированные ключевые слова и избегать их использования. Если вы обнаружите, что кто-то использует его, сообщите об этом (вежливо).

«Зарезервированные ключевые слова не должны использоваться в качестве имен объектов. SQL Server может содержать идентификаторы, содержащие слова, не зарезервированные в более ранней версии, но зарезервированные слова для текущей версии SQL Server. Вы можете ссылаться на объект, используя идентификаторы с разделителями, пока имя не будет изменено. " http://msdn.microsoft.com/en-us/library/ms176027.aspx

и

"Если ваша база данных содержит имена, соответствующие зарезервированным ключевым словам, вы должны использовать идентификаторы с разделителями при обращении к этим объектам. Дополнительные сведения см. в разделе Идентификаторы (DMX). " http://msdn.microsoft.com/en-us/library/ms132178.aspx

-3
задан Jayvon Jackson 13 July 2018 в 05:47
поделиться

1 ответ

Проблема заключается в обработке стека. Сначала вы пишете адрес указателя стека (esp) на указатель кадра (ebp), затем вы меняете ebp и переместите его обратно в esp, что приводит к сбою программы. Ваш код должен быть переписан следующим образом:

do_stuff: 
  push ebp 
  mov ebp, esp ; for correct debugging

  mov eax, 10 

  add eax, 20 
  add eax, 30 
  add eax, 40 
  add eax, 50

  mov esp, ebp ; refresh stack pointer if it was changed
  pop ebp ; get pointer to previous frame
  ret ; the result will be stored in eax
0
ответ дан Live It 17 August 2018 в 13:38
поделиться
  • 1
    Кроме того, что важно, конвенция по умолчанию запрещает вам использовать ebx. Если вы его используете, вы также получите segfault. – Live It 18 July 2018 в 17:24
Другие вопросы по тегам:

Похожие вопросы: