2015-03-20 3 views
-1

Мое приложение - авария. Поэтому я использую windbg для проверки журнала трассировки. Вот журнал мой след в WinDbg:Проверьте размер dll в windbg

FAILED_INSTRUCTION_ADDRESS: 
cbmwk5!unloaded+161c0 
727261c0 ??    ??? 

ANALYSIS_VERSION: 6.3.9600.17298 (debuggers(dbg).141024-1500) amd64fre 

LAST_CONTROL_TRANSFER: from 423c1d76 to 72725817 

IP_MODULE_UNLOADED: 
cbmwk5!unloaded+15817 
72725817 ??    ??? 

PRIMARY_PROBLEM_CLASS: BAD_INSTRUCTION_PTR_NULL 

DEFAULT_BUCKET_ID: BAD_INSTRUCTION_PTR_NULL 

STACK_TEXT: 
023eebfc 72725817 cbmwk5!unloaded+0x15817 
023eec00 423c1d76 unknown!unknown+0x0 
023eec30 7272590a cbmwk5!unloaded+0x1590a 
023eec58 72723a39 cbmwk5!unloaded+0x13a39 
023ef120 76b65762 shell32!SHGetFolderPathW+0x180 
023ef128 72720813 cbmwk5!unloaded+0x10813 
023ef144 7271110e cbmwk5!unloaded+0x110e 
023ef164 72715916 cbmwk5!unloaded+0x5916 
023ef59c 7271636b cbmwk5!unloaded+0x636b 

Не могли бы вы помочь мне, как проверить размер cbmwk5.dll по STACK_TEXT? Что значит «+ 0x15817» ИНТ заявление:

023eebfc 72725817 cbmwk5!unloaded+0x15817 

Я попытался перезагрузить с помощью команды:

.reload /unl cbmwk5.dll 

, а затем введите: анализировать -v но ошибка недостающую cbmwk5 .dll:

SYMSRV: c:\localsymbols\cbmwk5.dll\506DCE083b000\cbmwk5.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/cbmwk5.dll/506DCE083b000/cbmwk5.dll not found 
DBGHELP: C:\Program Files (x86)\Windows Kits\8.1\Debuggers\cbmwk5.dll - file not found 
DBGENG: cbmwk5.dll - Image mapping disallowed by non-local path. 
DBGHELP: No header for cbmwk5.dll. Searching for dbg file 
DBGHELP: .\cbmwk5.dbg - file not found 
DBGHELP: .\dll\cbmwk5.dbg - path not found 
DBGHELP: .\symbols\dll\cbmwk5.dbg - path not found 
DBGHELP: cbmwk5.pdb - file not found 
*** WARNING: Unable to verify timestamp for cbmwk5.dll 
*** ERROR: Module load completed but symbols could not be loaded for cbmwk5.dll 
DBGHELP: cbmwk5 - no symbols loaded 
DBGHELP: C:\Program Files (x86)\Windows Kits\8.1\Debuggers\cbmwk5.dll - file not found 
SYMSRV: C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\sym\cbmwk5.dll\506DCE083b000\cbmwk5.dll not found 

Большое спасибо.

+0

Вы можете проверить размер dll, используя 'lmvm cbmwk5.dll', на выходе он отобразит' ImageSize XXXXXXX', где XXXXXXX будет размером – EdChum

+0

Да, он работает. Большое спасибо. – TDBao

+0

Это полностью отвечает на ваш вопрос?Я не знаю конкретно, что означает 'unloaded' здесь, это может означать, что dll выгружается или у вас есть функция с выгрузкой, следующий номер является смещением адреса от базового адреса для этой DLL, но если он не смог разрешить символы правильно, тогда это может быть мусор – EdChum

ответ

4

Что значит «+ 0x15817» ИНТ заявление

+ 0x15817 означает, что отладчик не имеет понятия вообще, какая функция была вызвана. Он просто ничего не знает о DLL, только там, где он когда-то был загружен. Таким образом, он может только аннотировать адрес с именем DLL и очень большим смещением. В противном случае, видимый из сообщений трассировки SYMSRV, отладчик попытался загрузить файл PDB для DLL, но сервер символов ничего не знает о DLL. Что, конечно, не является необычным, это сторонняя DLL, а не Microsoft. Даже Google никогда не слышал об этом.

FAILED_INSTRUCTION_ADDRESS:
cbmwk5 выгружен + 161c0

unloaded аннотацию ваш сильный ключ к проблеме. Код разбился, потому что DLL была выгружена из памяти. Однако программа все равно пыталась его назвать. Без кода, оставшегося для выполнения (обратите внимание на ??), процессор вынужден отказаться и создать нарушение доступа. Это был конец программы, он не может продолжать работать.

023ef120 76b65762 shell32! SHGetFolderPathW + 0x180

Трассировка стека дает (слабый) ключ к основной проблемы. Остерегайтесь, что это спекуляция. Но наличие функции оболочки, такой как SHGetFolderPathW(), является сильным намеком на то, что это неправильное расширение оболочки. Они могут нанести большой урон, поскольку они, как правило, вводятся в вашу программу, когда вы используете один из общих диалогов оболочки, например OpenFileDialog. Другими словами, это не имеет никакого отношения к вашей программе, это чей-то дерьмовый код, который сделал программную бомбу.

Вы исправляете эту проблему, отключая расширения оболочки один за другим, пока проблема не исчезнет. Утилита AutoRuns SysInternals - это оружие выбора. Это должно быть сделано владельцем машины, мало что можно сделать, кроме как дать совет.

+0

Спасибо Hans Passant много – TDBao

Смежные вопросы