책정리/Windows VIA C,C++

목차

GONII 2019. 2. 23. 21:46
1. 준비하기
1. 에러 핸들링
  1. 자신만의 에러 코드를 정의하는 방법
  2. ErrorShow 예제 애플리케이션
 
2장 문자와 문자열로 작업하기
  1. 문자 인코딩
  2. ANSI 문자와 유니코드 문자 그리고 문자열 자료형
  3. 윈도우 내의 유니코드 함수와 ANSI 함수
  4. C 런타임 라이브러리 내의 유니코드 함수와 ANSI 함수
  5. C 런타임 라이브러리 내의 안전 문자열 함수
    1. 새로운 안전 문자열 함수에 대한 소개
    2. 문자열 조직을 수행하는 동안 많은 제어를 수행할 있도록 하는 방법
    3. 윈도우의 문자열 함수
  6. 유니코드를 사용하는 것이 좋은가?
  7. 문자와 문자열 작업에 대한 권고사항
  8. 유니코드 문자열과 ANSI 문자열 사이의 변경
    1. ANSI 유니코드 DLL함수의 익스포트
    2. 텍스트가 ANSI인지 유니코드인지 여부를 확인하는 방법
 
3장 커널 오브젝트
  1. 커널 오브젝트란 무엇인가?
    1. 사용 카운트
    2. 보안
  2. 프로세스의 커널 오브젝트 핸들 테이블
    1. 커널 오브젝트 생성하기
    2. 커널 오브젝트 삭제하기
  3. 프로세스간 커널 오브젝트의 공유
    1. 오브젝트 핸들의 상속을 이용하는 방법
    2. 명명된 오브젝트를 사용하는 방법
    3. 오브젝트 핸들의 복사를 이용하는 방법
 
2.목표 달성
4장 프로세스
  1. 번째 윈도우 애플리케이션 작성
    1. 프로세스 인스턴스 핸들
  2. CreateProcess 함수
    1. pzApplicationName pszCommandLine
  3. 프로세스의 종료
    1. 스레드 진입점 함수의 반환
    2. ExitProcess 함수
    3. TerminateProcess 함수
    4. 프로세스 내의 모든 스레드가 종료되면
    5. 프로세스가 종료되면
  4. 차일드 프로세스
    1. 차일드 프로세스의 독립적인 수행
  5. 관리자가 표준 사용자로 수되는 경우
    1. 프로세스의 자동 권한 상승
    2. 프로세스의 수동 권한 상승
    3. 현재의 권한 정보는 무엇인가?
    4. 시스템에서 수행 중인 프로세스의 나열
 
5장 잡
  1. 내의 프로세스에 대한 제한사항 설정
  2. 내에 프로세스 배치하기
  3. 내의 모든 프로세스 종료하기
    1. 잡의 통계 정보 조희
  4. 통지
  5. 실습 예제 애플리케이션
 
6장 스레드의 기본
  1. 스레드를 생성해야 하는 이유
  2. 스레드를 생성하지 말아야하는 이유
  3. 처음으로 작성하는 스레드 함수
  4. CreateThread 함수
    1. psa
    2. cbStackSize
    3. pfnStartAddr pvParam
    4. dwCreateFlags
    5. pdwThreadID
  5. 스레드르의 종료
    1. 스레드 함수 반환
    2. ExitThread 함수
    3. TerminateThread 함수
    4. 프로세스가 종료되면
    5. 스레드가 종료되면
  6. 스레드의 내부
  7. C/C++ 런타임 라이브러리에 대한 고찰
    1. 이런! 실수로 _beginthreadex 대신 CreateThread 호출했다.
    2. 절대 호출하지 말아야 하는 C/C++ 런타임 라이브러리 함수
  8. 자신의 구분자 얻기
    1. 허위 핸들을 실제 핸들로 변경하기
 
7장 스레드 스케줄링, 우선순위, 그리고 선호도
  1. 스레드의 정지와 계속 수행
  2. 프로세스의 정지와 계속 수행
  3. 슬리핑
  4. 다른 스레드로의 전환
  5. 하이퍼스레드 CPU 상에서 다른 스레드로의 전환
  6. 스레드 수행 시간
  7. 컨텍스트 내의 CONTEX 구조체
  8. 스레드 우선순위
  9. 우선순위의 추상적인 의미
  10. 우선순위 프로그래밍
    1. 동적인 우선순위 레벨 상승
    2. 포그라운드 프로세스를 위한 스케줄러 변경
    3. I/O 요청 우선순위 스케줄링
    4. 스케줄링 실습 예제 애플리케이션
  11. 선호도
 
8장 유저 모드에서의 스레드 동기화
  1. 원자적 접근 : Interlocked 함수들
  2. 캐시 라인
  3. 고급 스레드 동기화 기법
    1. 회피 기술
  4. 크리티컬 섹션
    1. 크리티컬 섹션 : 세부사항
    2. 크리티컬 섹션과 스핀락
    3. 크리티컬 섹션과 에러 처리
  5. 슬림 리더 - 라이터
  6. 조건 변수
    1. Queue 예제 애플리케이션
    2. 유용한 팁과 테크닉
 
9장 커널 오브젝트를 이용한 스레드 동기화
  1. 대기 함수들
  2. 성공적인 대기의 부가적인 영향
  3. 이벤트 커널 오브젝트
    1. 핸드셰이크 예제 애플리케이션
  4. 대기 타이머 커널 오브젝트
    1. 대기 타이머를 이용하여 APC 요청을 스레드의 APC 큐에 삽입하는 방법
    2. 타이머와 관련된 미결 문제
  5. 세마포어 커널 오브젝트
  6. 뮤텍스 커널 오브젝트
    1. 버림 문제(Abandonment issued)
    2. 뮤텍스와 크리티컬 섹션
    3. 예제 애플리케이션
  7. 편리한 스레드 동기화 오브젝트
  8. 외의 스레드 동기화 함수들
    1. 비동기 장치 I/O
    2. WaitForInputIdle
    3. MsgWaitForMultipleObjects(Ex)
    4. WaitForDebugEvent
    5. SignalObjectAndWait
    6. 대기 목록 순회 API 이용한 데드락 감지
 
10장 동기 및 비동기 장치 I/O
  1. 장치 열기와 닫기
    1. CreateFile 대한 세부사항 검토
  2. 파일 장치 이용
    1. 파일 크기 얻기
    2. 파일 포인터 위치 지정
    3. 파일의 설정
  3. 동기 장치 I/O 수행
    1. 장치로 데이터 플러시하기
    2. 동기 I/O 취소
  4. 비동기 장치 I/O 기본
    1. OVERLAPPED 구조체
    2. 비동기 장치 I/O 사용 주의점
    3. 요청된 장치 I/O 취소
  5. I/O 요청에 대한 완료 통지의 수신
    1. 디바이스 커널 오브젝트의 시그널링
    2. 이벤트 커널 오브젝트의 시그널링
    3. 얼러터블 I/O
    4. I/O 컴플리션 포트
 
11장 윈도우 스레드 풀
  1. 시나리오 1 : 비동기 함수 호출
    1. 명시적 작업 항목 제어
    2. 배치 예제 애플리케이션
  2. 시나리오 2 : 시간 간격을 두고 함수 호출
    1. 자동 닫힘 메시지 박스 예제 애플리케이션
  3. 시나리오 3 : 커널 오브젝트가 시그널되면 함수 호출
  4. 시나리오 4 : 비동기 I/O 요청이 완료되면 함수 호출
  5. 콜백 종료 동작
    1. 스레드 커스터마이징
    2. 스레드 풀을 우아하게 삭제하는 방법 : 삭제 그룹
 
12장 파이버
  1. 파이버 사용하기
    1. 카운터 예제 애플리케이션
 
3.메모리 관리
13장 윈도우 메모리의 구조
  1. 프로세스의 가상 주소 공간
  2. 가상 주소 공간의 분할
    1. 포인터 할당 파티션
    2. 유저 모드 파티션
    3. 커널 모드 파티션
  3. 주소 공간 내의 영역
  4. 물리적 저장소를 영역으로 커밋하기
  5. 물리적 저장소와 페이징 파일
    1. 페이지 파일 내에 유지되지 않는 물리적 저장소
  6. 보호 특성
    1. 카피 라이트 접근
    2. 특수 접근 보호 특성 플래그
  7. 모두 함께 모아
    1. 영역의 내부
  8. 데이터 정렬의 중요성
 
14장 가상 메모리 살펴보기
  1. 시스템 정보
    1. 시스템 정보 예제 애플리케이션
  2. 가상 메모리 상태
  3. NUMA 머신에서의 메모리 관리
    1. 가상 메모리 상태 예제 애플리케이션
  4. 주소 공간의 상태 확인하기
    1. VMQuery 함수
    2. 가상 메모리 예제 애플리케이션
 
15장 애플리케이션에서 가상 메모리 사용 방법
  1. 주소 공간 내에 영역 예약하기
  2. 예약 영역에 저장소 커밋하기
  3. 영역에 대한 예약과 저장소 커밋을 동시에 수행하는 방법
  4. 언제 물리적 저장소를 커밋하는가
  5. 물리적 저장소의 디커밋과 영역 해제하기
    1. 언제 물리적 저장소를 디커밋하는가
    2. 가상 메모리 할당 예제 애플리케이션
  6. 보호 특성 변경하기
  7. 물리적 저장소의 내용 리셋하기
    1. MemReset 예제 애플리케이션
  8. 주소 윈도우 확장
    1. AWE 예제 애플리케이션
 
16장 스레드 스택
  1. C/C++ 런타임 라이브러리의 스택 확인 함수
  2. Summation 예제 애플리케이션
 
17장 메모리 맵 파일
  1. 실행 파일과 DLL 파일에 대한 메모리
    1. 정적 데이터는 실행 파일과 DLL 여러 인스턴스들 사이에 공유되지 않는다
  2. 메모리 데이터 파일
    1. 방법 1 : 개의 파일, 개의 버퍼
    2. 방법 2 : 개의 파일, 개의 버퍼
    3. 방법 3 : 개의 파일, 개의 버퍼
    4. 방법 4 : 개의 파일, 버퍼는 사용하지 않음
  3. 메모리 파일 사용하기
    1. 1단계 : 파일 커널 오브젝트를 생성하거나 열기
    2. 2단계 : 파일 매핑 커널 오브젝트 생성
    3. 3단계 : 파일의 데이터를 프로세스의 주소 공간에 매핑하기
    4. 4단계 : 프로세스의 주소 공간으로부터 파일 데이터에 대한 매핑 해체하기
    5. 5, 6단계 : 파일 매핑 오브젝트와 파일 오브젝트 닫기
    6. 파일 뒤집기 예제 애플리케이션
  4. 메모리 파일을 이용하여 파일 처리하기
  5. 메모리 파일과 일관성
  6. 메모리 파일의 시작 주소 지정하기
  7. 메모리 파일의 세부 구현사항
  8. 프로세스간 데이터 공유를 위해 메모리 파일 사용하기
  9. 페이징 파일을 이용하는 메모리 파일
    1. 메모리 파일 공유 예제 애플리케이션
  10. 스파스 메모리 파일
    1. 스파스 메모리 파일 예제 애플리케이션
 
18장 힙
  1. 프로세스 기본
  2. 추가적으로 힙을 생성하는 이유
    1. 컴포넌트 보호
    2. 더욱더 효율적인 메모리 관리
    3. 지역적인 접근
    4. 스레드 동기화 비용 회피
    5. 빠른 해제
  3. 추가적으로 힙을 생성하는 방법
    1. 힙으로부터 메모리 블록 할당
    2. 블록 크기 변경
    3. 블록 크기 획득
    4. 블록 해제
    5. 파괴
    6. C++ 에서의 사용
  4. 기타 관련 함수들
 
4. 다이내믹 링크 라이브러리(DLL)
19 DLL의 기본
  1. DLL 프로세스 주소 공간
  2. 전반적인 모습
    1. DLL모듈 생성
    2. 실행 모듈 생성
    3. 실행 모듈의 수행
 
20 DLL의 고급 기법
  1. 명시적인 DLL 모듈 로딩과 심벌 링킹
    1. 명시적인 DLL 모듈 로딩
    2. 명시적인 DLL 모듈 언로딩
    3. 익스포트된 심벌을 명시적으로 링킹하기
  2. DLL 진입점 함수
    1. DLL_PROCESS_ATTACH 통지
    2. DLL_PROCESS_DETACH 통지
    3. DLL_THREAD_ATTACH 통지
    4. DLL_THREAD_DETACH 통지
    5. 순차적인 DllMain 호출
  3. DLL 지연 로딩
    1. DelayLoadApp 예제 애플리케이션
  4. 함수 전달자
  5. 알려진 DLL
  6. DLL 리다이렉션
  7. 모듈의 시작 위치 변경
  8. 모듈 바인딩
 
21장 스레드 지역 저장소(TLS)
  1. 동적 TLS
    1. 동적 TLS 사용하기
  2. 정적 TLS
 
22 DLL 인젝션과 API 후킹
  1. DLL 인젝션 : 예제
  2. 레지스트리를 이용하여 DLL 인젝션하기
  3. 윈도우 훅을 이용하여 DLL 인젝션하기
    1. 바탕 화면 항목 위치 저장(DIPS) 도구
  4. 원격 스레드를 이용하여 DLL 인젝션하기
    1. 인젝션 라이브러리 예제 애플리케이션
    2. 이미지 살펴보기 DLL
  5. 트로얀 DLL 이용하여 DLL 인젝션하기
  6. 디버거를 이용하여 DLL 인젝션하기
  7. API 후킹 : 예제
    1. 코드 덮어쓰기를 통해 API 후킹하기
    2. 모듈의 임포트 섹션을 변경하여 API 후킹하기
    3. "마지막 메시지 박스 정보" 예제 애플리케이션
 
5. 구조적 예외 처리
23장 종료 처리기
  1. 예제를 통한 종료 처리기의 이해
    1. Funcenstein1
    2. Funcenstein2
    3. Funcenstein3
    4. Funcfurter1
    5. 돌발 퀴즈 시간 : FuncaDoodleDoo
    6. Funcenstein4
    7. Funcarama1
    8. Funcarama2
    9. Funcarama3
    10. Funcarama4 : 최종의 개선안
    11. finally 블록에서 주의할
    12. Funcfuter2
    13. SEH 종료 예제 애플리케이션
 
24장 예외 처리기와 소프트웨어 예외
  1. 예제를 통해 예외 필터와 예외 처리기 이해하기
    1. Funcmeister1
    2. Funcmeister2
  2. EXCEPTION_EXCUTE_HANDLER
    1. 가지 유용한
    2. 글로벌 언와인드
    3. 글로벌 언와인드 중단시키기
  3. EXCEPTION_CONTINUE_EXECUTION
    1. EXCEPTION_CONTINUE_EXECUTION 주의하여 사용하라
  4. EXCEPTION_CONTINUE_SEARCH
  5. GetExceptionCode
    1. 메모리 관련 예외
    2. 예외 관련 예외
    3. 디버깅 관련 예외
    4. 부동소수점 관련 예외
  6. GetExceptionInformation
  7. 소프트웨어 예외
 
25장 처리되지 않은 예외, 벡터화된 예외 처리, 그리고 C++ 예외
  1. UnhandledExceptionFilter 함수의 내부
    1. 작업 1 : 리소스에 대한 쓰기 허용과 수행 재개
    2. 작업 2 : 처리되지 않은 예외를 디버거에게 통지
    3. 작업 3 : 전역적으로 설치된 필터함수에게 통지
    4. 작업 4 : 처리되지 않은 예외를 디버거에게 통지(반복)
    5. 작업 5 : 프로세스를 조용히 종료
    6. UnhandledExceptionFilter WER 간의 상호작용
    7. 저스트--타임(JIT) 디버깅
    8. 표계산 예제 애플리케이션
    9. 벡터화된 예외와 컨티뉴 처리기
    10. C++ 예외와 구조적 예외
    11. 예외와 디버거
 
26장 에러 보고와 애플리케이션 복구
  1. 윈도우 에러 보고 콘솔
  2. 프로그램적으로 윈도우 에러 보고하기
    1. 보고서 생성과 전송 금지하기
  3. 프로세스 내에서 사용자 정의 문제 보고서 생성하기
  4. 사용자 정의 문제 보고서 생성과 변경
    1. 사용자 정의 문제 보고서 생성하기 : WerReportCreate
    2. 문제 보고서에 내부 정보 설정하기 : WerReportSetParameter
    3. 문제 보고서에 미니 덤프 추가하기 : WerReportAddDump
    4. 문제 보고서에 임의의 파일 추가하기 : WerReportAddFile
    5. 다이얼로그 박스의 문자열 수정 : WerReportSetUIOption
    6. 문제 보고서 전송하기 : WerReportSubmit
    7. 문제 보고서 닫기 : WerReportCloseHandle
    8. 사용자 정의 WER 예제 애플리케이션
  5. 자동 애플리케이션 재시작과 복구
    1. 자동 애플리케이션 재시작
    2. 애플리케이션 복구 지원
 
6 부록
A 빌드 환경
  1. CmnHdr.h 헤더 파일
    1. 마이크로소프트 윈도우 버전 빌드 옵션
    2. 유니코드 빌드 옵션
    3. 윈도우 정의와 4 경고 수준
    4. pragma message 헬퍼 매크로
    5. chlNRANGE 매크로
    6. chBEGINTHREADEX 매크로
    7. x86 플랫폼을 위한 DebugBreak 개선
    8. 소프트웨어 예외 코드 생성
    9. chMB 매크로
    10. chASSERT chVERIFY 매크로
    11. chHANDLE_DLGMSG 매크로
    12. chSETDLGICONS 매크로
    13. 링커가 (w)WinMain 진입점 함수를 찾도록 설정
    14. pragma 이용하여 사용자 인터페이스 XP테마 지원하기
B 메시지 크래커, 차일드 컨트롤 매크로, 그리고 API 매크로
  1. 메시지 크래커
  2. 차일드 컨트롤 매크로
  3. API 매크로

반응형

'책정리 > Windows VIA C,C++' 카테고리의 다른 글

3장 커널 오브젝트  (0) 2021.07.01
1장 에러 핸들링  (0) 2019.02.23