Собрал тестовый пример Код (Text): #include <stdio.h> main() { char c[5] = { 0, 1, 2, 3, 4 }; __asm { nop nop nop } } компилятором C/C++ из VC++ EE 2008 (без всяких флагов). Дизассемблирование секции .text дало следующий результат: Код (Text): 00401000: 55 push ebp 00401001: 8B EC mov ebp,esp 00401003: 83 EC 0C sub esp,0Ch 00401006: A1 00 A0 40 00 mov eax,dword ptr ds:[0040A000h] 0040100B: 33 C5 xor eax,ebp 0040100D: 89 45 FC mov dword ptr [ebp-4],eax 00401010: C6 45 F4 00 mov byte ptr [ebp-0Ch],0 00401014: C6 45 F5 01 mov byte ptr [ebp-0Bh],1 00401018: C6 45 F6 02 mov byte ptr [ebp-0Ah],2 0040101C: C6 45 F7 03 mov byte ptr [ebp-9],3 00401020: C6 45 F8 04 mov byte ptr [ebp-8],4 00401024: 90 nop 00401025: 90 nop 00401026: 90 nop Мне непонятны следующие вещи: 1) какой смысл выделять для массива из 5 байт 12 байт? Почему не 8? 2) зачем выполняются 2 операции 00401006-0040100B Код (Text): 00401006: A1 00 A0 40 00 mov eax,dword ptr ds:[0040A000h] 0040100B: 33 C5 xor eax,ebp
[0040A000h] _security_cookie. [ebp-4] GSCookie. Это способ обнаружения перезаписи адреса возврата в случае переполнения буфера. Если адрес возрата будет перезаписан, то GSCookie тоже перезапишется. Перед выходом из функции происходит проверка GSCookie (вызов _security_check_cookie()). /GS- Ключ для отключения GSCookie.