2017-01-02 13 views
0

Видимо, управление памятью linux основано только на страницах, не имея понятия «сегмент».Является ли «сегмент памяти» концепцией Intel в программировании сборки?

Но все же, на собрании & t есть понятие «раздел», например раздел кода, раздел данных, так же как «сегмент» intel assmebly, и они выглядят очень похожими.

Так что мой вопрос: «раздел» имеет такое же значение, как «сегмент» в сборке intel?

+1

См. [** Искусство сборки - сегменты памяти **] (https://courses.engr.illinois.edu/ece390/books/artofasm/CH04/CH04-1.html#HEADING1-64). (остальная часть книги тоже очень хороша) –

+1

Это не «сборка« at & t », которая имеет разделы, но ELF (и PE), и неважно, используете ли вы ассемблер intel или at & t syntax. – Jester

ответ

2

Линкеры собирают страницы с одинаковыми атрибутами в «разделы» или «разделы программы» или «psects». Обычно по умолчанию используется один раздел для каждого атрибута памяти. Как правило:

  1. Readonly
  2. Чтение/запись
  3. Спрос Ноль
  4. Исполняемые

Однако большинство линкеры выдвигали настроек, которые позволяют программисту настроить psects по-разному.

Некоторые ассемблеры имеют директивы psect для размещения данных в определенном разделе.

Иногда пекты называются «сегментами». Например, «сегмент кода»

Есть также сегменты оборудования, которые, как вы полагаете, в значительной степени являются поврежденным мозгом аспектом многих процессоров Intel (хотя некоторые другие процессоры используют [d] их). В 64-битном режиме Intel наконец-то сбросила сегменты. Сегмент в этом использовании осуществляется через сегментные регистры.

Таким образом, это два разных понятия.

+1

Это не Intel, который их бросил, это AMD. – fuz

+0

Директивы Microsoft classic для ассемблера - .text (code). .data (инициализированные данные), .data? или .bss (неинициализированные данные, в некоторых случаях могут быть обнулены), .stack, .... Microsoft/Intel в основном пошла на плоскую модель, начиная с 32-битного кода (Watcom C/C++ 10.0 поддерживал это с помощью режима Windows 3.1x winmem32). Windows по-прежнему использует FS или GS в режиме 64 бит для переменных «на поток» (например, семя для rand()), но код, который я видел для «для потока», отображает эту область в 64-битное виртуальное адресное пространство , – rcgldr