Почему [ebp-8] является местоположением первой локальной переменной в Visual C ++? - PullRequest
0 голосов
/ 16 апреля 2019

Когда я программирую в Visual Studio 2019, я ввожу следующий код, скомпилирую его в режиме отладки и выполняю некоторую разборку.Я обнаружил, что переменная "c" находится по адресу ebp-8 (в myfunction).Однако из книг я прочитал, что «первая локальная переменная должна появиться в адресе ebp-4».Есть что-то с visual studio или с режимом отладки?

int myfunction (int a, int b) {013017B0 55 push ebp
013017B1 8B EC mov ebp, esp
013017B3 81 EC D8 00 0000 sub esp, 0D8h
013017B9 53 push ebx
013017BA 56 push esi
013017BB 57 push edi
013017BC 8D BD 28 FF FF FF FEA LEA, [ebp + FFFFFF28h]
013017C00 00 00 mov ecx, 36h
013017C7 B8 CC CC CC CC CC mov eax, 0CCCCCCCCh
013017CC F3 AB reps dword ptr es: [edi]
013017CE B9 08 C0 30 01 mov ecx, 130C008h
013017D3 E8 3F FA FF FF call 01301217

                   //Nonsense above.


int c = a + b;           

013017D8 8B 45 08 mov eax, pword ptr [ebp + 8] // a

013017DB 03 45 0C добавить eax, dword ptr[ebp + 0Ch] // b

013017DE 89 45 F8 mov dword ptr [ebp-8], eax // Почему это не [ebp-4]?} * * Тысяча двадцать-один

1 Ответ

0 голосов
/ 11 мая 2019

Я выяснил, что Visual Studio оставляет 8 байтов между локальными переменными в режиме debug , но в режиме release он работает нормально, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...