IT 그리고 정보보안/Knowledge base

윈도우 ETHREAD와 KTHREAD 구조

plummmm 2021. 4. 13. 07:14
반응형

커널모드에 있는 ETHREAD와 유저 모드에서 돌아가는 KTHREAD에 대해서 한번 알아보겠다.

 

스레드 구조체는 ETHREAD에 정의 되어 있는데,

Windbg에서 dt _ETHREAD, dt_KTHREAD를 입력하면

구조체에 대한 정보를 알 수 있다.

 

ETHREAD에서 알 수 있는 주요 정보는 아래와 같다.

그럼 이제 Windbg로 전체 구조체를 확인해보자.

Tcb : 스레드 동기화 개체

CreateTime : 스레드 생성 시간

ExitTime : 스레드 종료 시간

PostBlockList : 현 스레드가 참조하는 모든 오브젝트 목록

Cid : 프로세스와 스레드 id 확인 가능

IrpList : 현 스레드에서 실행중인 IRP 리스트

 

StartAddress : 실제 스레드 시작 주소

Win32StartAddress : 유저모드 스레드 시작 주소

ThreadListEntry : 프로세스가 가지고 있는 모든 스레드 목록

 

다음은 KTHREAD를 알아보겟음.

Windbg로 KTHREAD의 구조를 보면 아래와 같다. 

Header : 디스패처 헤더

InitialStack : 스택 시작 주소

StackLimit : 스택 사용 제한 주소

Teb : TEB 포인터

KernelStack : 현 스택 사용 위치 포인터

State : 스레드 상태

Alerted : 알람

Priority : 스레드 우선순위

ContextSwitches : 문맥 교환(? 난 학교 운영체제 시간에 이렇게 배움 -_-) 횟수

                           컨택스트 (= 스레드로 처리중인 작업을 전환한 횟수)

WaitStatus : 대기 상태

WaitListEntry : 대기 스레드 리스트

BasePriority : 스레드 기본 우선 순위

KernelApcDisable : 커널 APC 사용 유무

QueueListEntry : 큐 리스트

Affinity : 선호 프로세서

Preempted : 스레드가 선점하였을 시 설정된다

 

 

NextProcessor : 다음 실행시 사용될 프로세서

Win32Thread : 유저모드 스레드 주소

TrapFrame : 예외 발생 시 사용될 트랩 프레임 포인터

KernelTime : 커널 모드에서 현 스레드 실행 시간

UserTime : 유저모드에서 현 스레드 실행 시간

Alertable : 유저 APC 가능 사용 유무

StackBase : 스텍 베이스 주소

ThreadListEntry : 프로세스가 가지고 있는 모든 스레드 목록

FreezeCount : 대기 횟수

SuspendCount 일시정지 횟수

 

 

참고도서 : 리버싱 윈도우 - 로드북 

반응형