Я читаю книгу «Ядро Linux. Разработка. Третье издание». Роберт Лав.
Что я прочитал о размере стека в этой книге:
На x86 размер стека настраивается во время компиляции и может быть
или 4 КБ или 8 КБ. Исторически, стек ядра состоит из двух страниц, которые
обычно подразумевает, что это 8 КБ на 32-битных архитектурах и 16 КБ на
64-битные архитектуры - этот размер фиксированный и абсолютный
У меня есть виртуальная машина с 64-битным ядром ubuntu 16.06 4.15. Таким образом, мой размер стека должен быть 16000 байт (16 КБ)
Я пытаюсь проверить поведение stackoverflow. Я создаю массив в стеке, который использует более 16000 байтов.
#include <linux/module.h>
#include <linux/init.h>
int __init overflow_start(void)
{
printk(KERN_INFO "Overflow Test\n");
char array[170000] = {[0 ... 16999] = 'A'};
printk(KERN_ERR "%c\n", array[16999]);
return 0;
}
void __exit overflow_end(void)
{
printk(KERN_ERR "Test success\n");
}
module_init(overflow_start);
module_exit(overflow_end);
MODULE_LICENSE("GPL");
Я думаю, что я должен увидеть панику ядра с разбиванием стека или что-то подобное, но я вижу только правильный вывод. Почему это не сломать стек?