
masm32 программирование ядра, драйверы, учебные пособия, примеры и инструменты (авторство Four-F)
Репозиторий Dreg для его собственных нужд
Программирование ядра masm32, драйверы, руководства, примеры и инструменты (автор: Four-F)
В этот момент в C:\ создаётся .sys
загрузка драйвера:
w2k_load.exe или osrloader.exe выдают ошибку при загрузке beeper.sys — просто проигнорируйте её.
Эта ошибка генерируется самим кодом драйвера, когда он завершает своё собственное выполнение (с помощью этого трюка вам не нужно его выгружать)
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
Итак, если beep.sys корректно загружен в ядро, вы должны услышать звуковой сигнал из динамиков (код драйвера генерирует сигнал)
Когда вам нужно выгрузить драйвер, используйте:
Я модифицировал w2k_load.exe от Sven B. Schreiber, чтобы он работал с Windows 2000 по Windows 10 (манифест...)
распакуйте osrloaderv30.zip и используйте эту программу с графическим интерфейсом:
для более старых Windows просто используйте DbgView.exe, приложенный в этом репозитории. Кстати, я модифицировал его (манифест...)
Для современных Windows используйте последний dbgview.exe с сайта sysinternals и обратитесь к этим материалам для устранения неполадок:
Прочитайте .pdf-файлы в этом репозитории и посмотрите примеры в каталоге KmdKit18/examples
ПРЕДУПРЕЖДЕНИЕ: ВЕСЬ исходный код ASM находится внутри .bat-файлов (пакетный код и код asm смешаны в одном файле)
Пример: advanced\FindShadowTable\FindShadowTable.bat
;@echo off
;goto make
ASM DRIVER CODE GOES HERE
:make
set drv=FindShadowTable
\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
echo.
pause
Этот файл содержит пакетный код, который создаёт .sys, а также содержит сам исходный код драйвера. Так что да, это очень хитро: сборочный скрипт и исходный код находятся вместе.
Это пример того, как найти ServiceDescriptorTableShadow.
Он просто сканирует потоки с ID 80h-400h, пытаясь найти поток, у которого KTHREAD.ServiceTable не равен KeServiceDescriptorTable. Если такой поток найден, его KTHREAD.ServiceTable содержит адрес ServiceDescriptorTableShadow.
Наблюдайте за отладочным выводом драйвера с помощью DbgView (www.sysinternals.com) или используйте SoftICE.
Проверено на: Windows 2000, XP и Server 2003.
Это пример простого легаси (не PnP) фильтр-драйвера PS/2-клавиатуры. ПРЕДУПРЕЖДЕНИЕ: Вам не удастся прикрепить его к стеку USB-клавиатуры.
Проверено на: Windows 2000, XP и Server 2003.
Four-F, [email protected]. Эти файлы макросов из моего пакета cocomac.
Это пример простого легаси (не PnP) фильтр-драйвера PS/2-мыши. ПРЕДУПРЕЖДЕНИЕ: Вам не удастся прикрепить его к стеку USB-мыши.
Проверено на: Windows 2000, XP и Server 2003.
Это пример того, как применить определённые параметры безопасности к именованному объекту устройства, вызвав IoCreateDeviceSecure вместо IoCreateDevice.
Поскольку процедура IoCreateDeviceSecure не является частью операционной системы, мы связываем wdmsec.lib, который содержит все необходимые процедуры.
Библиотека wdmsec.lib, которую вы найдёте здесь, — не та, что поставляется с DDK. Мне пришлось пересобрать её, чтобы уменьшить размер, удалив ненужные элементы.
Это пример того, как создавать файл, записывать в него, читать из него и удалять его.
Используйте KmdManager для регистрации/отмены регистрации и запуска. Наблюдайте за его отладочным выводом с помощью DbgView (www.sysinternals.com) или используйте SoftICE.
Проверено на: Windows 2000, XP и Server 2003.
Это пример того, как упаковать драйвер в ресурсы.
Проверено на: Windows 2000, XP и Server 2003.
Способ узнать, работает ли система в безопасном режиме или нет.
Используйте KmdManager для регистрации/отмены регистрации и запуска. Наблюдайте за его отладочным выводом с помощью DbgView (www.sysinternals.com) или используйте SoftICE.
Проверено на: Windows 2000, XP и Server 2003.
basic/MemoryWorks/LookasideList
Это пример того, как использовать список lookaside и двунаправленный связанный список для управления блоками памяти, выделенными из списка lookaside.
Используйте KmdManager для регистрации/отмены регистрации и запуска/остановки. Наблюдайте за его отладочным выводом с помощью DbgView (www.sysinternals.com) или используйте SoftICE.
Проверено на: Windows 2000, XP и Server 2003.
Это пример того, как обрабатывать исключения с помощью SEH. Но помните. ВЫ НЕ МОЖЕТЕ ОБРАБАТЫВАТЬ ВСЕ ИСКЛЮЧЕНИЯ С ПОМОЩЬЮ SEH В РЕЖИМЕ ЯДРА!
Используйте KmdManager для регистрации/отмены регистрации и запуска/остановки. Наблюдайте за его отладочным выводом с помощью DbgView (www.sysinternals.com) или используйте SoftICE.
Проверено на: Windows 2000, XP и Server 2003.
basic/MemoryWorks/SharedSection
Это пример того, как использовать именованный объект-раздел для разделения памяти между процессом пользовательского режима и драйвером режима ядра.
Проверено на: Windows 2000, XP и Server 2003.
basic/MemoryWorks/SharingMemory
Это пример одного из возможных способов разделения буфера памяти между пользовательским режимом и режимом ядра.
Проверено на: Windows 2000, XP и Server 2003.