Посл.ответ |
Сообщение |
Ранг: 16.3 (новичок), 2thx Активность: 0.15↗0.22 Статус: Участник
|
Создано: 07 сентября 2019 13:02 · Личное сообщение · #1
Привет. Итак значение VirtualSize это размер секции в виртуальной памяти. Вроде понятно. Хорошо берем физический размер данных выравниваем на SectionAlignment и.. получаем неправильное значение. Открываем файл в любом редакторе смотрим значения VirtualSize секций. Они практически всегда меньше SizeOfRawData, даже в файлах где SectionAlignment = FileAlignment. Получается что линкер не выравнивает значения, почему? В надежде что загрузчик их потом выровняет сам? Посмотрим к примеру секцию ресурсов. Вроде там точно все данные инициализированные. Но значение VirtualSize не совпадает ни с размером выровненных данных ни просто с размером данных. Что за значение линкер туда ставит то?
| Сообщение посчитали полезным: |
|
Ранг: 43.1 (посетитель), 20thx Активность: 0.16↗0.29 Статус: Участник
|
Создано: 07 сентября 2019 13:39 · Личное сообщение · #2
Посмотрел бинарники скомпиленные в делфи и в с++, VirtSize меньше либо равно raw data size, при этом raw data size округлен до 0x100
| Сообщение посчитали полезным: |
Ранг: 16.3 (новичок), 2thx Активность: 0.15↗0.22 Статус: Участник
|
Создано: 07 сентября 2019 14:13 · Личное сообщение · #3
user99SectionAlignment = FileAlignment. Однако VirtualSize меньше SizeOfRawData. Делаем вывод значения VirtualSize не выравниваются. VirtualSize содержит некий размер данных вычисленный линкером.Как он его получает?
| Сообщение посчитали полезным: |
Ранг: 337.5 (мудрец), 348thx Активность: 2.11↗2.42 Статус: Участник
|
Создано: 07 сентября 2019 14:27 · Личное сообщение · #4
zombi-vadimНадёжнее всего посмотреть на сам загрузчик:
..
----- vx | Сообщение посчитали полезным: |
Ранг: 271.2 (наставник), 331thx Активность: 0.32↗1.49 Статус: Участник
|
Создано: 07 сентября 2019 14:27 · Личное сообщение · #5
В секции могут быть неинициализированные переменные. То есть те, в которые загрузчику ничего не надо помещать и в сам исполняемый файл они не входят. Разница между выравненным raw size и virtual size - пространство под неинициализированные глобальные переменные.
----- 2 оттенка серого | Сообщение посчитали полезным: |
Ранг: 568.2 (!), 465thx Активность: 0.55↗0.57 Статус: Участник оптимист
|
Создано: 07 сентября 2019 14:38 · Личное сообщение · #6
zombi-vadim пишет: Что за значение линкер туда ставит то? Он ставит столько сколько нужно для работы программы, а загрузчик потом сам выравнивает в большую сторону
----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: |
Ранг: 16.3 (новичок), 2thx Активность: 0.15↗0.22 Статус: Участник
|
Создано: 07 сентября 2019 14:54 · Поправил: zombi-vadim · Личное сообщение · #7
ClockManВ итоге получаем. VirtualSize содержит не выровненный размер. В нем ровно столько сколько необходимо для правильной работы программы. Ни к какому общему физическому размеру он отношения не имеет.
| Сообщение посчитали полезным: |
Ранг: -1.9 (гость), 3thx Активность: 0.16↘0.1 Статус: Участник
|
Создано: 08 сентября 2019 08:50 · Личное сообщение · #8
zombi-vadim а каково практическое применение данной информации, или чисто простой интерес, мне для общего развития, так сказать?
| Сообщение посчитали полезным: |