IE: все по-старому Крис Касперски ака мыщъх Хакер, номер #090, стр. 090-055-5 set src=C:\WINNT\SYSTEM32\MSHTML.DLL symchk %src% /s srv*.\*http://msdl.microsoft.com/download/symbols –v Программа лезет в сеть, возбужденно подмигивая огоньками модема, и вскоре (или не вскоре — это уж от твоего канала зависит!) на диске образуются два новых каталога: .\mshtml.dbg\38D12257243000 с файлом mshtml.dbg и .\mshtml.pdb\38051D9A2 c mshtml.pdb, c размерами 2,8 Мб и 2,1 Мб. На самом деле, файлы передаются в сжатом виде, поэтому реально скачивается всего ~1,5 Мб. Ну, dbg-файл нам совершенно неинтересен (там содержатся адреса машинных команд, соответствующие номерам строк исходных текстов, которых у нас все равно нет), а вот pdb мы сейчас и загрузим в IDA Pro вместе со всей символьной информацией, которой решила поделиться с нами Microsoft. Перед этим рекомендуется скопировать динамическую библиотеку dbghelp.dll из Debugging Tools в коревой каталог IDA Pro, иначе плагин pdb.plw может не сработать. Но прежде чем загружать символы, перейдем на место сбоя и посмотрим,как выглядит оригинальный дизассемблерный текст. Нажимаем <G> (goto) и вводим адрес "75ACC4DA", сообщенный доктором Ватсоном. Мы оказываемся в уже знакомой нам процедуре, вызывающей безымянную функцию 75A9211Dh, о назначении которой пока можно только гадать: Дизассемблерный текст до загрузки символьной информации .text:75ACC4C0 sub_75ACC4C0 proc near .text:75ACC4C0 push esi .text:75ACC4C1 mov esi, ecx .text:75ACC4C3 call sub_75A9211D .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 unk_75C8D1A0 .text:75ACC4EE pop esi .text:75ACC4EF retn .text:75ACC4EF sub_75ACC4C0 endp .text:75ACC4EF После загрузки символьной информации (file -> load file -> PDB file) листинг радикально преображается, и мы получаем вполне осмысленные имена: Тот же дизассемблерный текст после загрузки символьной информации ; struct INSTANTCLASSINFO * __thiscall COleSite::GetInstantClassInfo(void) .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 |