Значения для любых инициализированных данных хранятся в этом разделе, если бинарный файл хочет зарезервировать место в памяти для любых неинициализированных данных, тогда виртуальный размер будет больше размера необработанных данных.
Вы не найдете эти данные в файле, так как их не обязательно должно быть. Адреса, которые ссылаются на данные (в разделе кода), выпекаются в двоичном формате, чтобы они указывали на правильное местоположение, когда оно загружается в память.
Если загрузчик не зарезервировал это место спереди, тогда глобальные блоки и т. Д. Должны были бы быть выделены на кучу до того, как они могут быть использованы.
От PE spec:
[SizeOfRawData есть] размер секции (для объектных файлов) или размера инициализированных данных на диске (для файлов изображений). Для исполняемых файлов это должно быть кратно FileAlignment из дополнительного заголовка . Если это меньше, чем VirtualSize, остальная часть раздела заполняется нулями. Поскольку поле SizeOfRawData округлено, но поле VirtualSize отсутствует, возможно, что SizeOfRawData будет больше, чем VirtualSize. Если в разделе содержится только неинициализированных данных, это поле должно быть равно нулю.
Edit: Ответ на вопрос о SizeOfUninitializedData.
Поле SizeOfUninitializedData
в дополнительном заголовке - это просто размер раздела .bss
(или их сумма, если их несколько). У вашего двоичного файла не было отдельного раздела для этих данных, поэтому он был равен нулю. Поскольку разделы выровнены по определенным границам, может быть более эффективным сохранить некоторое пространство в конце существующего раздела, чем использовать отдельный.
Хорошо, так что, если я понимаю ваш ответ, разница в размере неинициализированных данных, но, как вы можете видеть в приведенной ссылке, размер неинициализированных данных равен 0. – eclipse
@eclipse, ответил ли ответ на ваш вопрос? –
Все еще неясно :) так, вы имеете в виду, что мой раздел .data на самом деле .data + .bss? И что нам нужно зарезервировать для него виртуальную память, но поскольку она будет заполнена 0, мы выравниваем необработанный размер, как будто нет .bss? (Может быть, я просто сказал что-то ужасно неправильно :)) – eclipse