eXeL@B —› Вопросы новичков —› Выравнивание адресов секций. |
Посл.ответ | Сообщение |
|
Создано: 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) //для размеров секций С выравниванием размеров все понятно. Вот не понятно практическое применение выравнивание адреса. |
|
Создано: 08 сентября 2019 16:12 · Поправил: f13nd · Личное сообщение · #2 |
|
Создано: 08 сентября 2019 16:12 · Личное сообщение · #3 |
|
Создано: 08 сентября 2019 16:15 · Поправил: zombi-vadim · Личное сообщение · #4 |
|
Создано: 08 сентября 2019 16:17 · Личное сообщение · #5 |
|
Создано: 08 сентября 2019 16:23 · Личное сообщение · #6 |
|
Создано: 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 |
|
Создано: 08 сентября 2019 18:09 · Личное сообщение · #8 |
eXeL@B —› Вопросы новичков —› Выравнивание адресов секций. |