TEB
TEB(Thread Environment Block)란 프로세스에서 실행되는 스레드에 대한 정보를 담고 있는 구조체
스레드 별로 구조체가 하나씩 할당
TEB구조체
FS세그먼트 레지스터는 현재 스레드의 TEB를 지시하는데 사용된다.
FS세그먼트 레지스터는 실제 TEB 주소를 가지고 있는 Segment Descriptor Table 의 Index값을 가지고 있다.
FS:[0x18] = TEB 시작 주소
FS:[0x18] = TEB.NtTib.Self = address of TIB = address of TEB = FS:0
FS:0의 의미는 FS 레지스터가 Indexing 하는 Segment Descriptor가 가리키는 Segment Memory의 시작 주소
NT_TIB 구조체 정의에서 018옵셋 떨어진 위치가 Self의 위치
Self포인터 변수는 _NT_TIB 구조체 시작 위치를 가리킨다.
FS:[0x30] = PEB 시작 주소
FS:[0] = SEH 시작 주소
참고 - 리버싱 핵심 원리