我試圖弄清楚為什么添加到路徑AddDllDirectory()而不是退出行程 PATH 不會讓我加載在 VBA 函式中使用的 dll。所以我想知道第三個引數LoadLibraryExW()是什么。
第一個問題是我的符號加載正確。我的符號服務器快取充滿了 pdb 檔案。但是,沒有找到 kernelbase.dll 的符號。
行程監視器顯示堆疊跟蹤,但不顯示符號。
我kernelbase!LoadLibraryExW在 WinDbgPreview 中設定了一個斷點,但我不確定如何讀取堆疊跟蹤。在這個例子中,那些十六進制值之一應該是第三個引數?或者當我想要堆疊時,這是從暫存器中取出的嗎?
# Child-SP RetAddr : Args to Child : Call Site
00 00000051`184fe648 00007ffe`e30b5ae5 : 00007ffe`e3431380 00000000`00000060 00000051`184feac0 00000000`00000008 : KERNELBASE!LoadLibraryExW
01 00000051`184fe650 00007ffe`e30b5a45 : 00000051`184fe704 1103aa3e`00000001 00000000`00000008 00000000`00000007 : mso20win32client!Ordinal104 0x295
02 00000051`184fe690 00007ffe`e3090bb1 : 000001df`179f4860 00000000`02000000 00000000`00000008 00000000`00000000 : mso20win32client!Ordinal104 0x1f5
03 00000051`184fe6d0 00007ffe`e3091c11 : 00000051`184feb10 000001df`179f4860 00000000`00000000 00000051`184feaf0 : mso20win32client!Ordinal67 0x1f71
04 00000051`184fea50 00007ffe`d808e62a : 000001df`179f4860 00007ffe`d9c34730 000001df`17f7b1c0 00000000`00000000 : mso20win32client!Ordinal1818 0x8c1
05 00000051`184fead0 00007ffe`d808f3c3 : 000001df`179f4860 00007ffe`d9c34730 000001df`17f7b1c0 00007ffe`d9c33a10 : mso!Ordinal2534 0x51a
06 00000051`184feb10 00007ffe`d808f347 : 000001df`182fb2c0 000001df`00000001 000001df`182fb2c0 00000000`00000000 : mso!Ordinal2534 0x12b3
07 00000051`184feb50 00007ffe`d8153c24 : 000001df`182fb2c0 00000000`00000000 000001df`17f7b1c0 000001df`17f7b1c0 : mso!Ordinal2534 0x1237
08 00000051`184feb80 00007ffe`d80b1c8e : 00000051`184ff290 00000000`0001d4c0 000001df`17ed3700 00000051`184ff360 : mso!Ordinal1436 0x16b4
09 00000051`184ff0d0 00007ffe`d80b1925 : 000001df`12529600 00000000`00000000 000001df`17ca9430 000001df`12529600 : mso!Ordinal921 0xe6e
0a 00000051`184ff340 00007ffe`e2fe3c3c : 00000051`184ff488 00000051`184ff440 00000000`00000000 00000000`00000000 : mso!Ordinal921 0xb05
0b 00000051`184ff3d0 00007ffe`e2fe413b : 000001df`01849818 00000000`00000000 000001df`01849800 00000000`00000144 : mso20win32client!Ordinal1756 0xbc
0c 00000051`184ff460 00007ffe`e2fe3c3c : 000001df`11d96b90 000001df`17823c68 000001df`17ca9430 00007fff`88aa7551 : mso20win32client!Ordinal1756 0x5bb
0d 00000051`184ff4f0 00007ffe`e311741d : 000001df`1284a6a0 00000000`00000000 00000051`184ff790 00000000`00000000 : mso20win32client!Ordinal1756 0xbc
0e 00000051`184ff580 00007ffe`e3050e6e : 000001df`1284a6a0 00000000`00000000 000001df`1284a601 000001df`01a18f80 : mso20win32client!Ordinal1700 0x28d
0f 00000051`184ff5b0 00007ffe`e3051ed5 : 00000051`184ff710 000001df`1284a6a0 000001df`01a18f80 000001df`1284a6a0 : mso20win32client!Ordinal347 0x23e
10 00000051`184ff610 00007ffe`e305c2d6 : 000001df`017c9470 00000000`00000000 000001df`017c9470 00000000`00000000 : mso20win32client!Ordinal1966 0x6e5
11 00000051`184ff770 00007fff`873854e0 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : mso20win32client!Ordinal2633 0x686
12 00000051`184ff7e0 00007fff`88a8485b : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk 0x10
13 00000051`184ff810 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart 0x2b
有沒有辦法獲得 kernlbase.pdb?它適用于舊版本的Windows嗎?是否有我可以讀取引數的 WinDbg 命令?
uj5u.com熱心網友回復:
這是一個評論,但它變得如此回答
有時你已經下載了一半或中止了 pdb 的下載,在這種情況下很明顯符號檔案沒有被下載
中止的下載具有 .error 擴展名
檢查您是否有這樣的檔案并洗掉它們以正確重新下載 pdbs。
f:\symbols>set _NT_
_NT_SYMBOL_PATH=srv*f:\symbols*https://msdl.microsoft.com/download/symbols
f:\symbols>dir /s /b *.error
f:\symbols\windows.ui.xaml.pdb\7349BE8DF456ACFBEE7774E6197449541\downloadDA83A900E9B74A20B6A95465B35021C5.error
如果您的平臺是 x64,如已注釋
,前四個引數在 windows 上通過rcx、rdx、r8 和 r9傳遞
任意二進制檔案上的 LoadLibraryExW 中斷
0:000> k4
Child-SP RetAddr Call Site
000000a4`6013eda8 00007ffb`f5df62f1 KERNELBASE!LoadLibraryExW
000000a4`6013edb0 00007ffb`f5df6449 ucrtbase!try_get_function 0xa9
000000a4`6013ee00 00007ffb`f5df5e80 ucrtbase!_vcrt_FlsAlloc 0x25
000000a4`6013ee30 00007ffb`f5df5cb9 ucrtbase!_vcrt_initialize_ptd 0x10
0:000> r rcx,rdx,r8,r9
rcx=00007ffbf5e778a0 rdx=0000000000000000 r8=0000000000000800 r9=00007ffbf5e75a70
0:000> du @rcx
00007ffb`f5e778a0 "api-ms-win-core-fibers-l1-1-1"
0:000> ? @r8
Evaluate expression: 2048 = 00000000`00000800
0:000> .shell -ci ".echo looking for 0x800" pss LOAD_.*0x00000800 "c:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\libloaderapi.h"
c:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\libloaderapi.h:409:#define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800
.shell: Process exited
0:000>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365515.html
