Невозможно загрузить .loadby sos mscorwks или .loadby sos clr - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть приложение .NET .86.Я пытаюсь запустить dumpdomain из cdb, но получаю сообщение об ошибке.

Есть много вопросов по этому поводу, и я попробовал несколько вариантов:

C:\Users\d.banks\Documents>cdb DoNothingx86.exe

Microsoft (R) Windows Debugger Version 10.0.17134.12 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: DoNothingx86.exe

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*C:\Symbols\Microsoft
*http://msdl.microsoft.com/download/symbols
Symbol search path is: srv*C:\Symbols\Microsoft
*http://msdl.microsoft.com/download/symbols
Executable search path is:
ModLoad: 00000000`002d0000 00000000`002d8000   image00000000`002d0000
ModLoad: 00007ff8`4f790000 00007ff8`4f960000   ntdll.dll
ModLoad: 00000000`77af0000 00000000`77c73000   ntdll.dll
ModLoad: 00000000`6dda0000 00000000`6ddf2000   C:\WINDOWS\System32\wow64.dll
ModLoad: 00000000`6de10000 00000000`6de87000   C:\WINDOWS\System32\wow64win.dll
(3e64.e4c): Break instruction exception - code 80000003 (first chance)
ntdll!LdrpDoDebuggerBreak+0x30:
00007ff8`4f862cc0 cc              int     3

0:000> .loadby sos.dll mscorwks
Unable to find module 'mscorwks'

0:000> .loadby sos mscorwks
Unable to find module 'mscorwks'

0:000> .loadby C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll mscorwks
Unable to find module 'mscorwks'

0:000> .loadby sos.dll clr
Unable to find module 'clr'

0:000> .loadby sos clr
Unable to find module 'clr'

0:000> .loadby C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll clr
Unable to find module 'clr'

0:000> .load C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll
The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.
0:000> .load C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll clr
The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll clr) failed, Win32 error 0n126
    "The specified module could not be found."
Please check your debugger configuration and/or network access.

Iпробовал использовать отладчик x86:

Microsoft (R) Windows Debugger Version 10.0.17134.12 X86
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: DoNothingx86.exe

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*C:\Symbols\Microsoft
*http://msdl.microsoft.com/download/symbols
Symbol search path is: srv*C:\Symbols\Microsoft
*http://msdl.microsoft.com/download/symbols
Executable search path is:
ModLoad: 00930000 00938000   image00930000
ModLoad: 77af0000 77c73000   ntdll.dll
ModLoad: 77900000 779e0000   WOW64_IMAGE_SECTION
ModLoad: 733c0000 73419000   C:\WINDOWS\SysWOW64\MSCOREE.DLL
ModLoad: 77900000 779e0000   C:\WINDOWS\SysWOW64\KERNEL32.dll
ModLoad: 76a00000 76ba2000   C:\WINDOWS\SysWOW64\KERNELBASE.dll
(1e98.2bb0): Break instruction exception - code 80000003 (first chance)
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll -
eax=00000000 ebx=00000000 ecx=327c0000 edx=00000000 esi=00f326e8 edi=00bd7000
eip=77b96d5c esp=00cff2e4 ebp=00cff310 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!LdrInitShimEngineDynamic+0x71c:
77b96d5c cc              int     3

0:000> .loadby sos.dll mscorwks
Unable to find module 'mscorwks'

0:000> .loadby sos.dll clr
Unable to find module 'clr'

0:000> .loadby sos mscorwks
Unable to find module 'mscorwks'

0:000> .loadby sos clr
Unable to find module 'clr'

1 Ответ

0 голосов
/ 10 сентября 2018

С

ModLoad: 00000000`6dda0000 00000000`6ddf2000   C:\WINDOWS\System32\wow64.dll

мы видим, что это 32-битный процесс, поэтому вам нужно 32-битный SOS. 32-битный SOS работает только с 32-битным WinDbg.

Для загрузки расширений есть 2 команды. Один - .loadby, другой - .load. Для .loadby используйте относительный путь, для .load используйте полный путь.

Для .loadby существует 5 вариантов:

.loadby sos mscorsvr
.loadby sos mscorwks
.loadby sos clr
.loadby sos coreclr
.loadby sos <somethingelse>

, где mscorsvr действительно очень старый (.NET CLR 1, версия сервера), mscorwks довольно старый (.NET CLR 1 и 2, но все еще существует), clr распространен сегодня (.NET CLR 4) coreclr может увеличиваться (UWP и Silverlight), а <somethingelse> раздражает (посмотрите на lm и найдите что-то похожее, но с прикрепленным номером).

Основная проблема заключается в том, что вы пытаетесь загрузить SOS, когда среда выполнения .NET еще не загружена. Дождитесь загрузки .NET, и тогда команда сработает. Это, конечно, невозможно в начальной точке останова.

Используйте

sxe ld clr
sxe ld mscorwks
sxe ld coreclr
g

чтобы приложение работало, пока не станет доступен .NET

...