Сейчас на форуме: tyns777, bezumchik (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Выравнивание адресов секций.
Посл.ответ Сообщение

Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 08 сентября 2019 15:57
· Личное сообщение · #1

Всем привет. Вот у Криса есть два макроса
ALIGN_DOWN(x, align) (x & ~(align - 1))//для адресов секций (физических и виртуальных)
ALIGN_UP(x, align) ((x & (align - 1)) ? ALIGN_DOWN(x, align) + align : x) //для размеров секций
С выравниванием размеров все понятно.
Вот не понятно практическое применение выравнивание адреса.




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 08 сентября 2019 16:12 · Поправил: f13nd
· Личное сообщение · #2


Основная идея в том, что для выборки из памяти данных или инструкций может потребоваться больше циклов обращения к контроллеру памяти. Выравнивание применяется в основном для адресов назначения переходов ну и для операндов инструкций, требующих обязательного выравнивания.

-----
2 оттенка серого




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 08 сентября 2019 16:12
· Личное сообщение · #3

zombi-vadim пишет:
не понятно практическое применение выравнивание адреса

Если помимо копипаста кода еще и содержание книг читать, то подобных вопросов в принципе не возникнет...



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 08 сентября 2019 16:15 · Поправил: zombi-vadim
· Личное сообщение · #4

f13ndММ а можно пожалуйста ссылочку на страничку




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 08 сентября 2019 16:17
· Личное сообщение · #5

--> Link <--

-----
2 оттенка серого




Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 08 сентября 2019 16:23
· Личное сообщение · #6

Ну допустим я создал секцию в файле.Выровнял размер. Потом следующую. Адрес следующей секции должен соответствовать адресу первой плюс ее размер. Никак иначе.




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 08 сентября 2019 16:32 · Поправил: f13nd
· Личное сообщение · #7

zombi-vadim пишет:
Адрес следующей секции должен соответствовать адресу первой плюс ее размер.

Здесь речь не про выравнивания секций. Выравнивание секции связано с размером страницы (4096 байт, 0x1000), менеджер памяти оперирует с этой категорией.

ЗЫ: Не разглядел название темы, сами макросы характерные для выравнивания кода и данных. Вобщем берешь OPTIONAL_HEADER.SectionAlignment из заголовка, затем
(Virtual address + virtual size + (OPTIONAL_HEADER.SectionAlignment-1)) & ~(OPTIONAL_HEADER.SectionAlignment-1)
Это VA следующей секции.
(raw size + (OPTIONAL_HEADER.FileAlignment-1)) & ~(OPTIONAL_HEADER.FileAlignment-1)
Это raw size для текущей секции.

-----
2 оттенка серого


| Сообщение посчитали полезным: zombi-vadim


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 08 сентября 2019 18:09
· Личное сообщение · #8

zombi-vadim

Ты будешь так и дальше задавать вопросы про формат. Открой док по пе формату и изучай загрузчик в WRK. Там ответы на любой твой вопрос.

-----
vx



 eXeL@B —› Вопросы новичков —› Выравнивание адресов секций.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати