Is it not possible to place the XP kernel at either 2Gb or 3Gb virtual address?JAAman wrote:while winXP kernel is in a relocatable file, it is always loaded at the same address
however, vistas kernel is located at an address chosen randomly on each boot (iiuc)
Relocatable kernel
To elaborate, I'd guess XP's startup process is as follows:
* Boot sector loads NTLDR
* NTLDR loads kernel to 0x00400000 (i.e. 4MB) physical. Not sure why this address was chosen, but it's a reasonable one at least.
* Kernel begins executing at its physical address, but prior to initialising paging creates a copy of itself, relocating as it does, for some reason moving itself up by D7000 bytes (perhaps the length of the initialization code). The target address is either 0x804D7000 (normally) or 0xC04D7000 (if the /3GB boot switch is specified).
* After paging is initialised, kernel jumps to itself at the new address.
Just a guess, mind you.
* Boot sector loads NTLDR
* NTLDR loads kernel to 0x00400000 (i.e. 4MB) physical. Not sure why this address was chosen, but it's a reasonable one at least.
* Kernel begins executing at its physical address, but prior to initialising paging creates a copy of itself, relocating as it does, for some reason moving itself up by D7000 bytes (perhaps the length of the initialization code). The target address is either 0x804D7000 (normally) or 0xC04D7000 (if the /3GB boot switch is specified).
* After paging is initialised, kernel jumps to itself at the new address.
Just a guess, mind you.