Шаг 96.
Утилита DUMPBIN.EXE

    На этом шаге мы рассмотрим утилиту 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.




Предыдущий шаг Содержание Следующий шаг