Win32 API涓殑鎵鏈夎皟鐢ㄦ渶緇堥兘杞悜浜唍tdll.dll錛屽啀鐢卞畠杞彂鑷硁toskrnl.exe銆俷tdll.dll鏄湰鏈?API鐢ㄦ埛妯″紡鐨勭粓绔傜湡姝g殑鎺ュ彛鍦╪toskrnl.exe閲屽畬鎴愩備簨瀹炰笂錛屽唴鏍告ā寮忕殑椹卞姩澶ч儴鍒嗘椂闂磋皟鐢ㄨ繖涓ā鍧楋紝濡傛灉瀹冧滑璇鋒眰緋葷粺鏈嶅姟銆侼tdll.dll鐨勪富瑕佷綔鐢ㄥ氨鏄鍐呮牳鍑芥暟鐨勭壒瀹氬瓙闆嗗彲浠ヨ鐢ㄦ埛妯″紡涓嬭繍琛岀殑紼嬪簭璋冪敤銆侼tdll.dll閫氳繃杞歡涓柇int 2Eh榪涘叆ntoskrnl.exe錛屽氨鏄氳繃涓柇闂ㄥ垏鎹PU鐗規潈綰с?br>Ntdll.dll 涓婇潰鐨勭浉鍏矨PI鍑芥暟鍘熷瀷鍜屽弬鏁伴兘娌℃湁鏂囨。鍖?Undocumented ): http://undocumented.ntinternals.net/ 榪欓噷鎻愪緵浜哊tdll.dll閮ㄥ垎鏈叕寮鍑芥暟鐨勫師鍨?
鐞嗚Вwindow API鍙婂嚱鏁板師鍨嬪鎴戜滑鐨勮皟璇曞皢鏄潪甯擱噸瑕佺殑: 鍥犱負浣犳椂甯擱渶瑕佸幓瀵熺湅涓浜涘嚱鏁扮殑鍙傛暟,鎴栬呮牴鎹弬鏁版壘鍒版煇浜涜緭鍏ユ寚閽?
渚嬪:
17 Id: a84.cc4 Suspend: 1 Teb: 7ff3a000 Unfrozen
ChildEBP RetAddr Args to Child
187ffdb8 77845e6c 7782fc72 00001938 00000000 ntdll!KiFastSystemCallRet
187ffdbc 7782fc72 00001938 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
187ffe20 7782fb56 00000000 00000000 00000000 ntdll!RtlpWaitOnCriticalSection+0x13e
187ffe48 01b05d13 0x77c8ba60 81fa55ed 028766c8 ntdll!RtlEnterCriticalSection+0x150
浠庡爢鏍堝彲浠ョ湅鍑虹嚎紼?7 姝e湪榪涘叆鏌愪竴涓復鐣屽尯. 0x77c8ba60 灝辨槸浼犲叆鐨勪復鐣屽?鍙傛暟.
17> !cs 0x77c8ba60 --> !cs 鏄敤鏉ユ煡鐪嬩復鐣屽尯淇℃伅鐨勫懡浠?br>DebugInfo = 0x77fbde20
Critical section = 0x77c8ba60 (GDI32!semColorSpaceCache+0x0)
LOCKED
LockCount = 0x0
OwningThread = 0x00000dd8
RecursionCount = 0x1
LockSemaphore = 0x0
SpinCount = 0x00000000
鍙互鐪嬪埌 LOCKED 浠h〃涓寸晫鍖烘槸閿佸畾鐘舵? 鍗寵鍗犵敤.
OwningThread 鍗蟲槸鍗犵敤綰跨▼.
涓寸晫鍖轟俊鎭粨鏋勫畾涔夊湪ntdll, 鍙互浣跨敤濡備笅鎸囦護榪涜瀵熺湅.
> dt ntdll!_RTL_CRITICAL_SECTION
+0x000 DebugInfo : Ptr32 _RTL_CRITICAL_SECTION_DEBUG
+0x004 LockCount : Int4B
+0x008 RecursionCount : Int4B
+0x00c OwningThread : Ptr32 Void
+0x010 LockSemaphore : Ptr32 Void
+0x014 SpinCount : Uint4B
瀵熺湅鏌愪釜鍔ㄦ佸簱鍑芥暟琛ㄧ殑鎸囦護:
x ntdll!*
x kernal!*
瀵熺湅緇撴瀯浣撳畾涔?
dt ntdll!*
浠諱綍鍔ㄦ佸簱鍖呮嫭window 32鐨勭敤鎴鋒乨ll 鍜岀敤鎴瘋嚜瀹氫箟鍔ㄦ佸簱閮芥槸鐢熼暱鍦ㄨ繘紼嬪唴瀛樼┖闂翠笂鐨?
DLL 娌℃湁鑷繁鐨?縐佹湁"鍦板潃絀洪棿. 瀹冧滑鎬繪槸琚獎灝勫埌搴旂敤紼嬪簭鐨勮櫄鎷熷湴鍧絀洪棿,鍦ㄩ渶瑕佹椂鎵嶄細琚鍙栧埌鐗╃悊鍐呭瓨涓?
鍦ㄦ湰緋誨垪鐨勫叾瀹冪珷鑺傛垜浼氳皥鍒拌櫄鎷熷湴鍧絀洪棿鐨勫唴瀹?
閫氳繃鎸囦護鍙互鐪嬪埌ntdll 琚槧灝勫埌77800000 ~ 7793c000鐨勫唴瀛樼┖闂翠腑.
> x *!
77800000 7793c000 ntdll (pdb symbols) c:\mylocalsymbols\ntdll.pdb\F0164DA71FAF4765B8F3DB4F2D7650EA2\ntdll.pdb
褰撲綘鐨勪唬鐮?綰跨▼)鏍堜腑鍑虹幇鍦板潃鑼冨洿鍦?77800000 ~7793c000 涔嬮棿鐨勫嚱鏁拌皟鐢ㄩ兘琛ㄧず鍦╟all NTDLL.dll
姣斿:
7 Id: a84.c34 Suspend: 1 Teb: 7ff3f000 Unfrozen
ChildEBP RetAddr Args to Child
089bfe8c 77845e6c 75a0179c 00000d98 00000000 ntdll!KiFastSystemCallRet
089bfe90 75a0179c 00000d98 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
089bfefc 75c9f003 00000d98 ffffffff 00000000 KERNELBASE!WaitForSingleObjectEx+0x98
089bff14 75c9efb2 00000d98 ffffffff 00000000 kernel32!WaitForSingleObjectExImplementation+0x75
089bff28 69434fea 00000d98 ffffffff 0780c178 kernel32!WaitForSingleObject+0x12
WARNING: Stack unwind information not available. Following frames may be wrong.
姝ょ嚎紼嬩腑WARNING: Stack unwind information not available. Following frames may be wrong.琛ㄧずwindbg鏃犳硶緲昏瘧鎴栬呮壘鍒板搴攕ymbols鏉ユ樉紺篶ode stack. 榪欑閿欒寰寰鏄繚瀛榙ump file鏃跺嚭鐜扮殑鏌愮寮傚父淇℃伅.window涔熸病鏈夌粰鍑哄悎鐞嗙殑瑙i噴.
浠ヤ笅鏄疢SDN鐨勫師璇?
In some cases, the stack trace function will fail in the debugger. This can be caused by a call to an invalid address that caused the debugger to lose the location of the return address; or you may have come across a stack pointer for which you cannot directly get a stack trace; or there could be some other debugger problem. In any case, being able to manually walk a stack is often valuable.
榪欐椂鍊欎綘闇瑕佹墜鍔ㄧ殑榪涜鎭㈠鏍堣皟鐢? 濡傛灉浣犱簡瑙f瘡涓姩鎬佸簱鐨勬槧灝勫湴鍧浣犲氨寰堝鏄撹繘琛屽垎鏋愪簡.
瀵熺湅鍔ㄦ佸簱涓瘡涓嚱鏁版槧灝勭殑鍦板潃鍙互閲囩敤濡備笅鎸囦護 :
x ntdll!
鎵嬪姩鎭㈠鏍堢殑澶ц嚧鍘熺悊濡備笅:
1. 鍒楀嚭綰跨▼鐜淇℃伅
0:000> !teb
TEB at 7fffe000
ExceptionList: 0012ff88
StackBase: 00130000
StackLimit: 00126000
……….
2. 鎵撳紑鏁翠釜綰跨▼鏍?
0:000> dds 00126000 00130000
3. 瀵熺湅鍐呭瓨涓墍鏈夊彲鑳芥槸鍑芥暟榪斿洖鍊?/span>.
>ln address

]]>