Вы не сможете сделать это на 32-битной Windows. Любая работающая программа, которая хочет сделать это, будет загружена как минимум в 3 модуля:
- ntdll.dll
- kernel32.dll
- yourApplication.exe
yourApplication.exe по умолчанию будет загружаться по адресу 0x00400000.exe, хотя вы можете изменить этот адрес. ntdll.dll и kernel32.dll будут загружаться с обычными адресами загрузки в диапазоне высоких значений 0x7Dxx0000.
В Vista и более поздних операционных системах приведенный выше абзац не соответствует действительности, поскольку адреса загрузки рандомизированы, но библиотеки dll по-прежнему будут присутствовать по собственному адресу в первых 2 ГБ памяти.
Таким образом, у вас не будет достаточно места для загрузки исключительно большого PE-файла, даже если вы запускаете Windows с ключом / 3GB.
Если вы хотите получить четкое представление о том, где будут загружаться различные библиотеки DLL, используйте VMValidator (бесплатно) для визуализации адресного пространства вашего приложения. Представление виртуальной памяти показывает графическое представление (1 пиксель на страницу 4 КБ) памяти. Представления «Страницы» и «Абзац» показывают фактическое состояние виртуальной памяти каждой страницы памяти и абзаца памяти.
В 64-битной Windows вы можете загрузить 64-битный PE-файл объемом 2 ГБ - обязательно должно быть достаточно непрерывного пространства, чтобы он мог загружаться в память. Что касается того, сработает ли это тогда, я не могу сказать, вам придется это проверить.