반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- algorithm
- 백트래킹
- C++
- 취준
- 프로콘
- 리트코드
- GitHub Desktop
- Github
- 네이버 검색 시스템
- DP
- SRE
- 코딩테스트
- 프로콘 갈림현상
- python3
- 자소서
- git
- Ultimate Search
- 알고리즘 종류 정리
- LeetCode
- Pro-Con
- 제노블레이드 2
- Python
- 백준
- 격리수준
- Algorithmus
- 알고리즘
- baekjoon
- ASF-110
- 프로그래머스
- programmers
Archives
- Today
- Total
산타는 없다
Window via C/C++ 3장 - 커널 오브젝트 본문
반응형
- 0. 개요
- 운영체제나 우리가 개발하는 애플리케이션은 프로세스, 스레드, 파일 등과 같은 수많은 리소스를 관리하기 위해 커널 오브젝트를 사용한다.
- 1. 커널 오브젝트란 무엇인가?
- Sysinternals에서 무료로 제공하는 툴인 WinObj를 사용하면 모든 커널 오브젝트 타입을 나열하고 확인해 볼 수 있다.
- 함수의 이름에 포함된 오브젝트의 명칭이 반드시 커널 레벨의 오브젝트 이름과 일치하는 것은 아니다.
- 커널(섹션?) 오브젝트 : 커널에 의해 할당된 간단한 메모리 블록. 이 메모리 블록은 커널에 의해서만 접근 가능한 구조체로 구성되어 있으며, 커널 오브젝트에 대한 세부 정보들을 저장하고 있다.
- 마이크로 소프트는 커널 오브젝트의 구조체가 가능한 한 일관되게 유지될 수 있도록 하기 위해 메모리에 직접 접근하여 내용을 변경하지 못하게 하였다.
- 마이크로 소프트는 정제된 방법을 통해 구조체의 내용에 접근할 수 있도록 일련의 함수 집합을 제공하고 있다.
- 핸들 : 프로세스 내의 모든 스레드에 의해 사용 가능한 값이지만 특별한 의미를 가지고 있지는 않다. 32비트 운영체제에선 32비트, 64비트에선 64비트
- 핸들 값들은 프로세스 별로 독립적으로 유지된다. 만일 어떤 스레드가 다른 프로세스의 스레드에게 자신의 핸들 값을 전달했을 경우, 이 핸들 값을 이용하여 수행하는 동작은 실패할 수도 있고 혹은 더 좋지 않은 결과를 초래할 수도 있다. 이는 각 프로세스별로 독립된 프로세스 핸들 테이블이 존재하고 동일한 핸들 값이라도 전혀 다른 커널 오브젝트를 참조할 수 있기 때문이다.
- ① 사용 카운트
- 커널 오브젝트는 프로세스가 아니라 커널에 의해 소유된다. 다시 말해, 만일 프로세스가 특정 함수를 통해 커널 오브젝트를 생성한 후 종료된다 하더라도 반드시 생성된 커널 오브젝트가 프로세스와 함께 삭제되는 것은 아니라는 의미이다. 다른 프로세스가 동일 커널 오브젝트를 사용하고 있다면 커널 오브젝트를 사용하는 모든 프로세스가 종료될 때까지 삭제되지 않고 남아 있는다.
- 기억해야 할 점은 커널 오브젝트는 자신을 생성한 프로세스보다 더 오랫동안 삭제되지 않고 남아 잇을 수 있다는 것이다.
- 각 커널 오브젝트는 내부적으로 사용 카운트 값을 유지하고 있어 얼마나 많은 프로세스들이 사용하고 있는지 알 수 있다.
- ② 보안
- 커널 오브젝트는 보안 디스크립터(security descriptor)를 통해 보호될 수 있다.
- 보안 디스크립터는 누가 커널 오브젝트를 소유하고 있으며, 어떤 그룹과 사용자들에 의해 접근되거나 사용될 수 있는지, 혹은 어떤 그룹과 사용자들에 대해 접근이 제한되어 있는지에 대한 정보를 가지고 있다.
- 이미 존재하는 커널 오브젝트를 이용하려면(새로운 오브젝트를 생성하는 대신) 먼저 오브젝트를 이용하여 어떤 작업을 수행하려 하는지를 알려주어야 한다.
- 상당히 많은 윈도우 함수들이 보안 정보를요구한다
- 개발자가 저지르는 가장 큰 실수 중의 하나가 알맞는 보안 접근 플래그를 쉽게 간과한다는 것이다.
반응형
'프로그래밍 서적 > Window via C++' 카테고리의 다른 글
Window via C/C++ 9장 - 커널 오브젝트를 이용한 스레드 동기화 (0) | 2021.11.07 |
---|---|
Window via C/C++ 8장 - 유저 모드에서의 스레드 동기화 (1) | 2021.11.07 |
Window via C/C++ 6장 - 스레드의 기본 (0) | 2021.11.07 |
Window via C/C++ 10장 (0) | 2021.11.07 |
Window via C/C++ 13장 - 윈도우 메모리의 구조 (0) | 2021.11.07 |
Comments