Няма да можете да направите това на 32-битов Windows. Всяка работеща програма, която иска да направи това, ще има поне 3 заредени модула:
- ntdll.dll
- kernel32.dll
- yourApplication.exe
yourApplication.exe по подразбиране ще се зареди на 0x00400000.exe, въпреки че можете да промените този адрес. ntdll.dll и kernel32.dll ще се зареждат на обичайните си адреси за зареждане във високия диапазон 0x7Dxx0000.
При Vista и по-нови операционни системи горният абзац не е верен, тъй като адресите за зареждане са произволни, но dlls все още ще присъстват на техния собствен адрес в първите 2 GB памет.
По този начин няма да имате достатъчно непрекъснато пространство никъде, за да заредите вашия изключително голям PE файл, дори ако стартирате Windows с превключвателя /3GB.
Ако искате добра представа къде ще се зареждат различните DLL файлове, използвайте VMValidator (безплатно), за да визуализирате адресното пространство на вашето приложение. Изгледът на виртуалната памет ви показва графично представяне (1 пиксел на страница от 4 Kb) на паметта. Изгледите Страници и Абзац ви показват действителното състояние на виртуалната памет на всяка страница от паметта и параграф от паметта.
За 64-битов Windows може да успеете да заредите 2GB 64-битов PE файл - със сигурност трябва да има достатъчно непрекъснато пространство, за да може да се зареди в паметта. Що се отнася до това дали тогава ще работи, не мога да кажа, ще трябва да го тествате.
person
Stephen Kellett
schedule
29.03.2010