может или не может указывать на обратный адрес.

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

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

Код из этого вопроса:

#include <stdio.h>

int main()
{
    for(int i=0;i<10;i++){
        int k=0;
    }
}

Код сборки, сгенерированный этим компилятором:

00000000004004d6 <main>:
  4004d6:       55                      push   rbp
  4004d7:       48 89 e5                mov    rbp,rsp
  4004da:       c7 45 f8 00 00 00 00    mov    DWORD PTR [rbp-0x8],0x0
  4004e1:       eb 0b                   jmp    4004ee <main+0x18>
  4004e3:       c7 45 fc 00 00 00 00    mov    DWORD PTR [rbp-0x4],0x0
  4004ea:       83 45 f8 01             add    DWORD PTR [rbp-0x8],0x1
  4004ee:       83 7d f8 09             cmp    DWORD PTR [rbp-0x8],0x9
  4004f2:       7e ef                   jle    4004e3 <main+0xd>
  4004f4:       b8 00 00 00 00          mov    eax,0x0
  4004f9:       5d                      pop    rbp
  4004fa:       c3                      ret    

Локальные переменныеi в[rbp-0x8] а такжеk в[rbp-0x4].

Кто-нибудь может пролить свет на эту проблему прерывания? Оборудование действительно переключается на системный стек? Как? Я не прав в моем понимании?

Ответы на вопрос(1)

Ваш ответ на вопрос