2010년 12월 8일 수요일

제프리 리처의 Windows via C/C++

 

 

 

 

 

윈도우 프로그래머를 위한 최고의 책, 윈도우 시스템의 근원을 파헤친다.

Visual C++로 복잡한 애플리케이션을 개발하는 프로그래머라면 이 책의 조언이 매우 큰 도움이 될 것이다. 제프리 리처는 Windows XP, Windows Vista, Windows Server 2008에 대한 내용을 반영하여 8년만에 이 책을 개정하였다. 이 책에 포함된 깊이 있고 폭넓은 지침, 향상된 기법, 개선된 코드 예제는 당신을 윈도우 애플리케이션 개발 전문가로 이끌어줄 것이다.

[주요내용]
- 32비트와 64비트 윈도우에서 동작하는 애플리케이션의 구조와 구현
- 프로세스와 잡의 생성과 사용
- 스레드의 생성, 관리, 동기화, 파괴
- I/O 컴플리션 포트를 이용한 동기, 비동기 I/O의 수행
- 가상 메모리, 메모리 맵 파일, 힙을 아우르는 다양한 메모리 관리
- 스레드 스택의 물리적 저장소 확보 기법
- 지연 로딩을 위한 DLL 생성, API 후킹, 프로세스 인젝션
- 구조화된 예외 처리의 사용, 윈도우 에러 복구, 애플리케이션 재구동
1부. 준비하기
1장. 에러 핸들링
2장 문자와 문자열로 작업하기
3장 커널 오브젝트

2부. 목표 달성
4장 프로세스
5장 잡
6장 스레드의 기본
7장 스레드 스케줄링, 우선순위, 그리고 선호도
8장 유저 모드에서의 스레드 동기화
9장 커널 오브젝트를 이용한 스레드 동기화
10장 동기 및 비동기 장치 I/O
11장 윈도우 스레드 풀
12장 파이버

3부. 메모리 관리
13장 윈도우 메모리의 구조
14장 가상 메모리 살펴보기
15장 애플리케이션에서 가상 메모리 사용 방법
16장 스레드 스택
17장 메모리 맵 파일
18장 힙

4부. 다이내믹 링크 라이브러리(DLL)
19장 DLL의 기본
20장 DLL의 고급 기법
21장 스레드 지역 저장소(TLS)
22장 DLL 인젝션과 API 후킹

5부. 구조적 예외 처리
23장 종료 처리기
24장 예외 처리기와 소프트웨어 예외
25장 처리되지 않은 예외, 벡터화된 예외 처리, 그리고 C++ 예외
26장 에러 보고와 애플리케이션 복구

부록 A 빌드 환경
부록 B 메시지 크래커, 차일드 컨트롤 매크로, 그리고 API 매크로
제프리 리처 (Jeffrey Richter)
제프리 리처는 더 좋은 소프트웨어, 더욱 빠른 소프트웨어를 개발하고자 하는 회사들을 위해 교육, 디버깅, 컨설팅을 수행하는 Wintellect(www.wintellect.com)의 공동 창업자이다. 그는『CLR via C#』(MS-Press, 2005)을 포함하여 다수의 책을 집필하였다. MSDN 매거진의 기고 편집자인 동시에 컬럼리스트이며 VSLive!, 마이크로소프트 TechEd, PDC 등 IT 분야 컨퍼런스의 유명 스피커이기도 하다. 제프리 리처는 AT&T, 드림웍스, 제너럴 일렉트로닉스, 휴렛 패커드, IBM, 인텔 등 다양한 회사에서 컨설팅을 수행했고 마이크로소프트의 테라 서버, Visual Studio, .NET 프레임워크, 오피스, 여러 버전의 윈도우 등에서 그가 개발한 코드가 사용되고 있다. 그가 개인적으로는 원하는 만큼 자주 비행을 하지는 못하지만 비행기와 헬리콥터 비행 자격증을 가지고 있다. 국제 마술사 협회의 회원이고 이따금 친구들에게 트럼프 마술을 보여주는 것을 즐긴다. 또 다른 취미로는 음악, 드럼 연주, 모형 철도 만들기, 보트 타기, 여행, 영화보기다. 그와 그의 가족은 워싱턴 커클런드에 살고 있다.

크리스토프 나자르 (Christophe Nasarre)
크리스토프 나자르는 소프트웨어 아키텍트로서 비즈니스 지능화 솔루션을 이용하여, 자신의 분야에서 더 나은 통찰력을 가지고 올바른 의사 결정과 기업의 업무 능력 향상을 도모하는 다국적 소프트웨어 회사의 비즈니스 오브젝트 개발을 이끌고 있다. 그는 Addison Wesley, A-Press, MS-Press, MSDN 매거진 등에서 기술 편집자로서 일해왔다.

[역자소개]
김명신
himskim@gmail.com
STI와 NHN을 거쳐 현재는 마이크로소프트에서 개발자 지원 업무를 수행하고 있다. 다년간 Microsoft C/C++과 C# 분야의 MVP로 활동하였으며, 『Effective C#: 강력한 C# 코드를 구현하는 개발지침 50가지』(한빛미디어, 2007)를 번역했다. 분산 컴퓨팅 아키텍처, 네트워킹, 프로그래밍 방법론, 소프트웨어 공학 등에 두루 관심이 많으며, 최근에는 닷넷 프레임워크의 내구 구조를 집중적으로 연구하고 있다.

 

 

아 언젠가 구입해서 한번 꼭 봐야하는데 미루다미루다 아직까지 못봤음 ㅠ.ㅠ

 

진정한 친구...

2010년 12월 7일 화요일

CCNA 17

 

1.  NAT(Network Address Translation

    - NAT는 사설 주소를 할당 받은 호스트들의 인터넷 액세스를 허용하기 위해서 사용된다.

    - NATPacketIP 헤더의 수신지 주소, 발신지 주소 또는 두 주소를 다른 주소들로 변경하는 과정.

    - NAT는 주로 스텁 도메인(Stub domain)에서 사용된다. 스텁 도메인은 외부로의 단일 접속을 가지고 있는 네트워크를 말한다.  

2. 사설 IP 주소

클래스       주소영역

   A           10.0.0.0 ~ 10.255.255.255

   B           172.16.0.0 ~ 172.31.255.255

   C           192.168.0.0 ~ 192.168.255.255

 

3. NAT 설정에 따른 분류

    - 정적 NAT(SNAT)

    - 동적 NAT(DNAT)

    - NAT 오버로드

    - TCP 분배  

4.  NAT 용어

   

 

Inside local address

- 내부 네트워크의 한 호스트에게 할당된 IP 주소

- 유일한 IP 주소

- 사설 또는 공인 IP 주소 일 수도 있다.

Inside global address

- 내부 호스트의 IP 주소가 네트워크 밖에서 보았을 때    

- 일반적으로 공인 IP 주소

- 보통 ISP 업체에서 제공

Outside local address

- 네트워크 내부에서 보았을 때 외부 호스트의 IP 주소

- 외부 네트워크의 한 호스트에게 할당된  IP 주소

Outside global address

외부 네트워크의 한 호스트에게 할당된 IP 주소이다.

5. 정적 주소

    - 내부 및 외부 주소들은 정적으로 1 : 1로 매핑된다.

    - 구문 형식

        Router(config)#ip nat inside source static {local-ip} {global-ip}

        Ex>Router(config)#ip nat inside source static 192.168.1.2 10.10.10.1

        Router(config)#inteface fastethernet 0/0

        Router(config-if)#ip nat inside

        Router(config)#interface fastethernet 0/1

        Router(config-if)#ip nat outside

 

6. 동적 주소

    - 구문 형식

      Nat  Pool  정의

             Router(config)#ip nat pool {name} {start-ip end-ip} {netmask [netmask] | prefix-length [prefix-length]}

      Nat Pool를 액세스 리스트와 함께 사용

             Router(config)#access-list {access-list-number} permit {source [source-wildcard]}

             Router(config)#ip nat inside source list {access-list-number} pool {name}

NAT 인터페이스 설정

             Router(config-if)#ip nat { inside | outside }

설정 예제

             Router(config)#ip nat pool ccnapool 100.10.10.1 100.10.10.254 netmask 255.255.255.0

             Router(config)#access-list 24 permit 192.168.1.0 0.0.0.255

             Router(config)#ip nat inside source list 24 pool ccnapool

             Router(config)#inteface fastethernet 0/0

             Router(config-if)#ip nat inside

             Router(config)#interface fastethernet 0/1

             Router(config-if)#ip nat outside

 

7. NAT 오버로드

     - 여러 개의 내부의 주소들을 동일한 하나의 전역 주소로 매핑하는 PAT(Port Address Translation)기능

     - -대일 또는 NAT 또는 주소 오버로딩(addressing overloading)이라고 부른다.

     - NAT 라우터는 변화 테이블에 있는 TCP UDP 포트 번호를 사용한다.

     - 구문 형식

            Router(config)#ip nat inside source list {access-list-number} pool name {overload}

            또는 IP Pool를 가지고 있지 않으면 인터 페이스를 설정해 줄 수 도 있다.

            Router(config)#ip nat inside source list {access-list-number} interface {interface-name } name {overload}

8. NAT  동작 확인

    - NAT Table 확인

         Router#show ip nat translations [verbose]

Verbose : 현재 활성화 되어 있는 연결 정보

    - NAT debug 정보 확인 Router#debug ip nat