Когда я запускаю отладчик WinDbg и начинаю отлаживать локальное ядро мне пишет: Код (Text): Executable search path is: Windows XP Kernel Version 2600 (Service Pack 2) UP Free x86 compatible Product: WinNt, suite: TerminalServer SingleUserTS Built by: 2600.xpsp_sp2_rtm.040803-2158 Kernel base = 0x804d7000 PsLoadedModuleList = 0x8055ab20 Меня интересует, откуда берётся Kernel base = 0x804d7000. ну 0x80000000 понятно - сюда ntldr грузить ядро, некоторые драйверы и т.д. 0x400000 - это Image base, прописана в самом ntoskrnl.exe, т.е получается что база должна была быть 0x80400000, почему же к ней прибавляется ещё 0xd7000 ? Что представляет из себя это число кто-нибудь знает ?
Первый свободный регион куда влазит ядро. Это никакое не магическое число, вычислить его заранее практически нереально.
n0name, я проверял на двух компах, на рабочем, на домашнем да ещё и на виртуалках, итого можно считать 4 системы (разные версии, разное к-во пакетов обновлений и т.д) и везде это число одно. Кстати, раз вычислить его почти невозможно, как его узнаёт WinDbg ? Да, и ещё: Код (Text): Первый свободный регион куда влазит ядро Немного непонятно о каком регионе идёт речь и почему нельзя просто записать в 0x80400000 ?
а у меня 0x80800000, и что? вычислить невозможно, но можно прочитать сохраненное значение базы, полученное аллокатором. регион памяти. на начальном этапе они залинкованы в список. и аллокатор проходит их в поисках рподходящего. Почему не 0x80400000? С таким же успехом можно спросить почему не 0x90400000.