На этом шаге мы рассмотрим утилиту DUMPBIN.EXE.
Эта утилита также находится в папке BIN ассемблера MASM32 и используется для исследования загружаемых и объектных модулей COFF-формата и выводит информацию в текущую консоль. Ключи данной программы:
Рассматриваемая программа является весьма мощным средством дизассемблирования. Пусть программа называется prog.asm. Выполним трансляцию программы следующим образом.
ml /с /coff /Zi /Zd prog.asm link /debug /subsystem:windows prog.obj
При этом, кроме исполняемого модуля prog.exe, появляется еще и файл prog.pdb, содержащий отладочную информацию. Выполним теперь команду:
DUMPBIN /DISASM /OUT:PROG.TXT PROG.EXE
В результате получим практически исходный ассемблерный код. Фрагмент этого кода представлен здесь
_START: 0040101С: 6А00 push 0 0040101Е: Е843020000 call _GetModuleHandleA@4 00401023: А344404000 mov [00404044], eax 00401028: C7051C404000 mov dword ptr ds:[40401Ch],4003h 03400000 00401032: C70520404000 mov dword ptr ds:[404020h],offset @ILT+0 (_WNDPROC@0) 05104000 004010ЗС: С70524404000 mov dword ptr ds:[404024h],0 00000000 00401046: C70528404000 mov dword ptr ds:[404028h],0 00000000 00401050: A144404000 mov eax,[00404044] 00401055: A32C404000 mov [0040402C],eax 0040105A: 68007F0000 push 7F00h 0040105F: 6A00 push 0 00401061: E8D6010000 call _LoadIconA@8 00401066: A330404000 mov [00404030],eax 0040106B: 68037F0000 push 7F03h 00401070: 6A00 push 0 00401072: E8BF010000 call _LoadCursorA@8
Как видите, это весьма прозрачный текст, ничем не отличающийся от обычного ассемблерного текста. В конце файла можно обнаружить довольно интересную информацию. Вот фрагмент.
_LoadIconA@8: 0040123С: FF2510514000 jmp dword ptr [__imp__LoadIconA@8]
В действительности, когда мы вызываем, например, функцию _LoadIconA@8, то на самом деле происходит переход на адрес, где стоит команда
jmp dword ptr [__imp__LoadIconA@8]
По этой причине в своих программах вместо объявления LoadIcon@8, можно объявлять __imp__LoadIconA@8, что несколько увеличит производительность вашей программы. Ранее мы не говорили о такой возможности по двум причинам:
На следующем шаге мы рассмотрим утилиту DUMPPE.EXE.