process internals

99
1

Upload: ama

Post on 05-Jan-2016

66 views

Category:

Documents


5 download

DESCRIPTION

Process Internals. Outline. Process Internal Flow of CreateProcess Thread Internal Examining Thread Activity. Process Internal – introduction. 每一個 Windows process 都是由一個 executive process (EPROCESS) block 來表示。而一個 process 可能有多個 thread ,這些 thread 則由一個 executive thread (ETHREAD) block 來表示。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Process Internals

1

Page 2: Process Internals

Process InternalFlow of CreateProcessThread InternalExamining Thread Activity

2

Page 3: Process Internals

每一個Windows process 都是由一個 executive process

(EPROCESS) block來表示。而一個 process可能有多個thread,這些 thread則由一個 executive thread (ETHREAD)

block來表示。

EPROCESS block 以及其相關的資料結構都存放在 system

space裡,唯一的例外是 EPROCESS block 中的 process

environment block (PEB),它被存放在 process address space

之中

3

Page 4: Process Internals

4

Page 5: Process Internals

5

Page 6: Process Internals

6

Element Purpose

Kernel process (KPROCESS) block

包含 process分頁資料的指標、屬於此 process 的 kernel thread列表、process預設的權限以及 process全部的 kernel time 和 user time

Process identification Unique process ID

Quota block 紀錄非分頁記憶體、分頁記憶體的容量與使用狀況。Process可共用這一個資料結構。

Virtual address descriptors (VADs)

描述虛擬記憶體配置狀況的資料結構。

Page 7: Process Internals

7

Element Purpose

Working set information 描述Working set list的資料結構, working set 用來表示虛擬記憶體對應到實體記憶體的狀況。

Virtual memory information 紀錄虛擬記憶體的大小、分頁檔的使用量以及分頁表。

Exception local procedure call (LPC) port

內部 process的溝通 channel,當某個 process 的 thread產生例外時,可以利用這個 channel發送訊息。

Debugging LPC port 內部 process的溝通 channel,當某個 process 的 thread產生除錯事件時,可以利用這個 channel發送訊息。

Page 8: Process Internals

8

Element Purpose

Access token (ACCESS_TOKEN)

描述 process 的 security profile

Handle table 紀錄 Handle table 的 address

Device map 用來辨別裝置名稱

Process environment block (PEB) 包含 Image information (base address, version numbers, module list) 、 process 堆疊資訊、以及 thread 的 local storage utilization

Windows subsystem process block (W32PROCESS)

紀錄 windows子系統中 kernel mode所需要的資料。

Page 9: Process Internals

利用 debug tool來看 EPROCESS block的格式 lkd> dt _eprocess

nt!_EPROCESS

+0x000Pcb : _KPROCESS

+0x06cProcessLock : _EX_PUSH_LOCK

+0x070CreateTime : _LARGE_INTEGER

+0x078ExitTime : _LARGE_INTEGER

+0x080RundownProtect : _EX_RUNDOWN_REF +0x084UniqueProcessId :

Ptr32Void

+0x088ActiveProcessLinks : _LIST_ENTRY

9

Page 10: Process Internals

kernel process (KPROCESS) block (也叫做 PCB, process control block) 的結構如下圖,其中包含許多Windows kernel實作 thread排程時所需要的基本資訊

10

Page 11: Process Internals

利用 debug tool來看 KPROCESS block的格式 lkd>dt _kprocess

nt!_KPROCESS

+0x000Header : _DISPATCHER_HEADER

+0x010ProfileListHead : _LIST_ENTRY

+0x018DirectoryTableBase : [2]Uint4B

+0x020LdtDescriptor : _KGDTENTRY

+0x028Int21Descriptor : _KIDTENTRY

+0x030IopmOffset : Uint2B

利用 recursive的方式來看 KPROCESS block 的 format dt _eprocess – r1

11

Page 12: Process Internals

PEB被存放在使用者的 process address space裡,內容包含了許多image loader 、 heap manager、以及Windows system DLLs所需的資訊。可讓使用者在 user mode下進行修改 lkd> !process

PROCESS 8575f030 SessionId: 0 Cid: 08d0 Peb: 7ffdf000 ParentCid: 0360 DirBase: 1a81b000 ObjectTable: e12bd418 HandleCount: 66. Image: windbg.exe

lkd> !peb7ffdf000

12

Page 13: Process Internals

Process 中會用到的 kernel global variables

13

Variable Type Description

PsActiveProcessHead Queue header Process block 的 List head。

PsIdleProcess EPROCESS 閒置的 process block。

PsInitialSystemProcess Pointer to EPROCESS 包含系統 thread的初始系統 process。

PspCreateProcessNotifyRoutine

Array of pointers 存放當 process建立與刪除時會使用到的 routine指標,最大可存放八個。

PspCreateProcessNotifyRoutineCount

DWORD 紀錄註冊在PspCreateProcessNotifyRoutine 的 process個數

Page 14: Process Internals

Process 中會用到的 kernel global variables

14

Variable Type Description

PspLoadImageNotifyRoutine

Array of pointers 存放 Image load時會用到的 routine指標。

PspLoadImageNotifyRoutineCount

DWORD 紀錄註冊在PspLoadImageNotifyRoutine 的 process個數。

PspCidTable Pointer to HANDLE_TABLE

Process 的 Handle table 以及 thread client ID。

Page 15: Process Internals

Windows 維護了一些 counts,使用者可藉由這些 count來追蹤 process的執行狀況。

15

Object: Counter Function

Process: % Privileged Time 某一特定區間裡, thread 在 kernel mode中執行的時間百分比。

Process: % Processor Time 某一特定區間裡, thread在所使用的 CPU time百分比。這個值為% Privileged Time 及 % User Time的加總。

Process: % User Time 某一特定區間裡, thread 在 user mode中執行的時間百分比。

Process: Elapsed Time 紀錄 process建立後,過了多少時間,單位是秒。

Page 16: Process Internals

Windows 維護了一些 counts,使用者可藉由這些 count來追蹤 process的執行狀況。

16

Object: Counter Function

Process: ID Process 當 process存在時,回傳 process ID.

Process: Creating Process ID 回傳 creating process ID,當 creating process存在時,此值不變。

Process: Thread Count 回傳 process中有多少個 threads。

Process: Handle Count 回傳 process中總共開了幾個 handles。

Page 17: Process Internals

底下列出一些跟 process有關的 function。

17

Function Description

CreateProcess 建立一個新的 process 及 thread。

CreateProcessAsUser 利用特定的 security token來建立新的 process及 thread。

CreateProcessWithLogonW 利用特定的 username及密碼來建立新的process 及 thread。

CreateProcessWithTokenW 利用特定的 security token來建立新的 process及 thread。

Page 18: Process Internals

底下列出一些跟 process有關的 function。

18

Function Description

OpenProcess 回傳 process 的 handle object。

ExitProcess 關閉 process,並且通告所有 attached 的DLLs。

TerminateProcess 關閉 process,但不通告 DLLs。

FlushInstructionCache 清空 process 的 instruction cache。

GetProcessTimes 取得 process的時間資訊,主要描述該 process在 user mode 及 kernel mode的執行時間。

Page 19: Process Internals

底下列出一些跟 process有關的 function。

19

Function Description

GetExitCodeProcess 回傳 process 的 exit code。用來說明該process為何被關閉。

GetCommandLine 回傳 pass給目前 process 的 command-line string。

GetCurrentProcess 回傳一個目前 process的虛擬 handle。

GetCurrentProcessId 回傳目前 process 的 ID。

GetProcessVersion 回傳Windows的主要與次要版本號碼。

Page 20: Process Internals

底下列出一些跟 process有關的 function。

20

Function Description

GetStartupInfo 回傳 Create process時所初始化的STARTUPINFO結構。

GetEnvironmentStrings 回傳 environment block的位址。

GetEnvironmentVariable 回傳指定的 environment variable。

Get/SetProcessShutdownParameters

定義目前 process shutdown時的 priority 及number。

GetGuiResources 回傳 user 及 GDI handle的個數。

Page 21: Process Internals
Page 22: Process Internals

Speaker:謝宇哲

Page 23: Process Internals

How did those processes come into beingHow do they exit once they've fulfilled

their purposeHow a Windows process comes to life

Page 24: Process Internals

建立 Process可以經由呼叫函式CreateProcessCreateProcessAsUserCreateProcessWithTokenW

Creating a Windows process consists of several stages carried out in three parts of the operating systemClient-side library Kernel32.dllWindows executiveWindows subsystem process (Csrss)

Page 25: Process Internals

1. Open the image file2. Create Windows executive process object3. Create the initial thread4. Notify the Windows subsystem of the new

process5. Start execution6. In the context of the new process and

thread, complete the initialization of the address space (such as load required DLLs) and begin execution of the program.

Page 26: Process Internals
Page 27: Process Internals

PrioritySpecify priority class

選擇最低優先權No priority class is specified

NORMAL_PRIORITY_CLASSPriority created (calling process) it is Idle or Below

NormalIDLE_PRIORITY_CLASS or

BELOW_NORMAL_PRIORITY_CLASSSame priority as the creating class

Page 28: Process Internals

code Value

ABOVE_NORMAL_PRIORITY_CLASS

0x00008000

BELOW_NORMAL_PRIORITY_CLASS

0x00004000

HIGH_PRIORITY_CLASS 0x00000080

IDLE_PRIORITY_CLASS 0x00000040

NORMAL_PRIORITY_CLASS 0x00000020

REALTIME_PRIORITY_CLASS 0x00000100

Page 29: Process Internals

BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation);

DWORD GetPriorityClass( HANDLE hProcess);

Page 30: Process Internals

Real-time priority class is specifiedCaller doesn't have the Increase Scheduling

Priority privilegeHigh priority class is used insteadCreateProcess doesn't fail

CreateProcess動作不會失敗,只是會取得High priority

All windows are associated with desktops

Page 31: Process Internals

Two things to do:Find the appropriate Windows image

Run the executable file specified by the callerCreate a section object

Later map it into the address space of the new process

No image name is specifiedFirst token of the command line is used as the

image filename

Page 32: Process Internals

What kind of file?Executable file specified is a Windows .exe

Used directlyMS-DOS, Win16, or a POSIX application

Find a Windows support imagePOSIX application - Posix.exeMS-DOS or a Win16 executable - Ntvdm.exe

Page 33: Process Internals
Page 34: Process Internals

CreateProcess run an image decision treeMS-DOS application

A message sent to the Windows subsystemA support process has already been created for this

session?Ntvdm.exe

HKLM\SYSTEM\CurrentControlSet\Control\WOW\ cmdline

Has been createdIt is used to run the MS-DOS application,

CreateProcess returnsHasn't been created

Image changes to Ntvdm.exe, restarts

Page 35: Process Internals

.batImage to be run becomes Cmd.exe, restartsName of the batch file passed as the first

parameterWin16 (windows 3.1)

CREATE_SEPARATE_WOW_VDM and CREATE_SHARED_WOW_VDM control this decisionNot specifid, HKLM\SYSTEM\CurrentControlSet\

Control\WOW\ DefaultSeparateVDMNew VDM process or shared VDM process

Page 36: Process Internals

New VDM processHKLM\SYSTEM\CurrentControlSet\Control\WOW\

wowcmdline - (Ntvdm.exe)Restarts

Use default sessionwide shared VDM processSends a message to seeRunning on a different desktop or isn't running

under the same security as the callerNew VDM process

Can be usedSends a message to it to run the new imageCreateProcess returns

Page 37: Process Internals

Hasn't yet been created or can not be useImage to be run changes to the VDM support image,

restart

Page 38: Process Internals

Decision Tree for Stage 1 of CreateProcess

If the image is a/an And this will happen

This image will run

POSIX executable file Posix.exe restarts Stage 1.

MS-DOS application with an .exe, a .com, or a .pif extension

Ntvdm.exe restarts Stage 1.

Win16 application Ntvdm.exe restarts Stage 1.

Command procedure (application with a .bat or a .cmd extension)

Cmd.exe restarts Stage 1.

Page 39: Process Internals

Valid Windows executable file, created a section object for itDoesn't mean that the file is a valid Windows

imageIt isn't mapped into memory yet, but it is open

DLL or a POSIX executablePOSIX

changes to Posix.exeCreateProcess restarts

DLLCreateProcess fails

Page 40: Process Internals

CreateProcess looks forHKLM\SOFTWARE\Microsoft\Windows NT\

CurrentVersion\Image File Execution OptionsSubkey with the filename and extension of the

executable imageNot exists, CreateProcess looks for a value

named Debugger for that keyIf this is present, the image to be run becomes

the string in that valueAnd CreateProcess restart

Page 41: Process Internals

Has been doneValid Windows executable fileSection object

Create Windows executive process objectBy call NtCreateProcess

Page 42: Process Internals

Creating the executive process object substages:Setting up the EPROCESS blockCreating the initial process address spaceInitializing the kernel process block

(KPROCESS)Concluding the setup of the process address

spaceCompleting the setup of the executive process

object

Page 43: Process Internals

1. Allocate and initialize the Windows EPROCESS block.

配置以及初始化 EPROCESS block

2. Inherit the process affinity mask from the parent process.

繼承 affinity mask(與多CPU或多核心有關的設定 )

3. Set minimum and maximum working set size PsMinimumWorkingSet and PsMaximumWorkingSet

4. Set the new process's quota block to the address of its parent process's quota block, and increment the reference count for the parent's quota block.

設定 quota block 到 parent process

Page 44: Process Internals

5. Inherit the Windows device name space 繼承 device name space 包含各種名稱的定義

6. Store the parent process‘s process ID in the InheritedFromUniqueProcessId field in the new process object.

將 parent process 的 process ID儲存起來

Page 45: Process Internals

7. Create the process's primary access token

建立 process 的 primary access token(使用者資訊 )

與 parent process 的 primary token完全相同 (繼承、複製 )

如果呼叫的是 CreateProcessAsUser 並指定了特定的 access token

Access token會在這個階段改變

Page 46: Process Internals

8. The process handle table is initialized新 process 的 Handle table接著被初始化若 Inherit handles flag有被指定, parent process可以被繼承的 handle會複製到新 process 的 table內

9. Set the new process's exit statusTo STATUS_PENDING

Page 47: Process Internals

Initial process address space pagesPage directoryHyperspace pageWorking set list

Creating StepsPage table entries會建立在對應的 page table上,並且指向一些對應的 Initial pagesKernel變數MmTotalCommittedPages會減少,並且增加到MmProcessCommit

系統預設最小 process working set size 會從變數MmResidentAvailablePages中扣掉

Page table 的 page以及系統 Cache會對應到process

Page 48: Process Internals

Initialization of the KPROCESS blockA pointer to a list of kernel threads

Also points to:Process's page table directoryTotal time the process's threads have executedProcess's default base-scheduling priorityDefault processor affinity for the threads in the

processInitial value of the process default quantumFirst entry in the systemwide quantum array

Page 49: Process Internals

Virtual memory managerSet process's last trim time to the current

time

Working set managerUses this value to determine when to initiate

working set trimming

Memory managerInitializes the process's working set listPage fault can now be taken

Page 50: Process Internals

Section objectMapped into the new process's address spaceProcess section base address is set to the base

address of the image

Ntdll.dll is mapped into the process

The systemwide national language support (NLS) tables are mapped into the process's address space

Page 51: Process Internals

Initial Values of the Fields of the PEBField Initial Value

ImageBaseAddress Base address of section

NumberOfProcessors KeNumberProcessors kernel variable

NtGlobalFlag NtGlobalFlag kernel variable

CriticalSectionTimeout MmCriticalSectionTimeout kernel variable

HeapSegmentReserve MmHeapSegmentReserve kernel variable

HeapSegmentCommit MmHeapSegmentCommit kernel variable

Page 52: Process Internals

Initial Values of the Fields of the PEBField Initial Value

HeapDeCommitTotalFreeThreshold

MmHeapDeCommitTotalFreeThreshold kernel variable

HeapDeCommitFreeBlockThreshold

MmHeapDeCommitFreeBlockThreshold kernel variable

NumberOfHeaps 0

MaximumNumberOfHeaps (Size of a page - size of a PEB) / 4

ProcessHeaps First byte after PEB

Page 53: Process Internals

Initial Values of the Fields of the PEB

Field Initial Value

OSMajorVersion NtMajorVersion kernel variable

OSMinorVersion NtMinorVersion kernel variable

OSBuildNumber NtBuildNumber kernel variable & 0x3FFF

OSPlatformId 2

Page 54: Process Internals

Windows Replacements for Initial PEB Values

Field Name Value Taken from Image Header

OSMajorVersion OptionalHeader.Win32VersionValue & 0xFF

OSMinorVersion (OptionalHeader.Win32VersionValue >> 8) & 0xFF

OSBuildNumber (OptionalHeader.Win32VersionValue >> 16) & 0x3FFF

OSPlatformId (OptionalHeader.Win32VersionValue >> 30) ^ 0x2

Page 55: Process Internals

If systemwide auditing of processes is enabledProcess's creation is written to the Security event

logIf the parent process was contained in a job

New process is added to the jobIf Image header IMAGE_FILE_UP_SYSTEM_

ONLY flag is setA single CPU is chosen for all the threads in this

new process

Page 56: Process Internals

If the image specifies an explicit processor affinity maskValue is copied to the PEBSet as the default process affinity mask

CreateProcess inserts the new process block at the end of the Windows list of active processes PsActiveProcessHead

Page 57: Process Internals

The process's creation time is set, the handle to the new process is returned to the callerCreateProcess in Kernel32.dll

Page 58: Process Internals

Presenter: 彭冠儒

Page 59: Process Internals
Page 60: Process Internals

Creating the Initial Thread and Its

Stack and Context

Page 61: Process Internals

Sets up context and stackThe stack size for the initial thread is taken

from the image—there's no way to specify another size.

Initialize Thread1.NtCreateThread2.PspCreateThread

Referencehttp://undocumented.ntinternals.net/

Page 62: Process Internals

建立、設定 ETHREAD(executive thread block),並更新 EPROCESS內的設定Ex: increment the thread count 、 generate thread id

在 user-mode address space建立、設定 TEB設定 ETHREAD結構中的 user-mode theard起始位置

Kernel32.dll – system supplied thread startup functionBaseProcessStartBaseThreadStart

呼叫 KeInitThread 設定 KTHREADEx: allocates a kernel stack , initializes the machine-

dependent hardware context 呼叫” notification routine”

Page 63: Process Internals

Notifying the Windows Subsystem

about the New Process

Page 64: Process Internals

目標在 User Mode可以執行其他OS 的 System API。

Kernel Mode骨子裡都是Windows System APINT帶入 Subsystem的概念

底層Windows System API 的 Wrapper不同的Wrapper,就可以造出不同OS System API的假象

Page 65: Process Internals
Page 66: Process Internals

隨著Windows OS的成功,現在已經沒有必要支援其他OS 的 System API所以Windows只有一個SubSystem,就是他自己。

平時 SubSystem 以 process的方式存在,就像Server一樣等待 User Mode的程式發出request 。

Local Procedure CallWin32 的 PE檔案格式中就有提供一個“ SUBSYSTEM”的欄位。告訴作業系統如何執行檔案

Page 67: Process Internals

Depends.exe

Page 68: Process Internals

子系統行程 csrss.exe(C/S Run-time System)視窗操作 (放大、縮小 )、 process & thread 管理、執行 dos or windows 16 bit, 32 bit 之程式

圖形設備驅動Win32.sys視窗管理、接收設備(鍵盤、滑鼠)

系統 DLLKernel32.dll, Advapi32.dll, User32.dll, 以及

Gdi32.dll

Page 69: Process Internals

Services.exe      Service Controller ProcessWinlogon.exe     Logon ProcessSmss.exe         Session Manager ProcessPsxss.exe         POSIX Subsystem ProcessOS2ss.exe        OS/2 Subsystem Process Csrss.exe         Win32 Subsystem Process

Page 70: Process Internals

Ntdll.dll    Internal Support Functions and

System Service                Dispatch stubs to Executive

FunctionsKernel32.dll       Win32 Subsystem DLLsUser32.dllGDI32.dllPsxdll.dll          POSIX Subsystem DLLNTOSKRNL.EXE   Executive and KernelHal.dll           Hardware Abstraction LayerWin32k.sys       Win32 User and GDI Kernel-

mode Components

Page 71: Process Internals

利用 Kernel32.dll 送 message 給 Windows子系統

Message包含Process 和 Thread 的 handlesEntries in the creation flags父行程的 Process IDFlag

To indicate whether the process belongs to a Windows application

Page 72: Process Internals

1. 複製 Process 和 Thread 的 handle.2. Process 和 Thread的計數加一3. 設定 Process的優先權 (如果沒有指定的話 )4. 建立 Csrss中的 process block5. 設定 ports. (exception port, debug port)6. 建立 Csrss中的 thread block7. 在 Process 的 thread list中加入此 thread8. 設定關閉等級為

0x280(SetProcessShutdownParameters)

Page 73: Process Internals
Page 74: Process Internals

10.在子系統的 process list中加入此 process11.建立並初始W32PROCESS structure(子系統在 kernel-mode執行 process時會用到的結構 )

12.顯示游標

Page 75: Process Internals

Starting Execution of the Initial Thread

If caller not specified CREATE_SUSPENDED flag.Start running and perform the remainder of the

process initialization work.

Page 76: Process Internals

Performing Process Initialization in

the Context of the New Process

Page 77: Process Internals

『 Interrupt執行的優先等級』。 較高優先權的 Interrupt會中斷較低優先權

Interrupt。當這個狀況發生時,所有其他等於或是低於這個 IRQL的中斷都將成為等待狀態。

IRQLnew <= IRQLcurrent

不會影響目前程式執行。IRQLnew > IRQLcurrent

中斷目前的工作,執行 Interrupt的工作。數值越大代表其 IRQL的優先權越高。 透過 KeGetCurrentIRQL()這個 System

routine可以得到目前 Processor 的 IRQL 。

Page 78: Process Internals
Page 79: Process Internals

KiThreadStartupIRQL

DPC -> APC

PspUserThreadStartupqueues a user-mode APC

use LdrInitializeThunk() in “ntdll.dll” initializes the loader, heap manager, NLS tables,

thread-local storage (TLS) array, and critical section structures

link dlls

Page 80: Process Internals

DLL hellyou install an application that replaces one or

more core system DLLs, but incompatibilities with other already-installed applications.

Windows 2000allowing applications to use private copies

Application.exe.local

ProblemSharingKnownDLLs

cannot be redirected using this mechanism

Page 81: Process Internals

16 bit dllHKEY_LOCAL_MACHINE\System\

CurrentControlSet\Control\Wow32 bit dll

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager

Page 82: Process Internals

Windows XP shared assembliesgroup of resources

DLLs + XML manifest

application.exe.manifestdescribes the application and its dependence

on assembliesPrivate assembliesShared assemblies

digitally signed

Page 83: Process Internals

http://loda.zhupiter.com/WindowsNTSubSystem.htm

http://bbs.pediy.com/showthread.php?t=56230

http://support.microsoft.com/kb/164501/zh-twhttp://linux.insigma.com.cn/jszl.asp?docid=13

6564375http://www.mbs3.org/wdmproject/intspri.html

Page 84: Process Internals

Speaker : 姜怡楷

84

Page 85: Process Internals

Data StructureETHREADKTHREADTEB

Kernel VariablePerformance CountersRelevant FunctionsBirth of a Thread

85

Page 86: Process Internals

What is ETHREAD ?Windows thread is represented by an executive

thread

Where is ETHREAD(KTHREAD) ?ETHREAD block that the structures it point to

exists in the system address space

Where is Thread environment block (TEB) ?Thread environment block (TEB) exist in the

process address space

86

Page 87: Process Internals

The Windows subsystem process(Csrss) maintain a parallel structure for each thread create in a Windows process

The Kernel mode portion of the Windows subsystem( Win32K.sys) maintain a per-thread data structure ( W32THREAD structure )

87

Page 88: Process Internals

88

Page 89: Process Internals

89

Page 90: Process Internals

90

Page 91: Process Internals

91

Page 92: Process Internals

92

Page 93: Process Internals

Displaying ETHREAD and KTHREAD Structureslkd> dt nt!_ethread lkd> dt nt!_kthread

Using the Kernel Debugger !thread Commandlkd> !thread

Viewing Thread Information

Examining the TEB

93

Page 94: Process Internals

Lkd> !process 0 0

Page 95: Process Internals

Lkd>!process 8590f020 3

Page 96: Process Internals

Thread Infomation

Address of ETHREAD Address of TEBThread ID

Address of EPROCESS for owing process

Address of user thread function

Actual thread start address

Page 97: Process Internals

Using Tlist

Page 98: Process Internals

The TEB stores context information for the image loader and various Windows DLLs. (for user-mode)

.

Page 99: Process Internals

Introduction to NT Internalshttp://www.alex-ionescu.com/part1.pdf

TIBhttp://en.wikipedia.org/wiki/Win32_Thread_Info

rmation_Block

TLS ( Thread Local Storage )http://en.wikipedia.org/wiki/Thread-local_stora

ge

99