Я отлаживаю простую программу на GDB и вижу адреса локальных переменных внутри стекового фрейма, которые выглядят следующим образом: 0xffffbc10
, 0xffffc340
и т. Д.
Насколько я понимаю, адреса пространства ядра занимают 0xffffffff
до 0xcfffffff
, а адреса пространства пользователя начинаются с 0xbfffffff
.
Почему здесь расхождение?
Редактировать: обратите внимание, что я отключил рандомизацию виртуального адресного пространства, защитники стека и собираю с -m32. Вот моя команда компиляции, если она помогает:
gcc -m32 -z execstack -fno-stack-protector -ggdb -static test.c -o test