Нужно ли инициализировать стек в GAS? - PullRequest
1 голос
/ 29 мая 2011

Hallo!В настоящее время я изучаю основы сборки.Ранее я использовал TASM и Intel-синтаксис.Там мне пришлось несколько раз инициализировать стек.Но сейчас я использую GNU Assembler и AT & T синтаксис.Я просмотрел множество примеров и не увидел никакого объявления / инициализации стека.Интересно, должен ли я это сделать?Или, может быть, это сделано без моей помощи здесь?Если это так, как именно он инициализируется автоматически?Есть ли риски потерять важную информацию в дата-сегменте?Я также не заметил никаких указаний относительно стека.

Спасибо за ваши ответы заранее!О, еще одна вещь: есть ли хорошие книги по программированию в ASM (GAS) для Unix-подобных систем?

1 Ответ

0 голосов
/ 29 мая 2011

ОС с виртуальной памятью управляет стеком несколько иначе, чем ОС с виртуальной памятью.

  • Нет виртуальной машины (например, DOS, µClinux! MMU): вы резервируете некоторое физическое место для стека.В DOS это зависит от используемой модели памяти, для более крупных моделей памяти вы будете выделять некоторую память и указывать на нее SS (сегмент стека).В µClinux вы сохраните размер стека в поле заголовка формата исполняемого файла, см., Например, формат bFLT .
  • VM → стек увеличивается динамически, до настраиваемого предела(см. ulimit -s в Linux).Поскольку каждый процесс имеет свое собственное виртуальное адресное пространство, между стеком и любой другой отображаемой областью виртуальной памяти много места.
...