메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

Windows 구조와 원리: OS를 관통하는 프로그래밍의 원리

Windows 구조와 원리: OS를 관통하는 프로그래밍의 원리

한빛미디어

집필서

절판

  • 저자 : 정덕영
  • 출간 : 2006-03-16
  • 페이지 : 548 쪽
  • ISBN : 8979143966
  • 물류코드 :1396
  • 초급 초중급 중급 중고급 고급
4.5점 (2명)
좋아요 : 21

※ 이 책은 『고급 개발자들만이 알고 있던 Windows 구조와 원리』(가남사, 2003년)의 개정증보판입니다.

이 책은 Windows의 내부 구조에 대하여 커널 디버거와 메모리의 내용을 해석하여 이론적 배경과 실제 구현 모습을 보여줌으로써 개발자가 볼 수 없었던 부분을 보다 구체적으로 보고 이해할 수 있게 해준다. 이러한 내부에 대한 이해는 개발자가 Windows에서 할 수 있는 것과 없는 것에 대한 눈을 갖게 해주며, 기존 개발자가 볼 수 없어 불가능하다 여겼던 많은 부분에 대한 가능성을 보여줄 것이다.

운영체제 메커니즘을 이해하여 프로그램의 완성도를 높인다!

  • 커널 레벨의 작동원리를 그림 위주로 깔끔하게 정리
  • 덤프, 그림, 코드의 유기적 활용으로 가독성 극대화
  • 실행파일과 로더 및 16비트 프로그램 에뮬레이션 추가

독자의 질문에 친절하게 답변을 해주고 새로운 정보를 제공합니다.
http://www.andyjung.com

이 책은 누구에게, 왜 필요한가!

임베디드 시스템 개발자
운영체제 이론과 인텔 마이크로 프로세스에 대한 이해를 높여준다.
일반 애플리케이션 개발자
API 내부가 구현된 Windows 내부를 이해함으로써 보다 정확한 API 사용으로 고급개발자가 될 수 있게 하며, 커널 혹은 시스템 영역의 개발자로 도약할 수 있는 기본을 제공한다.
보안, 시스템 프로그램 개발자
불가능하게 여기는 것을 가능하게 하는 시스템 프로그래밍 영역 개발자들이 시스템 내부를 보다 체계적으로 이해할 수 있게 함으로써 그 구현 범위를 넓혀 준다.
커널 드라이버 개발자
커널에 대한 이해는 안정적인 디바이스 드라이버 제작에 필수이다. 커널에 대한 디버깅과 보다 안정적인 드라이버를 만드는 기초를 제공한다.

주요 내용과 개정판에 추가된 항목

1장의 "컴퓨터의 구조"에서는 가장 기본적인 컴퓨터 구조인 폰노이만 구조부터 최신 펜티엄 프로세스까지 주요한 구조들을 이해할 수 있도록 설명하였으며 개정판에는 펜티엄에서 바뀌거나 추가된 레지스터들을 추가하였다. 이는 디버깅을 하거나 시스템 프로그래밍을 할 때 매우 중요한 기초 지식이다.

2장의 "데이터의 표현과 메모리 구조"는 우리가 다루고 있는 변수들이 실제 메모리에 어떠한 내용으로 저장되는지를 보여 주고 있으며, 이러한 내용은 디버깅시 메모리의 데이터 값을 이해하는 데 필요하다.

3장의 "기계어의 구성"은 실제 인텔 호환 기종에서 사용되는 기계어 코드들의 해석 방법을 설명하고, 개정판에서는 이 기계어의 특성까지도 설명하여 줌으로써, 디스어셈블러를 만들거나 리버스 엔지니어링 혹은 API 후킹과 같은 기계어 코드를 조작하는 코드를 만드는 데 도움을 줄 것이다.

4장의 "프로시저와 스택구조"는 프로그램이 어떻게 내부적으로 함수가 호출되고 파라미터가 전달되어 지는지 이해하는 중요한 개념으로 운영체제 내부에서의 스택 처리 과정, 컴파일러에서의 Name Mangling에 대한 내용 등을 추가하였다. 이 장의 내용은 디버깅을 하는 데 몰라서는 안 될 기초적이며 중요한 개념이다.

5장의 "프로세스와 스레드"에서는 실제 Windows에서 내부적으로 프로세스와 스레드를 관리하기 위한 자료구조들을 보여주고 있으며, 개정판에는 Undocumented 되었던 추가적인 자료구조와 설명들을 보충하였다. 이 장의 내용을 시스템 프로그램밍을 하는 독자에게는 여러 가지 응용할 수 있는 기반 구조를 제시하여 줄 것이다.

6장과 7장의 "스레드의 스케줄링과 동기화"는 멀티 스레딩 프로그램을 이해하고 그 내부 처리 과정을 이해하는 데 도움이 될 것이며, 애플리케이션 혹은 드라이버를 개발하는 독자라면 반드시 이해해야 하는 내용이다.

8장~11장은 운영체제가 어떻게 가상메모리 환경을 구현하게 되는지 명확하게 이해할 수 있도록 하고 있으며, 특히 시스템 프로그래밍 혹은 커널 레벨 프로그래밍을 하는 독자가 페이지에 대한 조작 혹은 가상 메모리 환경을 이해하는 데 큰 도움이 될 것이다. 개정판에서는 Windows 9x와 NT의 페이지 구조 차이, 최근 CPU에서 쓰이는 PAE, 그리고 멀티 CPU에서의 인터럽트 처리 방법 등이 추가되었다.

12장~13장의 "캐쉬 관리"에 대한 내용은 마이크로 프로세서와 윈도우에서 프로그램에 대한 수행을 효과적으로 하기 위한 캐쉬 개념을 설명하고 있으며, 이러한 개념에 대한 이해는 윈도우즈의 추가적인 가상메모리 이해와 프로그램 최적화에 대한 아이디어를 제공해 줄 것이며, 개정판에서는 프로그램 최적화에 사용된 예를 보여주고 있다.

14장의 "유저레벨과 커널레벨"은 Windows의 시스템 프로그램을 하는 독자라면 반드시 이해해야 하는 내용으로 보호모드가 무엇이고, 링(Ring) 3, 링(Ring) 0 등이 무엇이며 이것이 어떻게 커널에 대한 보호에 도움이 되는지 이해할수 있게 될 것이다.

15장의 "실행 파일과 로더"는 개정판에 추가된 챕터로 이 장에서는 윈도우즈의 실행파일 구조와 이러한 실행파일이 어떻게 메모리에 배치되고 실행되는지 이해할 수 있도록 해줄 것이며, 이는 리버스 엔지니어링이나 시스템 프로그래밍을 하는 독자라면 반드시 이해하고 있어야 한다.

16장의 "16비트 에뮬레이션"은 개정판에 추가된 챕터로 32비트 환경에서 수행되는 운영체제가 어떻게 16비트 환경의 프로그램을 수행할 수 있도록 하고 있는지를 설명하며, 이는 하위 호환에 관심이 있는 분들의 호기심을 조금이나마 덜어줄 것이다.

이외 부록에는 WinDBG에 대한 사용법, 간단한 드라이버 제작과 코드 해석 방법 그리고 개정판에는 디버거의 내부 구조와 원리를 추가하였다.

정덕영 저자

정덕영

중학교 시절, 소프트웨어 공모전에서의 입상으로 프로그래머의 꿈을 가지게 되었다. 광운대학교 컴퓨터 소프트웨어 공학과와 삼성 소프트웨어 멤버쉽을 거쳐, 현재는 안철수 연구소의 기반기술 팀에서 근무하고 있으며, 커널 레벨 코드 프로그래밍과 디자인, 해킹툴에 대한 분석 등의 업무를 수행하고 있다. 현재까지 악성코드 방지와 해킹 방지에 대한 다양한 특허를 출원, 등록하였으며, 『고급 개발자들만 알고 있던 Windows 구조와 원리 그리고 Codes』(가남사, 2003)가 있다.

제1장  컴퓨터의 구조와 역사
01   시스템 프로그래밍과 운영체제
   1. 시스템 프로그래밍이란?
   2. 운영체제란?
02   프로그래머 입장에서 바라본 컴퓨터의 구조와 역사
   1. 폰 노이만 구조(Von Neumann Machine)와 ISA(Instruction Set Architecture)
   2. 인텔 8008, 8086 마이크로프로세서
   3. 8086의 레지스터들
   4. 8086 세그먼트 레지스터의 사용
   5. 80286과 80386 마이크로프로세서의 출현
   6. 80386에서의 레지스터들
   7. 컴퓨터 아키텍처(Architecture)와 컴퓨터 오가니제이션(Organization)
   8. 80486 마이크로프로세서
   9. 펜티엄(Pentium) 프로세서와 슈퍼 스칼라

제2장  데이터의 표현과 메모리 구조
01   2진법, 16진법의 표현법과 비트, 바이트
02   정수의 표현
03   실수의 표현
04   문자의 표현
05   바이트 순서(Little Endian과 Big Endian)
06   메모리의 구조
07   CPU와 메모리간의 연결
   1. 8086에서 짝수 번지, 홀수 번지
   2. 80386, 80486, 그리고 Pentium에서의 데이터 전송

제3장  기계어의 구성
01   기계어에 대한 이해와 필요성
02   고급 언어, 기계어, 그리고 어셈블리 언어의 예
03   명령의 구성과 실행
04   기계어의 구성(명령어 형식: Instruction Format)
   1. Instruction Prefixes
   2. 작동 코드(Opcode: Operand code)
   3. 번지 지정 방식과 MODR/M 그리고 SIB
   4. 번지 지정 방식

제4장  프로시저와 스택 구조
01   스택을 사용한 복귀 주소의 저장
02   스택을 사용한 로컬 변수의 저장
03   스택을 사용한 파라미터 전달
04   파라미터 전달의 여러 가지 방법(Calling Conventions)
   1. __cdecl
   2. __stdcall
   3. __fastcall
05   스택 프레임을 이용한 스택 백트레이싱
06   프로시저에서 리턴 값 전달하기
07   Windows에서의 스택 구조
08   함수에서의 레지스터 사용
09   Name Mangling(name decoration)

제5장  프로세스와 스레드
01   프로세스와 스레드의 개념
   1. 프로세스(Process)
   2. 스레드(Thread)
02   프로세스의 구조
   1. WinDBG를 사용한 프로세스 구조체 살펴보기
   2. 프로그램에서 EPROCESS 포인터 얻기
   3. 프로세스를 구성하는 요소들
03   스레드의 구조
   1. WinDBG를 사용한 스레드 구조체 살펴보기
   2. 프로그램에서 ETHREAD 포인터 얻기
04   구조화된 예외 처리(Structured Exception Handling)
   1. 운영체제에서의 예외 처리 과정
   2. 아주 간단한 SEH 처리 예
   3. Visual C++에서의 SEH 처리 예
   4. Visual C++의 SEH에서 제공하는 추가적 기능들
05   애플리케이션에서 프로세스와 스레드 관련 정보 얻기

제6장  스레드의 스케줄링
01   스레드의 상태
02   우선순위 알고리즘
   1. Windows에서의 우선순위 스케줄링 구현
   2. 프로세스 우선순위와 스레드 우선순위
03   Performance monitor 프로그램을 이용한 실험
04   선점형 스케줄링(Preemptive Scheduling)
   1. 선점되어지는 경우
   2. Windows에서의 선점형 스케줄링 구현
   3. IRQL과 커널레벨 동기화

제7장  스레드의 동기화
01   스레드 동기화의 필요성
02   유저모드에서의 동기화 함수들
   1. 크리티컬 섹션(Critical Section)
   2. 뮤텍스(Mutex)
   3. 세마포어(Semaphore)
   4. 이벤트(Event)
03   커널 동기화 객체와 그 구조
   1. 커널 동기화 객체
   2. 디스패처(Dispatcher)와 대기 블록(WaitBlock)

제8장  메모리 관리
01   가상 주소(Virtual Address)
02   가상 주소(Virtual Address)의 구현
   1. 페이징 기법
   2. 가상 주소와 페이징 시스템
   3. 세그먼트 기법
   4. 단편화(Fragmentation)
   5. 세그먼트와 페이징 기법의 병합

제9장  세그먼테이션
01   가상 메모리에서 실제 물리 메모리까지
02   세그먼트 레지스터와 그 사용
03   세그먼테이션(Memory Segmentation)
04   세그먼트 디스크립터
05   세그먼트 디스크립터의 내용들
   1. 베이스(Base) 필드
   2. 리미트(Limit) 필드
   3. 액세스(Access) 비트
   4. 프레젠트(Present) 비트
   5. 디폴트(Default) 비트
   6. Granularity 비트
   7. 시스템(System) 비트와 타입(Type) 비트
06   디스크립터 테이블과 세그먼트 셀렉터
   1. 디스크립터 테이블
   2. LDT(Local Descriptor Table)
   3. 세그먼트 셀렉터
07   Windows에서의 세그먼트 디스크립터와 레지스터
   1. 애플리케이션에서의 세그먼트 레지스터와 그 내용
   2. 커널레벨에서의 세그먼트 레지스터와 그 내용

제10장  페이징
01   페이징(Paging)
02   선형 주소에서 물리 주소까지
   1. CR3 레지스터
   2. 페이지 디렉토리(Page Directory)
   3. 페이지 테이블(Page Table)
   4. 실습
03   Windows에서의 페이지 디렉토리와 테이블
04   공유 메모리와 공유 모듈
05   메모리 공간의 전환
06   3GByte의 유저 메모리를 사용하는 Windows
07    Page Address Extensions(PAE)

제11장  페이지 관리
01   요구 페이지 처리
   1. 페이지 폴트 예외 핸들러
   2. 선페이징(Prepaging)
   3. Paged Memory와 NonPaged Memory
02   페이지 교체 정책(Page Replacement Policy)
   1. 지역성(Locality)
   2. LRU(Least Recently Used) 방식
   3. FIFO(First In, First Out) 방식
   4. Page Frame Number Database
   5. 실습
03   작업세트(Working Set) 관리
   1. 스레싱(Thrashing) 현상
   2. 작업세트 관리
   3. 작업세트를 조절하기 위한 Win32 API
04   페이지의 효과적 이용 방법

제12장  프로세서 내의 캐시 관리
01   원리
02   캐시 메모리의 주소 매핑 방식
   1. 직접 매핑(direct mapping)
   2. 어소시에이티브 매핑(associative mapping)
   3. 셋 어소시에이티브 매핑(set associative mapping)
03   캐시 교체 알고리즘
04   캐시 쓰기 정책
   1. Write through 정책
   2. Write back 정책
05   Pentium Processor에서의 캐시 구조
06   캐시와 프로그램 최적화
   1. 데이터의 위치와 속도
   2. 지역성을 이용한 최적화(Locality)
   3. 특별한 명령어를 이용한 최적화
   4. 데이터의 정렬(Alignment)

제13장  윈도우즈에서의 캐시 관리
01   Windows에서의 파일 읽기와 그 과정
02   내부 구조
   1. Windows의 System Cache 영역과 View
   2. VACB(Virtual Address Control Blocks)에 의한 View 관리
   3. 파일 열기 속성과 캐시 관리자
03   캐시 내부 살펴보기
   1. FILE I/O 함수에 의한 접근 시의 데이터 관리
   2. 메모리 맵드 I/O에 대한 파일 관리

제14장  유저레벨과 커널레벨
01   특권레벨(Privilege Levels)
02   커널모드(Ring 0)와 유저모드(Ring 3)
03   Windows에서의 유저레벨 코드 세그먼트
04   Windows에서의 커널레벨 코드 세그먼트
05   커널레벨에서만 실행되는 CPU 명령어
06   세그먼트의 갱신과 특권레벨
   1. 데이터의 세그먼트 갱신(DS, ES, FS, GS)
   2. 스택 세그먼트 갱신(SS)
07   코드 세그먼트의 변경과 특권레벨의 변경
   1. 세그먼트간의 JMP 또는 CALL 명령 실행
08   인터럽트와 특권레벨
   1. IDT(Interrupt Descriptor Table)
   2. 인텔에서 정의하고 있는 인터럽트 벡터별 내용
   3. 인터럽트 발생과 스택 변화
   4. Windows API의 흐름
09   I/O 특권레벨 변경
   1. TSS(Task State Segment) 변경을 통한 I/O 권한 변경
   2. IOPL 변경을 통한 IO 특권레벨 변환하기

15장 실행 파일과 로더
01   PE 파일의 레이아웃
   1. DOS 헤더와 스터브 코드
   2. PE 헤더
   3. Optional 헤더
   4. 섹션(Section) 헤더
   5. 세션(Section)
02   PE 파일의 주요 정보와 로더
   1. 로더의 내부
   2. 기준 재배치(Base Relocations)
   3. 익스포트 함수(Export Functions)
   4. 임포트 함수(Import Functions)

16장 16비트 에뮬레이션(Emulation)
01   MS-DOS 에뮬레이션
   1. 메모리 공간의 구성
   2. 16비트 명령어의 실행
   3. Interrupt에 대한 처리
   4. Memory Mapped I/O에 대한 처리
02   80286 환경에서 수행되는 Win16 에뮬레이션

부록 A.   WinDBG 설치 및 간단한 사용법
부록 B.   드라이버 개발 경험이 없는 프로그래머를 위하여
부록 C.   디스어셈블링에 대한 이해
부록 D. 디버거의 내부 구조와 원리

국내에 발표된 많은 프로그래밍 혹은 OS 책중에



Windows OS종속적이면서도 심도있는 내용을 다룬책이 그리 많지 않았다.



이책에서는 깊이있는 내용을 다루면서도 깔끔한 정리를 해주고 있다.



일반적인 초보개발자보다 현업에서 활동하고 있는 개발자들에게



한권쯤있어야 될책이 아닐까 싶다.

아직 다 안읽었지만..

프로그램을 할 줄 안다는것이 문법을 아는것이 우선이 아니라 제어할 대상의 데이터 흐름이나

제어방식에 대한 흐름을 먼저 이해해야 한다는것을 이책에서 설명하고 있다고 생각합니다.

훌룡한 책이라고 생각합니다.

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
Windows 구조와 원리: OS를 관통하는 프로그래밍의 원리
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
Windows 구조와 원리: OS를 관통하는 프로그래밍의 원리
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
Windows 구조와 원리: OS를 관통하는 프로그래밍의 원리
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실

최근 본 책0