Я пытаюсь понять, как распределяется память программы во время выполнения и различные разделы или «сегменты» программы (если это правильное слово). Я почти там, но не совсем и мог бы немного помочь.
Я знаю, что в программе есть раздел .data, содержащий только чтение и память для чтения и записи для инициализированных глобальных переменных. Я знаю, что раздел .bss используется для неинициализированных глобальных и статических переменных и предназначен для чтения и записи. Я понимаю кучу и стек.
Следующие вопросы иллюстрируют мою путаницу:
- Что такое раздел .rodata и где он существует?
- Как работает .data? раздел в MASM отличается от раздела .data?
- Должна ли каждая программа иметь стандартные секции .data, .bss, .code,
или эти конвенции просто руководящие принципы?
- Что определяет, какие разделы доступны для чтения, записи и выполнения?
Любая помощь будет принята с благодарностью.