Он не хочет делать то, для чего собственно я его и устанавливал - отображать символы системных библиотек. Хочу скажем отобразить структуру 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 как его заставить работать?
нет, не проходит проходит только такая dt -ny nt которая выводит 0:001> dt -ny nt Код (Text): http_login9!NT_TIB +0x000 ExceptionList : Uint4B +0x004 StackBase : Uint4B +0x008 StackLimit : Uint4B +0x00c SubSystemTib : Uint4B +0x010 FiberData : Uint4B +0x010 Version : Uint4B +0x014 ArbitraryUserPointer : Uint4B +0x018 Self : Uint4B причём что интересно http_login9 - мой модуль, но в нём нет структуры NT_TIB кто-нибудь знает что это за структура в смысле из какой она библиотеки и как сделать так чтобы показывались структуры из других библиотек?
wasmer Ты в режиме ядра отлаживаешь? Тогда вот так: Код (Text): .cache forcedecodeuser .reload /f ntdll.dll dt ntdll!_PEB @$peb
Код (Text): 0:000> .cache forcedecodeuser ^ Operation not supported in current debug session '.cache forcedecodeuser' 0:000> .reload /f ntdll.dll DBGHELP: ntdll.dll is stripped. Searching for dbg file DBGHELP: ntdll - public symbols D:\debug\WINNT\symserv\ntdll.dbg\3EF274DC7b000\ntdll.dbg D:\debug\WINNT\symserv\ntdll.pdb\3E5265273\ntdll.pdb 0:000> dt ntdll!_PEB @$peb ************************************************************************* *** *** *** *** *** Your debugger is not using the correct symbols *** *** *** *** In order for this command to work properly, your symbol path *** *** must point to .pdb files that have full type information. *** *** *** *** Certain .pdb files (such as the public OS symbols) do not *** *** contain the required information. Contact the group that *** *** provided you with these symbols if you need this command to *** *** work. *** *** *** *** Type referenced: ntdll!_PEB *** *** *** ************************************************************************* Symbol ntdll!_PEB not found.
причём команда lml даёт: Код (Text): 0:000> lml start end module name 00400000 0043b000 http_login9 C (private pdb symbols) D:\masm32\my\new\multi\http_login9.pdb 77f80000 77ffb000 ntdll (pdb symbols) D:\debug\WINNT\symserv\ntdll.pdb\3E5265273\ntdll.pdb 7c4e0000 7c599000 kernel32 (pdb symbols) D:\debug\WINNT\symserv\kernel32.pdb\3E778C8A1\kernel32.pdb то есть типа символы ntdll загружены
wasmer Сорри, невнимательно читал - по логу видно, что в юзермоде. У тебя, значит, WinNT или Win2000, так? Там в ntdll, по-моему, вообще нет типов. Пробуй так: Код (Text): .reload /f ntoskrnl.exe=1,0 dt ntoskrnl!_PEB
да, Windows 2000 так ведь для любого системного модуля команда dt не проходит, не только для ntdll dt -ny http_login9! проходит, dt -ny системный модуль(ntdll, ntoskrnl и т.д.) не проходит
wasmer Так и должно быть. Общедоступная символьная информация для системных модулей включает обычно только публичные символы, т.е. там нет информации о типах (типы для ntdll и ntoskrnl - это скорее исключение, чем правило). В XP тип _PEB есть в ntdll и ntoskrnl, в 2000 и NT - только в ntoskrnl.
эта команда проходит Код (Text): 0:000> dt -ny http_login9! *** WARNING: Unable to verify checksum for http_login9.exe Ambiguous matches found for http_login9! (dumping largest sized): http_login9!HDC http_login9!HIGHCONTRASTA {0x00c bytes} http_login9!HIGHCONTRASTA +0x000 cbSize : Uint4B +0x004 dwFlags : Uint4B +0x008 lpszDefaultScheme : Uint4B а вот эта нет Код (Text): 0:000> dt -ny ntoskrnl! Symbol ntoskrnl! not found. то есть вообще модуль ntoskrnl не находит, и так для любого системного модуля а его разве для dll можно использовать?
wasmer Дык, о системных модулях речь. А в твоём собственном http_login9 дебаг инфа во всей полноте. Не модуль, а символ. Да и модуль ntoskrnl он не найдёт, ведь его нет в списке юзермодных модулей. ntoskrnl - это ядро ОС. См. ответ #7. Потому что в этих модулях нет информации о типах, только public symbols. Для вывода публичных символов модуля вот так делай: Код (Text): x ntdll!*