커널모드에 있는 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 : 일시정지 횟수
참고도서 : 리버싱 윈도우 - 로드북
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
파이썬 설치 및 기본 사용법 (0) | 2021.04.13 |
---|---|
윈도우 스레드 스케줄링 그리고 컨텍스트 스위치 (0) | 2021.04.13 |
윈도우 EPROCESS와 KPROCESS 구조 (0) | 2021.04.13 |
윈도우 프로세스와 스레드 생성과 동작 원리 (0) | 2021.04.13 |
윈도우 ntdll.dll (0) | 2021.04.13 |