분류 전체보기 289

윈도우 세션 관리자 (smss.exe)

이번에는 Smss.exe를 알아볼 것임. 부팅 과정 중 Smss,exe의 위치는 아래와 같음 Smss.exe는 Session Manager Subsystem 의 약자다. 말 그대로 "세션 관리자" 커널 생성 이후 최초로 생성되는 시스템 프로세스이며 네이티브 어플리케이션이다. 얘의 역할은 윈도우에서 세션을 만들기 위한 환경을 구성한다. 부팅 시, 먼저 Smss.exe는 레지스트리의 부팅 중 실행하는 파일인 BootExecute을 확인하여 실행하게 된다. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ 보이죠?? 기본값으로 Autochk가 등록되어 있고 부팅 중 유저모드 생성 전에 디스크 검사를 합니당 단, 여기 이용되는 프로그램은 네..

윈도우 서브시스템

시스템 프로세스는 윈도우 시작 프로세스 이며, 사용자가 시스템을 사용하는 데 필요한 핵심 부분을 담당하는 프로세스이다. 커널과 연결되는 서브시스템을 구동하거나 관리하는 역할을 하는 것. 우리가 사용하는 유저모드에서 아주 중요한 프로세스라고 말할 수 있겠죠?? Smss.exe, Csrss.ee, Winlogon.exe, Lsass.exe, Services.exe 등이 있는데, 작업관리자 열어서 보면 다들 한번씩 이름쯤은 접해봤을 겁니다. 그럼 먼저 서브시스템이 무엇인가 부터 한번 알아보죠. 서브시스템 윈도우의 보안과 호환성을 위해 커널의 시스템 자원을 호출할 때 사용되는 시스템. 환경 서브시스템, 서브시스템 DLL 두가지로 나눌 수 있돠. 한번 알아봅시다. 1. 환경 서브시스템 프로그램의 구동 환경을 제공..

윈도우 커널 생성 (Ntos****.exe)

Windows가 부팅 되는 과정을 순차적으로 따라가며 해부하는 방식이다. 이후 BCD는 지정된 일정 시간 이상 입력이 없으면, 기본 설정된 OS로 선택하여 커널 초기화 작업을 진행한다. 이 때, 부트 파티션에서 커널 초기화에 필요한 커널 파일과 HAL이미지 등을 로드하고 레지스트리 %SystemRoot%\System32\Config\System 을 하이브(연결)하여 디바이스 드라이버를 로드하는 작업을 진행한다. 레지스트리에 대한 내용은 다음에 다루겠다. 커널 초기화에 필요한 파일들을 언급하였었는데, Ntos****.exe 이름이 뭐 요런 형식이다. CPU 갯수, 메모리 PAE 활성화 여부에 따라 4개의 프로세스 중 하나가 실행이 된다. 흠 아래 설명 Ntoskrnl.exe : 1 CPU Ntkrnlmp...

Windbg 커널 디버깅 환경 설정

윈도우 구조 분석을 위해 필요한 도구 Windbg 환경 설정 및 사용법에 대해 알아보자. http://msdn.microsoft.com/library/windows/hardware/ff551063(v=vs.85).aspx 다운로드는 이곳에서.. 현재는 Windbg가 WDK에 통합되어서.. WDK를 설치해야 Windbg를 사용할 수 있다. 물론 따로 설치하는 것도 가능하긴 함. 일단 Windbg를 설치하고, 심볼 설정을 해주어야 한다. 심볼 파일이란 어셈블리 코드에서 소스코드의 위치, 함수 이름, 변수 이름 같은 정보를 담고 있는 파일이다. 확장자는 .pdb 심볼 파일이 담고 있는 정보는 다음과 같다. - 전역 변수의 이름과 주소 - 각 엔트리 포인트의 함수 이름과 주소 - FPO 데이터 ( Frame P..

윈도우 부팅 과정 및 OS 기초

1. 윈도우 부팅 과정 위 그림은 윈도우 부팅과정을 순차적으로 나타낸 그림이다. 참고로, 부팅 과정에서는 어느것 하나도 빼먹으면 올바르게 부팅이 되지 않음 이 과정을 진행하면 GINA(Graphic Identification and Authentication) 즉, 윈도우 로그인 화면 까지 진행된다. 2. 유저모드와 커널모드 윈도우는 왜 유저모드와 커널모드를 나누어 두었을까. 일단 운영체제의 가장 큰 목적은, 각각의 사용자가 다른 제조사의 하드웨어를 사용하지만 동일한 동작을 하도록 공통된 환경을 제공하는 것이다. 이 작업을 사용자가 굳이 따로 제어해주지 않아도 사용자가 요구하는 자원을 커널 단에서 알아서 분배와 관리를 해준다. 또한 다양한 개발 환경에서 만들어진 응용 프로그램들을 유저모드에서 커널모드로 ..

MintOS 32-bit 보호모드 전환

자.. 이제 부트로더를 다 만들어 봤으니 32비트 보호모드로 점프 뛰어보자. 보호모드로 전환하려면 아래의 6가지 단계를 거쳐야 한다. 세그먼트 디스크립터 생성, GDT 정보 생성 단계는 보호 모드 전환에 필요한 자료구조를 생성하는 단계이고, 그 다음 프로세서에 GDT 정보 설정 ~ 각종 세그먼트 셀렉터 및 스택 초기화 단계에서는 생성된 자료구조를 프로세서에 설정하는 단계이다. 세그먼트 디스크립터와 GDT는 보호모드가 실행되자 마자 즉시 프로세서에서 참조하는 부분이니까 보호모드로 전환하기 전에 미리 우리가 이 두가지 자료구조들은 생성을 해두어야 한다. 1. 세그먼트 디스크립터 생성 세그먼트 디스크립터 생성부터 해봅시다. 이 놈은 세그먼테이션에서 세그먼트의 정보를 나타내는 자료구조이다. 먼저 우리가 사용할 ..

MintOS 부트 로더 제작

간단한 부트로더를 제작해보자. 대표적인 부트로더로 리눅스 운영체제 많이 들어가는 GRUB, LILO 등이 있다. 저번에 설명했듯이, 부트로더는 저장 매체 (HDD 등.)에 들어있다고 했다. 부트로더는 MBR (Master Boot Record) 라는 곳에 있는 코드이다. 매우 작은 프로그램이다. MBR은 OS가 설치되어 있는 저장매체 즉, 하드 디스크의 가장 첫번째 섹터를 MBR 이라고 한다. 섹터(Sector)는 굳이 설명을 해야 할까 싶긴한데.. 디스크를 구성하는 데이터의 단위이다. 크기는 512byte 부트로더의 가장 큰 역할은 OS 실행에 필요한 환경 설정 OS 이미지를 메모리에 복사 요 두가지 기능이다. 부트로더가 아주 많은 기능을 할 것 같이 생겼지만, 하나의 섹터에서 코드가 해봐야 뭐 얼마나..

MintOS 부팅 과정

먼저 부팅(Booting)이 뭔지.. 그냥 컴퓨터 켜는게 부팅이라고 생각할 수 있는데, 정확하게 알고 넘어가자. 부팅(Booting)이란, PC 전원이 들어온 후 운영체제가 실행되기 전의 과정을 얘기한다. 윈도우로 치면 그 윈도우 로고가 팔랑팔랑거리기 전까지를 부팅 과정이라고 하는 것이다. 이 과정에서는 프로세서 초기화, 메모리와 외부 디바이스 검사 및 초기화, 부트 로더 호출하고 OS 시작 등의 작업을 한다. 그냥 쉽게 모든 것을 초기화하고 OS를 로딩하는 과정이다. 부팅 과정에서 H/W 관련된 작업들을 BIOS (Basic Input/Output System)이 수행하고, 이놈이 하는 각종 작업들을 POST (Power on Self Test) 라고 한다. 뭐 그냥 이렇게 부른다. BIOS는 펌웨어다..

OS 메모리 관리 기법

세그먼테이션은 우리가 필요한 만큼 분할해서 메모리를 관리하는 것이고, 페이징은 이미 기존에 일정한 크기로 잘려있는 크기로 메모리를 관리하는 것이다. 책에서는 세그먼테이셔는 케이크, 페이징을 잘려 있는 식빵에 비유했다. 적절한듯. 메모리 관리 기법을 이용하려면 관련된 레지스터에 특정한 자료구조를 설정해야 된다. 세그먼테이션은 세그먼트 레지스터에 세그먼트 시작주소 or 세그먼트 디스크립터의 위치를 지정해야 한다. 세그먼트 디스크립터 테이블(SDT)에 대해서 다루지 않고 넘어갔다. 여기서 설명하려고 아껴두었음. 페이징은 컨트롤 레지스터 중에 CR3 레지스터의 페이지 디렉토리라 불리는 자료구조의 물리주소를 설정해야 한다. 뭐 이정도로 알고 이제 상세하게 메모리 기법에 대해 알아보자. 운영 모드별로 어떠한 메모리..

레지스터 (Register)

레지스터란? CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 다목적 공간이다. 프로세스 내부에 있는 작은 공간이고 연산 제어, 디버깅 등등의 목적으로 사용한다. 일반적으로 얘기하는 RAM과는 다르다. CPU가 RAM에 있는 데이터에 접근하기 위해서는 물리적으로 먼 길을 돌아가야 하는데, 레지스터를 이용하면 고속으로 데이터를 처리할 수 있다. 연산을 위한 데이터를 레지스터에 저장하고, 그 결과값도 레지스터에 저장한다. 속도가 엄청 빠르다 레지스터 > 메모리 > 하드디스크 레지스터는 64/32비트 머신을 구분하는 기준으로, 한번에 처리할 수 있는 비트 수이다. 레지스터의 데이터 단위는 다음과 같다. BIT 데이터를 표현할 수 있는 가장 작은 단위이다. 0과 1로 구분된다. BYTE 8개의 비트..

반응형