WinDbg не оправдывает надежды

Тема в разделе "WASM.WIN32", создана пользователем wasmer, 24 май 2008.

  1. wasmer

    wasmer New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2007
    Сообщения:
    104
    Он не хочет делать то, для чего собственно я его и устанавливал - отображать символы системных библиотек.
    Хочу скажем отобразить структуру PEB из ntdll.dll
    0:000> dt _PEB @$peb
    Symbol _PEB not found.

    не находит символ, хотя Symbol File Path установлен
    SRV*D:\debug\WINNT\symserv*http://msdl.microsoft.com/download/symbols
    а в папке
    D:\debug\WINNT\symserv\ntdll.pdb\3E5265273
    лежит ntdll.pdb
    как его заставить работать?
     
  2. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Попробуй вот так:
    Код (Text):
    1. dt ntdll!_PEB @$peb
     
  3. wasmer

    wasmer New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2007
    Сообщения:
    104
    нет, не проходит
    проходит только такая

    dt -ny nt

    которая выводит

    0:001> dt -ny nt
    Код (Text):
    1. http_login9!NT_TIB
    2.    +0x000 ExceptionList    : Uint4B
    3.    +0x004 StackBase        : Uint4B
    4.    +0x008 StackLimit       : Uint4B
    5.    +0x00c SubSystemTib     : Uint4B
    6.    +0x010 FiberData        : Uint4B
    7.    +0x010 Version          : Uint4B
    8.    +0x014 ArbitraryUserPointer : Uint4B
    9.    +0x018 Self             : Uint4B
    причём что интересно http_login9 - мой модуль, но в нём нет структуры NT_TIB
    кто-нибудь знает что это за структура в смысле из какой она библиотеки и как сделать так чтобы показывались структуры из других библиотек?
     
  4. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    wasmer
    Ты в режиме ядра отлаживаешь?
    Тогда вот так:
    Код (Text):
    1. .cache forcedecodeuser
    2. .reload /f ntdll.dll
    3. dt ntdll!_PEB @$peb
     
  5. wasmer

    wasmer New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2007
    Сообщения:
    104
    Код (Text):
    1. 0:000> .cache forcedecodeuser
    2.             ^ Operation not supported in current debug session '.cache forcedecodeuser'
    3. 0:000> .reload /f ntdll.dll
    4. DBGHELP: ntdll.dll is stripped.  Searching for dbg file
    5. DBGHELP: ntdll - public symbols  
    6.          D:\debug\WINNT\symserv\ntdll.dbg\3EF274DC7b000\ntdll.dbg
    7.          D:\debug\WINNT\symserv\ntdll.pdb\3E5265273\ntdll.pdb
    8. 0:000> dt ntdll!_PEB @$peb
    9. *************************************************************************
    10. ***                                                                   ***
    11. ***                                                                   ***
    12. ***    Your debugger is not using the correct symbols                 ***
    13. ***                                                                   ***
    14. ***    In order for this command to work properly, your symbol path   ***
    15. ***    must point to .pdb files that have full type information.      ***
    16. ***                                                                   ***
    17. ***    Certain .pdb files (such as the public OS symbols) do not      ***
    18. ***    contain the required information.  Contact the group that      ***
    19. ***    provided you with these symbols if you need this command to    ***
    20. ***    work.                                                          ***
    21. ***                                                                   ***
    22. ***    Type referenced: ntdll!_PEB                                    ***
    23. ***                                                                   ***
    24. *************************************************************************
    25. Symbol ntdll!_PEB not found.
     
  6. wasmer

    wasmer New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2007
    Сообщения:
    104
    причём команда lml даёт:
    Код (Text):
    1. 0:000> lml
    2. start    end        module name
    3. 00400000 0043b000   http_login9 C (private pdb symbols)  D:\masm32\my\new\multi\http_login9.pdb
    4. 77f80000 77ffb000   ntdll      (pdb symbols)          D:\debug\WINNT\symserv\ntdll.pdb\3E5265273\ntdll.pdb
    5. 7c4e0000 7c599000   kernel32   (pdb symbols)          D:\debug\WINNT\symserv\kernel32.pdb\3E778C8A1\kernel32.pdb
    то есть типа символы ntdll загружены
     
  7. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    wasmer
    Сорри, невнимательно читал - по логу видно, что в юзермоде.

    У тебя, значит, WinNT или Win2000, так?
    Там в ntdll, по-моему, вообще нет типов.

    Пробуй так:
    Код (Text):
    1. .reload /f ntoskrnl.exe=1,0
    2. dt ntoskrnl!_PEB
     
  8. wasmer

    wasmer New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2007
    Сообщения:
    104
    да, Windows 2000
    так ведь для любого системного модуля команда dt не проходит, не только для ntdll
    dt -ny http_login9! проходит,
    dt -ny системный модуль(ntdll, ntoskrnl и т.д.) не проходит
     
  9. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    wasmer
    Так и должно быть. Общедоступная символьная информация для системных модулей включает обычно только публичные символы, т.е. там нет информации о типах (типы для ntdll и ntoskrnl - это скорее исключение, чем правило).

    В XP тип _PEB есть в ntdll и ntoskrnl, в 2000 и NT - только в ntoskrnl.
     
  10. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    pdbdump ?
     
  11. wasmer

    wasmer New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2007
    Сообщения:
    104
    эта команда проходит
    Код (Text):
    1. 0:000> dt -ny http_login9!
    2. *** WARNING: Unable to verify checksum for http_login9.exe
    3. Ambiguous matches found for http_login9! (dumping largest sized):
    4.     http_login9!HDC
    5.     http_login9!HIGHCONTRASTA {0x00c bytes}
    6. http_login9!HIGHCONTRASTA
    7.    +0x000 cbSize           : Uint4B
    8.    +0x004 dwFlags          : Uint4B
    9.    +0x008 lpszDefaultScheme : Uint4B
    а вот эта нет
    Код (Text):
    1. 0:000> dt -ny ntoskrnl!
    2. Symbol ntoskrnl! not found.
    то есть вообще модуль ntoskrnl не находит, и так для любого системного модуля
    а его разве для dll можно использовать?
     
  12. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    wasmer
    Дык, о системных модулях речь. А в твоём собственном http_login9 дебаг инфа во всей полноте.

    Не модуль, а символ.
    Да и модуль ntoskrnl он не найдёт, ведь его нет в списке юзермодных модулей. ntoskrnl - это ядро ОС.
    См. ответ #7.
    Потому что в этих модулях нет информации о типах, только public symbols.
    Для вывода публичных символов модуля вот так делай:
    Код (Text):
    1. x ntdll!*