
این دیباگر رو دانلود کنید:
windbg.msixbundle
برای باز کردن یک exe ابتدا فایل pdb را کنار exe میگذاریم و سپس مطابق شکل زیر فایل رو در WinDbg Preview باز میکنیم:


برای اضافه کردن فایل سورس مورد نظر بخش زیر را طی میکنیم.

برای اینکه سیمبول DLLهای ویندوز و Visual C++ Runtime لود شوند، باید مسیر درست را تنظیم کنیم.
اول، مسیر سیمبول را با این دستور ست میکنیم:
.symfix .sympath+ srv*C:\ProgramData\Dbg\sym*https://msdl.microsoft.com/download/symbols .reload /f
این دستور:
مسیر رسمی مایکروسافت را اضافه میکند
سیمبولها را دانلود و لود میکند
حافظهٔ local cache را C:\ProgramData\Dbg\sym قرار میدهد
بعد از این، وضعیت را دوباره چک میکنیم.
lm
باید عکس زیر نمایش داده شود.

کامند .cls : صفحه را کامل پاک میکند.
کامند k : نشان دهنده کال استک.
کامند g : ادامه دادن برنامه.
کامند .symfix: در WinDbg / WinDbg Preview برای تنظیم سریع مسیر سمبلها (Symbol Path) استفاده میشود.
کامند زیر :
.sympath+ srv*C:\ProgramData\Dbg\sym*https://msdl.microsoft.com/download/symbols
دستور بالا در WinDbg / WinDbg Preview مسیر سمبل فعلی را گسترش (append) میدهد، نه جایگزین:
این دستور چه کار میکند؟
با .sympath+ یک مسیر جدید را به آخر مسیرهای فعلی Symbol Path اضافه میکنیم.
بخش srv*...*https://... یعنی استفاده از Symbol Server مایکروسافت با یک local cache.
کامند .reload /f : دستور .reload /f در WinDbg / WinDbg Preview برای بازلود کردن اجباری (Force Reload) سمبلها استفاده میشود.
کامند x : دستور x در WinDbg برای جستجوی سمبلها است.
یعنی: پیدا کردن توابع، پیدا کردن متغیرها، پیدا کردن کلاسها، پیدا کردن ساختارها و پیدا کردن هر اسم داخل یک ماژول.
با الگو زیر:
x module!pattern*
مثال:
x kernel32!create*
خروجی زیر را میدهد:

کامند lm : دستور lm در WinDbg برای لیست کردن ماژولهای لود شده میباشد.
1. نشان میدهد چه DLL و EXEهایی در پروسه لود شدهاند
2.آدرس شروع و پایان هر ماژول
3.وضعیت سیمبولها (Loaded / Deferred / PDB)
4. مسیر و نوع سیمبولها

کامند !lmi : در WinDbg یک Debug Extension Command است که برای نمایش اطلاعات کامل یک ماژول (Module Information) استفاده میشود.
کار اصلی :
نمایش اطلاعات دقیق یک ماژول (DLL یا EXE) در حافظه User یا Kernel Mode
بررسی سیمبولها و PDB مرتبط با ماژول
اطلاعاتی مثل:
Base Address
Size
TimeDateStamp
Checksum
Path فایل
مسیر و وضعیت PDB (Loaded / Not loaded / Mismatched)
به زبان ساده: برای بررسی وضعیت و جزئیات ماژول و سیمبولهای آن استفاده میشود.


کامند !dlls :
یک Debug Extension Command در WinDbg است که مخصوص Kernel Debugging و مشاهده وضعیت ماژولها (DLL و Driver) در حافظه کرنل استفاده میشود.
کار اصلی:
نمایش تمام ماژولهای کرنل (Kernel Modules / Drivers) که در حافظه بار شدهاند
نمایش آدرس شروع و پایان هر ماژول
نمایش نام ماژول
نمایش زمان لود شدن
نمایش Base Address و Size
به طور خلاصه: مشابه lm اما مخصوص حافظه کرنل و Driverها است.

کامند !dh : برای نمایش هدر PE (Portable Executable) یک ماژول استفاده میشود.
نمایش اطلاعات هدر PE فایل EXE یا DLL
نشان دادن جزئیات مهم ساختار فایل اجرایی ویندوز
بررسی Base Address، Sections، Subsystem، Entry Point، DLL Characteristics و …
مثال: دستور زیر
!dh kernel32
خروجی زیر را میدهد:
0:000> !dh kernel32 File Type: DLL FILE HEADER VALUES 8664 machine (X64) 7 number of sections 73317569 time date stamp Sun Mar 30 11:42:41 2031 0 file pointer to symbol table 0 number of symbols F0 size of optional header 2022 characteristics Executable App can handle >2gb addresses DLL OPTIONAL HEADER VALUES 20B magic # 14.20 linker version 7D400 size of code 3A400 size of initialized data 0 size of uninitialized data 17070 address of entry point 1000 base of code ----- new ----- 00007ffab0110000 image base 1000 section alignment 200 file alignment 3 subsystem (Windows CUI) 10.00 operating system version 10.00 image version 10.00 subsystem version BD000 size of image 400 size of headers BCF26 checksum 0000000000040000 size of stack reserve 0000000000001000 size of stack commit 0000000000100000 size of heap reserve 0000000000001000 size of heap commit 4160 DLL characteristics High entropy VA supported Dynamic base NX compatible Guard 98F10 [ DE44] address [size] of Export Directory A6D54 [ 794] address [size] of Import Directory BB000 [ 520] address [size] of Resource Directory B4000 [ 555C] address [size] of Exception Directory B6E00 [ 3C28] address [size] of Security Directory BC000 [ 2FC] address [size] of Base Relocation Directory 866F0 [ 70] address [size] of Debug Directory 0 [ 0] address [size] of Description Directory 0 [ 0] address [size] of Special Directory 0 [ 0] address [size] of Thread Storage Directory 7F7F0 [ 118] address [size] of Load Configuration Directory 0 [ 0] address [size] of Bound Import Directory 807C0 [ 2A50] address [size] of Import Address Table Directory 98CC4 [ 60] address [size] of Delay Import Directory 0 [ 0] address [size] of COR20 Header Directory 0 [ 0] address [size] of Reserved Directory SECTION HEADER #1 .text name 7D26B virtual size 1000 virtual address 7D400 size of raw data 400 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 60000020 flags Code (no align specified) Execute Read SECTION HEADER #2 .rdata name 32C40 virtual size 7F000 virtual address 32E00 size of raw data 7D800 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 40000040 flags Initialized Data (no align specified) Read Only Debug Directories(4) Type Size Address Pointer cv 25 92130 90930 Format: RSDS, guid, 1, kernel32.pdb ( 13) 534 92158 90958 ( 16) 24 9268c 90e8c dllchar 4 926b0 90eb0 00000001 extended DLL characteristics CET compatible SECTION HEADER #3 .data name 121C virtual size B2000 virtual address 600 size of raw data B0600 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers C0000040 flags Initialized Data (no align specified) Read Write SECTION HEADER #4 .pdata name 555C virtual size B4000 virtual address 5600 size of raw data B0C00 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 40000040 flags Initialized Data (no align specified) Read Only SECTION HEADER #5 .didat name 68 virtual size BA000 virtual address 200 size of raw data B6200 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers C0000040 flags Initialized Data (no align specified) Read Write SECTION HEADER #6 .rsrc name 520 virtual size BB000 virtual address 600 size of raw data B6400 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 40000040 flags Initialized Data (no align specified) Read Only SECTION HEADER #7 .reloc name 2FC virtual size BC000 virtual address 400 size of raw data B6A00 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 42000040 flags Initialized Data Discardable (no align specified) Read Only
Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com