
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가 커널에 올바르게 로드되었다면 스피커에서 비프음이 들려야 합니다(드라이버 코드가 비프음을 생성합니다).
드라이버를 언로드해야 할 때는 다음을 사용하세요:
저는 Sven B. Schreiber의 w2k_load.exe를 Windows 2000부터 Windows 10까지 작동하도록 수정했습니다(매니페스트...).
osrloaderv30.zip의 압축을 풀고 이 GUI 프로그램을 사용하세요:
이전 Windows에서는 이 저장소에 첨부된 DbgView.exe를 사용하면 됩니다. 참고로 저는 이 파일을 수정했습니다(매니페스트...).
최신 Windows에서는 sysinternals 웹 사이트의 최신 dbgview.exe를 사용하고 문제 해결을 위해 다음을 확인하세요:
이 저장소의 .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를 생성하는 BATCH 코드가 들어 있을 뿐만 아니라 드라이버 소스 코드 자체도 포함되어 있습니다. 그래서 맞습니다. 매우 까다롭게도 빌드 스크립트와 소스 코드가 함께 있습니다.
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.
IoCreateDevice 대신 IoCreateDeviceSecure를 호출하여 명명된 디바이스 개체에 특정 보안 설정을 적용하는 방법을 보여주는 예제입니다.
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.
basic/MemoryWorks/SystemModules
커널 모드에서 메모리를 할당하는 방법을 보여주는 예제입니다. 메모리를 쓸데없이 할당하지 않도록 일부 시스템 정보로 채웁니다.
KmdManager로 등록/등록 해제하고 시작/중지하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
레지스트리 키를 생성, 설정, 읽기 및 삭제하는 방법을 보여주는 예제입니다.
KmdManager로 등록/등록 해제하고 시작하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
코드를 서로 다른 PE 섹션에 배치하는 방법을 보여주는 예제입니다.
basic/Synchronization/MutualExclusion
리소스에 대한 상호 배타적 액세스를 구현하는 방법을 보여주는 예제입니다.
KmdManager로 등록/등록 해제하고 시작/중지하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
[basic/Synchronization/SharedEvent - ProcessMon](KmdKit18/examples/basic/Synchronization/SharedEvent - ProcessMon)
어떤 종류의 이벤트가 발생했음을 사용자 모드에 알리는 방법을 보여주는 예제입니다.
테스트 환경: Windows 2000, XP 및 Server 2003.
basic/Synchronization/TimerWorks
타이머를 생성, 설정, 대기 및 취소하는 방법을 보여주는 예제입니다.
KmdManager로 등록/등록 해제하고 시작/중지하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
WorkItem 예제