Kernel mode2013. 8. 20. 16:20

드라이버 개발을 하다보면 커널의 무결성 확인을 위해 ntoskrnl.exe를 메모리에 맵핑하여 쓰게되는데, 어떤 컴퓨터에서는 커널 모듈이 ntoskrnl.exe이고 다른 컴퓨터에서는 ntkrnlpa.exe인 경우가 있다. OS에 따라 다른가보다 하고 넘어갔다가 그게 아닌 것 같다는 느낌이 들어 자세히 살펴보게 됐다.

우선 WIndows Internals에 나온 윈도우 컴포넌트 목록은 다음과 같다.


핵심 윈도우 운영체제 컴포넌트 목록 (in Windows Internals)

 파일명

컴포넌트 

Ntoskrnl.exe 

익스큐티브와 커널 

Ntkrnlpa.exe (32비트 시스템만)

물리 메모리를 64GB까지 어드레싱할 수 있는 물리 주소 확장(PAE)을 지원하는 익스큐티브와 커널 

Hal.dll 

하드웨어 추상화 계층(Hardware abstraction layer) 

Win32k.sys 

윈도우 서브시스템의 커널모드 부분 

Ntdll.dll

내부 지원 함수와 익스큐티브 함수에 대한 시스템 서비스 디스패치 스텁 

Kernel32.dll, Advapi32.dll, User32.dll, Gdi32.dll

핵심 윈도우 서브시스템 DLL


이것만으로는 정확한 내용을 알 수가 없어 좀 더 구글링을 해보았다.

구글링 중 MS 세미나에서 QnA를 정리해놓은 블로그가 있어 참조하였다. (http://foglamp1.egloos.com/4227361)

그 중 몇개 도움 될만한 내용만 가져와봤다.



Q. kernel은 몇 개의 파일로 되어 있느냐?

A.
Ntoskrnl.exe이라는 하나의 파일로 되어 있다.
Ntoskrnl.exe라는 하나의 executive image로 되어 있으나 MS에는 다양한 형태의 kernel을 제공한다.

Four retail(release) variations
NTOSKRNL.EXE --------- Uniprocessor
NTKRNLMP.EXE --------- Multiprocessor

Windows 2000 adds PAE(Physical address extension) versions - must boot /PAE
NTKRNLPA.EXE ---------- Uniprocessor
NTKRPAMP.EXE ---------- Multiprocessor

Two chacked build(debug) variations
NTOSKRNL.EXE NTKRNLMP.EXE Debug multiprocessor
NTKRNLPA.EXE NTKRPAMP.EXE Debug multiprocessor /extended addressiong

Q. PAE(Physical Address extension) 뭐냐?
A. 기본적으로 process는 4G의 memory를 필요로 하는데 그 이상의 memory를 쓰고자 할 때 boot.ini에 PAE 옵션을 넣어서 확장할 수 있다.


* PAE 활성화 및 관련 내용

[PAE 활성화]
bcdedit /set pae ForceEnable

[PAE 비활성화]
bcdedit /set nx AlwasOFF
bcdedit /set pae ForceDisable

http://cappleblog.co.kr/555
http://m.inven.co.kr/board/powerbbs.php?come_idx=2632&l=124



처음보는 커널 파일도 있고 PAE라는 생소한 단어도 있네요. (ntkrnlmp.exe, ntkrpamp.exe)

이 내용을 토대로 정리해보면 아래와 같겠네요.


CPU

PAE 비활성화 

PAE 활성화 

Uniprocessor(1 CPU)

NTOSKRNL.EXE

NTKRNLPA.EXE 

Multiprocessor(N CPU SMP)

NTKRNLMP.EXE

NTKRPAMP.EXE



'Kernel mode' 카테고리의 다른 글

ConfigFlags  (0) 2013.11.15
Prefetch / Process Carving : 종료된 프로세스 탐지  (0) 2013.10.31
PsLoadedModuleList  (0) 2013.08.19
ObjectHook - OpenProcedure  (0) 2013.08.06
ddkbuild - #pragma message  (0) 2013.08.06
Posted by hswang