База ntoskrnl.exe

Тема в разделе "WASM.NT.KERNEL", создана пользователем Sheph, 14 апр 2008.

  1. Sheph

    Sheph New Member

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

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Первый свободный регион куда влазит ядро. Это никакое не магическое число, вычислить его заранее практически нереально.
     
  3. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    n0name, я проверял на двух компах, на рабочем, на домашнем да ещё и на виртуалках, итого можно считать 4 системы (разные версии, разное к-во пакетов обновлений и т.д) и везде это число одно.
    Кстати, раз вычислить его почти невозможно, как его узнаёт WinDbg ?
    Да, и ещё:
    Код (Text):
    1. Первый свободный регион куда влазит ядро
    Немного непонятно о каком регионе идёт речь и почему нельзя просто записать в 0x80400000 ?
     
  4. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Sheph
    Читай про устройство адресного пространства и о процессе настройки исполняемых образов в нём.
     
  5. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    Всё, понял почему так. Но однако мне всё равно не понятно как WinDbg узнаёт эту базу
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    через NtSystemDebugControl
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    а у меня 0x80800000, и что?
    вычислить невозможно, но можно прочитать сохраненное значение базы, полученное аллокатором.
    регион памяти. на начальном этапе они залинкованы в список. и аллокатор проходит их в поисках рподходящего. Почему не 0x80400000? С таким же успехом можно спросить почему не 0x90400000.
     
  8. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    n0name, да действительно, спасибо, всё понятно. Тема закрыта