Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vazhnoe.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
843.48 Кб
Скачать

30. Системный вызов ос Windows. Алгоритм системного вызова. Особенность системного вызова из режима ядра.

Систе́мный вы́зов (англ. system call) - обращение прикладной программы к ядру операционной системы для выполнения какой-либо операции (механизм, позволяющий пользовательским программам обращаться к услугам ядра ОС; интерфейс между операционной системой и пользовательской программой). С точки зрения программиста, системный вызов обычно выглядит, как вызов подпрограммы или функции из системной библиотеки. Ядро ОС исполняется в привилегированном режиме работы процессора. Для выполнения межпроцессорной операции или операции, требующей доступа к оборудованию, программа обращается к ядру, которое, в зависимости от полномочий вызывающего процесса, исполняет либо отказывает в исполнении такого вызова.

Алгоритм системного вызова:

1. Загрузить в регистр EAX номер Nt-функции.

2. Загрузить в регистр EDX указатель на вершину параметров в стеке (ESP).

3. Вызвать прерывание для перехода процессора в режим ядра

4. Если используется прерывание, то вызывается обработчик прерывания

5. Если используется специальная инструкция (sysenter или syscall), то происходит вызов функции, адрес которой хранится в специальном внутреннем регистре процессора

6. После перехода в режим ядра все параметры, передаваемые в Nt-функцию, находятся на стеке ПР.

7. По номеру функции в регистре EAX отыскать в nt!KiArgumentTable количество байтов, занимаемое параметрами на стеке.

8. Скопировать параметры со стека ПР на стек ядра.

9. По номеру функции в регистре EAX отыскать в nt!KiServiceTable адрес функции для вызова. 10. Выполнить вызов функции..

11. Если функция вызвана из ПР, выполняется проверка параметров.

12. Вернуться из режима ядра в ПР Процессор восстанавливает из стека сохраненные значения регистров ПР и продолжает исполнение со следующей инструкции.

Системный вызов внутри ядра

Если Nt-функция вызывается внутри ядра: 1. Проверка параметров не выполняется. 2. Такая функция может быть недоступна в ядре, т.е. может не экспортироваться модулем Ntoskrnl.exe. 3. Вызов Nt-функции с передачей ей указателей на память ядра закончится ошибкой.

Если вместо Nt-функций модули ядра вызывают Zw-функцию, она: 1. Загружает в регистр EAX номер функции. 2. Загружает в регистр EDX указатель на вершину параметров в стеке ядра. 3. Вызывает соответствующую ей Nt-функцию. При этом проверка параметров не выполняется.

31. Отладка драйверов ос Windows. Средства отладки драйверов. Посмертный анализ. Живая отладка.

Средства отладки драйверов:

Поддержка отладки ядра обеспечивается самим ядром Windows. Включается: bcdedit /debug on

В процессорах архитектуры x86 имеются специальные отладочные регистры DR0-DR7. Они позволяют отладчику ставить контрольные точки на чтение и запись памяти, а также на порты ввода-вывода.

Традиционный отладчик с пользовательским интерфейсом – windbg.exe.

Отладчик командной строки – kd.exe.

Современное средство отладки: Visual Studio 2013 Professional + WDK 8.1.

Начиная с Windows Vista, обеспечивается создание ряда драйверов, работающих в пользовательском режиме. Для отладки применяется Visual Studio.

Посмертный анализ (postmortem analysis):

Включить в операционной системе создание дампов памяти: Start->Control Panel->System->Advanced system settings->Advanced tab ->Startup and Recovery->Settings->Write debugging information: Small memory dump (256 KB) или Kernel memory dump.

Включить отладку в ядре: bcdedit /debug on

Настроить канал связи отладчика с ядром: bcdedit /dbgsettings

В отладчике включить загрузку символьной информации о ядре Windows: Tools->Options->Debugging->Symbols->[x] Microsoft Symbol Servers.

Открыть файл C:\Windows\MEMORY.DMP в отладчике.

Живая отладка (live debugging):

Соединить два компьютера через один из следующих интерфейсов: Serial, IEEE 1394, USB 2.0.

Включить отладку в ядре: bcdedit /debug on

Настроить канал связи отладчика с ядром: bcdedit /dbgsettings

В отладчике включить загрузку символьной информации о ядре Windows: Tools->Options->Debugging->Symbols->[x] Microsoft Symbol Servers.

В Visual Studio собрать драйвер.

Поставить контрольную точку в исходном коде и установить драйвер.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]