воскресенье, 7 сентября 2008 г.

Про ntdll.dll

Стоит 32-разрядная Windows XP Pro SP3 и процессор семейства x86. В данном случае имеет место такое разбиение виртуального адресного пространства каждого процесса (оно составляет 4 Гб) на разделы:
  • Для выявления нулевых указателей (64 Кб). Диапазон адресов: 0x0000000-0x0000FFFF.
  • Для кода и данных пользовательского режима. Диапазон адресов:0x00010000-0x7FFEFFFF.
  • Закрытый (64 Кб). Диапазон адресов:0x7FFF0000-0x7FFFFFFF.
  • Для кода и данных режима ядра. Диапазон адресов: 0x800000000-0xFFFFFFFF.
Первый и третий разделы зарезервированы операционной системой и любая попытка чтения или записи в них вызывает нарушение доступа, в результате чего процесс завершается. Во втором разделе содержится основной объем данных, принадлежащих процессу. Сюда загружаются все exe- и  dll-модули, которые можно просмотреть с помощью, например, утилиты Listdlls и увидеть  их базовые адреса и отображаемый размер.
Наконец, в четвертом разделе содержится код операционной системы, драйверы   устройств и код низкоуровневого управления потоками, памятью, файловой системой, сетевой поддержкой, a так же драйвера программ специального назначения (например, антивирус). Последние, как-бы имитируя драйвер устройства, получают доступ к таким системным сервисам, которые не доступны через Windows API. Модули, загруженные в этот раздел, можно увидеть с помощью AVZ, выбрав из "Сервиса" "Модули пространства ядра".
Тут меня заинтересовал ntdll.dll —один из основных системных файлов Windows, реализующий внутренние функции поддержки и интерфейсы диспетчера системных сервисом с функциями исполнительной системы. Если к его базовому  адресу 0x7C900000 формально прибавить его размер в памяти 0xB0000, то получим адрес 0x7C9B0000, который находится ниже (или левее :) ) адреса 0x80000000, т.е. получается, что ntdll.dll загружен в третий раздел. Но это и не удивительно, т.к. он имеется в списке, отображаемом Listdlls.
Его так же можно увидеть в списке dll-файлов, отображаемом Process Explorer. Тогда непонятно почему он имеется в списке "Модули пространства ядра".

Комментариев нет: