떡밥위키
최근 변경
최근 토론
특수 기능
파일 올리기
작성이 필요한 문서
고립된 문서
고립된 분류
분류가 되지 않은 문서
편집된 지 오래된 문서
내용이 짧은 문서
내용이 긴 문서
차단 내역
RandomPage
라이선스
IP 사용자
216.73.216.107
설정
다크 모드로 전환
로그인
개인정보 처리방침 개정 안내
Microsoft Windows/커널
(r1 문단 편집)
닫기
RAW 편집
미리보기
=== 커널 오브젝트 === 윈도우에서 만들어지는 모든 객체(프로세스, 스레드, 이벤트, 뮤텍스, 파일, 액세스 토큰 등)를 의미한다. 커널 오브젝트는 객체 관리자(Object Manager)에 의해 메모리에 할당이 되고 필요가 없어질 때 할당 해제되어 사라진다. 대부분의 커널 오브젝트는 더 이상 쓰이지 않으면 소멸되는 임시 객체지만 절대로 소멸되지 않는 객체도 존재한다.[* 객체를 만들 때 플래그에 OBJ_PERMANENT가 넣었다면 그 객체는 만들어질 때 참조 횟수가 1인 영구 객체가 된다. ZwMakeTemporaryObject 함수를 사용하여 영구 객체를 임시 객체로 바꿀 수 있다.] 객체가 더 이상 필요가 없어질 때 소멸되는 원리는 '''참조 횟수'''라는 것을 이용한다. 즉 객체에 접근할 때마다 참조 횟수가 늘어나고 반대로 더 이상 접근하지 않을 때 참조 횟수가 줄어든다. 이렇게 참조 횟수가 0이 되면 윈도우는 해당 객체를 메모리에서 제거할 수 있게 된다. 사용자 모드에서 객체에 대한 핸들을 생성할 때마다 참조 횟수가 늘어나고 반대로 핸들을 닫으면 참조 횟수가 줄어든다. 개체를 참조하는 커널 함수(ObReferenceObjectByHandle 등)들은 내부적으로 참조 횟수를 증가시키는데 더 이상 객체에 접근할 필요가 없어졌다면 ObDereferenceObject를 호출하여 직접 객체의 참조 횟수를 감소시켜줘야 한다. ObDereferenceObject 함수는 참조 횟수를 감소시키고 더 이상 필요 없어서 삭제해야 하는지 보존 검사를 수행한다. 프로세스의 경우 만들어질 때 커널은 EPROCESS와 KPROCESS 구조체를 메모리에서 할당하고 초기화하는 과정을 거쳐 프로세스의 진입점(주로 main 함수)을 실행하는 주 스레드를 생성한다. 그리고 프로세스가 종료될 때 아직 열려있는 핸들이 남아있다면 메모리에서 사라지지 않는다. 프로세스가 종료되더라도 열려 있는 해당 프로세스에 대한 핸들이 남아있으면 윈도우는 해당 프로세스의 플래그에 삭제 비트를 넣어줄 뿐, 모든 핸들이 닫힐 때까지 객체를 유지한다.
요약
문서 편집을
저장
하면 당신은 기여한 내용을
CC BY-NC-SA 2.0 KR
또는
기타 라이선스 (문서에 명시된 경우)
로 배포하고 기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다. 이
동의는 철회할 수 없습니다.
비로그인 상태로 편집합니다. 로그인하지 않은 상태로 문서 편집을 저장하면, 편집 역사에 본인이 사용하는 IP(216.73.216.107) 주소 전체가 영구히 기록됩니다.
저장
사용자
216.73.216.107
IP 사용자
로그인
회원가입
최근 변경
[불러오는 중...]
최근 토론
[불러오는 중...]