NTDLL символы доступны, но! Адрес не работает - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь выполнить базовую c отладку с помощью WinDbg, но я застрял в начале, так как моя среда не может найти символы для ntdll, и они необходимы для команды !address:

0:000> !address
No symbols for ntdll. Cannot continue.

Странная вещь в том, что при использовании lm я вижу, что отладчик знает о файле символов! Так почему он не может использовать этот файл? Этот файл был импортирован с использованием утилиты symchk, поэтому он должен быть правильным символьным файлом.

Вот вывод окна command:

0:000> .sympath
Symbol search path is: srv*C:\Symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*C:\Symbols*http://msdl.microsoft.com/download/symbols
0:000> lm
start    end        module name
007b0000 007db000   notepad    (no symbols)           
71b50000 71d5f000   COMCTL32   (deferred)             
747b0000 747ba000   CRYPTBASE   (deferred)             
747c0000 747e0000   SspiCli    (deferred)             
747e0000 748ff000   ucrtbase   (deferred)             
749c0000 74a39000   advapi32   (deferred)             
74a40000 74afb000   RPCRT4     (deferred)             
74db0000 74fac000   KERNELBASE   (pdb symbols)          c:\symbols\wkernelbase.pdb\8BC9719D7B1E26272FB1CB98D403792C1\wkernelbase.pdb
75120000 7517f000   bcryptPrimitives   (deferred)             
75200000 75276000   sechost    (deferred)             
75330000 75347000   win32u     (deferred)             
757a0000 7585f000   msvcrt     (deferred)             
76430000 7658a000   gdi32full   (deferred)             
76590000 76727000   USER32     (deferred)             
76730000 767ac000   msvcp_win   (deferred)             
768c0000 769a0000   KERNEL32   (deferred)             
76aa0000 76b24000   shcore     (deferred)             
76c50000 76ec6000   combase    (deferred)             
76fb0000 76fd1000   GDI32      (deferred)             
76ff0000 7718a000   ntdll      (pdb symbols)          c:\symbols\wntdll.pdb\D85FCE08D56038E2C69B69F29E11B5EE1\wntdll.pdb

Вы можете видеть, что расположение файл символов идентифицирован (lm вывод команды) Но он утверждает, что символ не найден.

Что еще интереснее, WinDbg может показать мне символы функций внутри ntdll двоичного файла:

0:000> x ntdll!*Virtual*
76ff44c0          ntdll!RtlpQueryReadVirtualMemory (void)
76f9bcc7          ntdll!RtlpSecMemFreeVirtualMemory (void)
76fb2df0          ntdll!NtLockVirtualMemory (<no parameter info>)
76fb1fa0          ntdll!ZwQueryVirtualMemory (<no parameter info>)
76fb2bd0          ntdll!NtFlushVirtualMemory (<no parameter info>)
76fb36f0          ntdll!ZwSetInformationVirtualMemory (<no parameter info>)
...

Но, тем не менее, всякий раз, когда я пытаюсь использовать команду !address, у меня появляется такая же ошибка.

...