
اجرای WinDbg Preview با دسترسی Administrator
کرنل دیباگ حتماً نیاز به دسترسی ادمین داره:
روی WinDbg Preview راستکلیک کن
Run as administrator
باز کردن صفحه Kernel Debug
بعد از اجرای WinDbg Preview:
از منوی بالا روی File کلیک کن
گزینه Attach to kernel رو انتخاب کن
انتخاب نوع Kernel Debug (Local)
در پنجرهای که باز میشه:
گزینه Local به صورت پیشفرض انتخاب شده
اگر چند گزینه دیدی، مطمئن شو روی Local Kernel Debugging هست
سپس:
روی OK کلیک کن
اگر اتصال موفق باشه، پایین پنجره میبینی:

بعد از اتصال، حتماً سمبلها رو تنظیم کن:
.symfix .sympath+ srv*C:\ProgramData\Dbg\sym*https://msdl.microsoft.com/download/ .reload /f
این مرحله برای دیدن:
ساختارها (struct)
نام توابع
PEB / TEB / EPROCESS
حیاتی هست.
دستور
!process
تعریف
دستور !process در WinDbg برای نمایش اطلاعات پروسسها در کرنل استفاده میشود.
این دستور به تو اجازه میدهد لیست پروسسها، وضعیت آنها، و ساختار داخلی هر پروسس (مثل PEB، پیوندها، آدرسها) را ببینی.
سینتکس
!process <Address|0> <Flags>
Address: اگر صفر بگذاری، لیست همه پروسسها نمایش داده میشود.
Flags: مشخص میکند چه اطلاعاتی نمایش داده شود. رایجترینها:
0 : فقط آدرس پروسس و PID
1 : نمایش جزئیات بیشتر (مثل Threadها)
2 : نمایش کامل
مثال:
!process 0 1
خروجی نمونه:
PROCESS fffffa800c123450 SessionId: 1 Cid: 04c0 Peb: 7fffffd000 ParentCid: 01b4 DirBase: 000000003fef0000 ObjectTable: fffff88001234560 HandleCount: 500. Image: notepad.exe Threads: fffffa800c123700 fffffa800c123a00
توضیح خروجی:
PROCESS fffffa800c123450 → آدرس ساختار EPROCESS در حافظه کرنل
SessionId → شناسه سشن ویندوز
Cid → شناسه پروسس (Process ID)
Peb → آدرس PEB پروسس در حافظه کاربر
ParentCid → شناسه پروسس والد
DirBase → پایه جدول صفحات (Page Table)
ObjectTable → جدول Handleها
HandleCount → تعداد Handleهای باز
Image → نام فایل اجرایی پروسس (مثل notepad.exe)
Threads → لیست آدرسهای Threadها در این پروسس

دستور
!thread
تعریف
به شما اجازه میدهد وضعیت Thread، آدرس ساختار KTHREAD و ارتباط آن با پروسس، Priority و Wait Blockها را ببینی.
سینتکس
!thread <ThreadAddress> [Flags]
ThreadAddress: آدرس KTHREAD از خروجی دستور !process یا مستقیم از ساختار Thread
Flags (اختیاری): تعیین جزئیات نمایش
مثال:
فرض کن Thread از خروجی !process آدرسش اینه:
fffffa800c123700
!thread fffffa800c123700
خروجی نمونه:
THREAD fffffa800c123700 Cid 04c4.04c8 Teb: 000000007ffff000 Win32Thread: fffffa800c567890 State: Ready Priority: 8 BasePriority: 8 Context Switches: 120
توضیح خروجی:
THREAD fffffa800c123700 → آدرس KTHREAD
Cid 04c4.04c8 → شناسه پروسس.شناسه Thread
Teb → آدرس TEB این Thread
Win32Thread → ساختار Thread سطح User
State → وضعیت Thread (Ready, Running, Waiting)
Priority / BasePriority → اولویت فعلی و پایه
Context Switches → تعداد Context Switchهایی که این Thread تجربه کرده

نکته مهم
نکته مهم:
معمولاً ابتدا دستور !process 0 1 را اجرا میکنیم تا لیست پروسسها همراه با Threadهای آنها نمایش داده شود. سپس با استفاده از دستور !thread <ThreadAddress> میتوانیم جزئیات کامل هر Thread را بررسی کنیم.
با این دو دستور میتوان کل وضعیت Threadها و پروسسها در کرنل را ردیابی کرد.
Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com