Анализ аварийных дампов: как найти модуль и инструкцию, вызывающую сбой - PullRequest
0 голосов
/ 17 марта 2012

У меня есть файл дампа сбоя, и я хочу точно определить инструкцию, где произошел сбой, точнее в «System_Messaging_ni + 60e4e», потому что я подозреваю о проблеме MSMQ.

Function                                     Arg 1     Arg 2     Arg 3   Source 
KERNELBASE!RaiseException+58                 e0434f4d     00000001     00000001    
mscorwks!GetMetaDataInternalInterface+300e1  015c95dc     00000000     00000000    
mscorwks!GetMetaDataInternalInterface+29d15  00000000     00000000     0164d854    
System_Messaging_ni+814aa                    00000000     00000000     0141aeb0    
System_Messaging_ni+60e4e                    0061ec0c     73d2f845     8e1d9768    
mscorwks+f830                                01611664     09d4f328     734402ff 

Насколько я понимаю, 'System_Messaging_ni + 60e4e' означает 'инструкцию со смещением байтов 0x60e4e от начала модуля' System_Messaging_ni '.

Как определить точный файл DLL, на который ссылается System_Messaging_ni? Я не смог найти ни одной System.Message.ni.dll в моей системе. Что означает суффикс _ni? Как я могу определить, является ли инструкция по смещению IL или собственным кодом? Если инструкция написана на IL, могу ли я использовать ILDASM, чтобы определить точное местоположение?

Большое спасибо за любую помощь!

1 Ответ

0 голосов
/ 13 января 2013

, что, вероятно, как-то связано с .Net

Я знаю, что все числа в шестнадцатеричном формате.

Я заметил, что нет исходного столбца.

Вы можете захотетьпопробуйте версию с символами отладки (похоже, что вы уже, потому что это не только цифры).если это то, что вы используете, хм.возможно, единственное, что осталось, - это начать анализ параметров, передаваемых в функции, и посмотреть, где все пошло не так.

Обычно я начинаю с создания файла .map при компиляции своего кода.это генерирует список / смещения / в кодовую базу, с помощью которой вы можете определить, в какой функции (в случае, если вы просто получите аварийный дамп с только номерами) произошел сбой (как, например, в каком системном вызове может быть).

догадки для ni:

  • сетевой интерфейс
  • .net interface (мое предположение)
  • non -?
  • ? - idl (сомневаюсь,IDL / MIDL обычно определяет интерфейс, не используемый большинством разработчиков для конечных пользователей, если вы не создаете интерфейс)
...