тот же дизассемблерный текст после
.text:75ACC4C0 ?GetInstantClassInfo@COleSite@@QAEPAUINSTANTCLASSINFO@@XZ
proc near
.text:75ACC4C0 push esi
.text:75ACC4C1 mov esi, ecx
.text:75ACC4C3 call ?GetDocPtr@CElement@@QBEPVCDoc@@XZ;CElement::GetDocPtr()
.text:75ACC4C8 mov si, [esi+6Ch]
.text:75ACC4CC test si, si
.text:75ACC4CF jz short loc_75ACC4E9
.text:75ACC4D1 movzx ecx, si
.text:75ACC4D4 imul ecx, 98h
.text:75ACC4DA mov eax, [eax+420h] ; ß место сбоя
.text:75ACC4E0 pop esi
.text:75ACC4E1 lea eax, [ecx+eax-98h]
.text:75ACC4E8 retn
.text:75ACC4E9 ; --------------------------------------------------------------------
.text:75ACC4E9
.text:75ACC4E9 loc_75ACC4E9:
.text:75ACC4E9 mov eax, offset ?g_ciNull@@3UCLASSINFO@@A;CLASSINFO g_ciNull
.text:75ACC4EE pop esi
.text:75ACC4EF retn
.text:75ACC4EF ?GetInstantClassInfo@COleSite@@QAEPAUINSTANTCLASSINFO@@XZ
endp
Листинг 9 тот же дизассемблерный текст после загрузки символьной информации
Теперь мы знаем, что сбой произошел в функции COleSite::GetInstantClassInfo(void), возвращающей указатель на структуру INSTANTCLASSINFO. К сожалению, описаний структур в pdb-файле нет (коварство Microsoft не знает границ!), но даже неполная символьная информация _намного_ лучше, чем совсем никакой!
Немного побурчав для приличия, займемся дизассемблированием функции CElement::GetDocPtr(void), возвратившей в регистре EAX ноль, и посмотрим кто ей сорвал крышу и почему (см. листинг 10):
.text:75A9211D ?GetDocPtr@CElement@@QBEPAVCDoc@@XZ proc near; CElement::GetDocPtr()
.text:75A9211D mov eax, [ecx+10h]
.text:75A92120 mov ecx, [ecx+1Ch]
.text:75A92123 test cl, 2
.text:75A92126 jz short loc_75A9212B
.text:75A92128 mov eax, [eax+0Ch]
.text:75A9212B
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий