В Windows 98 стеки ведут
В Windows 98 стеки ведут себя почти так же, как и в Windows 2000. Но отличия все же есть.
На рис. 16-4 показано, как в Windows 98 может выглядеть регион стека (зарезер вированный с адреса 0x00530000) размером 1 Мб.
Адрес
|
Размер
|
Состояние страницы
|
0x00640000
|
16 страниц (65 536 байтов)
|
Верхняя часть стека (зарезервирована для перехвата обращений к несуществующей области стека)
|
0x0063F000
|
1 страница (4096 байтов)
|
Переданная страница с атрибутом PAGE_READWRITE (задействованная область стека)
|
0x0063E000
|
1 страница (4096 байтов)
|
Страница с атрибутом PAGE_NOACCESS (заменяет флаг PAGE_GUARD)
|
0x00638000
|
6 страниц (24 576 байтов)
|
Страницы, зарезервированные для перехвата переполнения стека
|
0x00637000
|
1 страница (4096 байтов)
|
Переданная страница с атрибутом PAGE_READWRITE (для совместимости с 16-разрядными компонентами)
|
0x00540000
|
247 страниц (1 011 712 байтов)
|
Страницы, зарезервированные для дальнейшего расширения стека
|
0x00530000
|
16 страниц (65 536 байтов)
|
Нижняя часть стека {зарезервирована для перехвата переполнения стека)
|
Рис. 16-4. Так выглядит регион стека сразу после его создания под управлением Windows 98
Во-первых, размер региона на самом дслс 1 Мб плюс 1 28 Кб, хотя мы хотели соз дать стек объемом всего 1 Мб. В Windows 98 система резервирует под стек на 128 Кб больше, чсм было запрошено. Собственно стек располагается в середине этого реги она, а по обеим его границам размещаются блоки по 64 Кб каждый.
Блок перед стеком предназначен для перехвата его переполнения, а блок после стска — для перехвата обращений к несуществующим областям стека. Чтобы понять, какая польза от последнего блока, рассмотрим такой фрагмент кода:
int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PSTR pszCmdLine, int nGmdShow)
{
char szBuf[100];
szBuf[10000] - 0; // обращение к несуществующей области стека
return(0);
}
Когда выполняется оператор присвоения, происходит попытка обращения за ко нец стека потока. Разумеется, ни компилятор, ни компоновщик не уловят эту ошибку в приведенном фрагменте кода, по, если приложение работает под управлением Win
Содержание Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий