Согласно спецификации это 32-битное значение без знака для изображения PE32 +, как и изображение PE32.
Однако в моем тестировании с 3264-разрядные и 64-разрядные приложения (файлы PE32 / PE32 +) в Windows 7 SP1 Home Premium x64, максимальный размер файла для любого из них составляет от 1,8-1,85 ГБ .
Я проверил, создав очень простой исполняемый файл C с Visual Studio (~ 8 КБ для 32-разрядных и 9 КБ для 64-разрядных) и добавил пустой раздел кода в заголовок PE до тех пор, пока Windows больше не будет загружать его., а затем двоичный поиск предела.Просмотр процесса с помощью vmmap показал, что почти все первые 2 ГБ адресного пространства были образом (включая любые впоследствии загруженные DLL, такие как kernel32.dll).Для меня ограничение было одинаковым как для 32-, так и для 64-битных процессов.У 64-битного процесса был установлен флаг в разделе заголовка файла NT, указывающий, что он может обрабатывать адреса> 2 ГБ.Это также может выделить память для разделов без изображений, превышающих 2 ГБ.
Похоже, что изображение должно полностью поместиться в нижние 2 ГБ пространства VA для процесса, что означает, что SizeOfImage эффективно обрабатывает 32-разрядное целое число со знаком со стороны загрузчика.