Программирование для Windows NT (том 2)

       

Анализ DLL-библиотек при помощи программы dumpbin.exe


В комплекте системы разработки Microsoft Visual C++ входит программа dumpbin.exe, предназначенная для запуска из командной строки.  С помощью этой утилиты вы сможете проанализировать содержимое любого загрузочного файла в формате COFF, в том числе DLL-библиотеки, определив имена экспортируемых функций, их порядковые номера, имена DLL-библиотек и номера функций, импортируемых из этих библиотек и т. д. Можно даже дизассемблировать секции кода с использованием таблицы символов, если такая имеется в файле.

Выберем для исследования DLL-библиотеку comdlg32.dll, в которой находятся функции для работы со стандартными диалоговыми панелями.

Вначале запустим программу dumpbin.exe, передав ей в качестве параметра имя DLL-библиотеки:

c:\msdev\bin>dumpbin comdg32.dll > lst.txt

Перед запуском программы dumpbin.exe мы скопировали файл comdg32.dll в каталог c:\msdev\bin.

Программа запишет в файл lst.txt информацию о типе файла (DLL-библиотека) и перечислит названия секций и их размер, как это показано ниже:

Microsoft (R) COFF Binary File Dumper Version 3.10.6038

Copyright (C) Microsoft Corp 1992-1996. All rights reserved.

Dump of file comdlg32.dll

File Type: DLL

     Summary

        4000 .data

        1000 .edata

        2000 .rdata

        2000 .reloc

        9000 .rsrc

       17000 .text

Ниже мы перечислили названия некоторых стандартных секций (полное описание вы найдете в документации, которая поставляется в составе использованного вами средства разработки приложений для Microsoft Windows NT):

Название

Описание

.data

Секция инициализированных данных

.text

Секция кода

.rdata

Данные, которые можно только читать во время выполнения

.edata

Таблица экспортируемых имен

.reloc

Таблица перемещений

.rsrc

Ресурсы

.bss

Секция неинициализированных данных

.xdata

Таблица обработки исключений

.CRT

Данные библиотеки C, которые можно только читать во время выполнения

.debug

Отладочная информация

.tls

Локальная память задач

<
Для просмотра более подробной информации о секции следует воспользоваться параметром /SECTION:

c:\msdev\bin>dumpbin comdg32.dll /SECTION:.data > lst.txt

Результат выполнения этой команды показан ниже:

Microsoft (R) COFF Binary File Dumper Version 3.10.6038

Copyright (C) Microsoft Corp 1992-1996. All rights reserved.

Dump of file comdlg32.dll

File Type: DLL

SECTION HEADER #3

   .data name

    35E4 virtual size

   1A000 virtual address

     E00 size of raw data

   18C00 file pointer to raw data

       0 file pointer to relocation table

       0 file pointer to line numbers

       0 number of relocations

       0 number of line numbers

C8000040 flags

         Initialized Data

         Not Paged

         (no align specified)

         Read Write

     Summary

        4000 .data

Аналогичная информация о секции .text приведена ниже:

Microsoft (R) COFF Binary File Dumper Version 3.10.6038

Copyright (C) Microsoft Corp 1992-1996. All rights reserved.

Dump of file comdlg32.dll

File Type: DLL

SECTION HEADER #1

   .text name

   16FF9 virtual size

    1000 virtual address

   17000 size of raw data

     400 file pointer to raw data

       0 file pointer to relocation table

       0 file pointer to line numbers

       0 number of relocations

       0 number of line numbers

68000020 flags

         Code

         Not Paged

         (no align specified)

         Execute Read

     Summary

       17000 .text

Для просмотра списка имен экспортируемых функций и глобальных переменных запустите программу dumpbin.exe с параметром /EXPORTS:

c:\msdev\bin>dumpbin comdg32.dll /EXPORTS > lst.txt

Список появится в следующем виде:

Microsoft (R) COFF Binary File Dumper Version 3.10.6038

Copyright (C) Microsoft Corp 1992-1996. All rights reserved.

Dump of file comdlg32.dll

File Type: DLL

    Section contains the following Exports for comdlg32.dll

                   0 characteristics

            30D0D8ED time date stamp Fri Dec 15 05:09:49 1995



                0.00 version

                   1 ordinal base

                  23 number of functions

                  23 number of names

            ordinal hint   name

                  1    0   ChooseColorA  (00012442)

                  2    1   ChooseColorW  (0001164F)

                  3    2   ChooseFontA  (00009235)

                  4    3   ChooseFontW  (00014028)

                  5    4   CommDlgExtendedError  (0000F92A)

                  6    5   FindTextA  (0001373A)

                  7    6   FindTextW  (0001372A)

                  8    7   GetFileTitleA  (0000FB57)

                  9    8   GetFileTitleW  (0000FAF1)

                 10    9   GetOpenFileNameA  (00004952)

                 11    A   GetOpenFileNameW  (0000F9EE)

                 12    B   GetSaveFileNameA  (0000493B)

                 13    C   GetSaveFileNameW  (0000FA37)

                 14    D   LoadAlterBitmap  (0000A450)

                 15    E   PageSetupDlgA  (00014277)

                 16    F   PageSetupDlgW  (00014373)

                 17   10   PrintDlgA  (0000738E)

                 18   11   PrintDlgW  (00014238)

                 19   12   ReplaceTextA  (0001375A)

                 20   13   ReplaceTextW  (0001374A)

                 21   14   WantArrows  (000122D5)

                 22   15   dwLBSubclass  (000018F7)

                 23   16   dwOKSubclass  (000018C4)

     Summary

        4000 .data

        1000 .edata

        2000 .rdata

        2000 .reloc

        9000 .rsrc

       17000 .text

Наряду с именами функций здесь отображаются порядковые номера функций и их адреса (в скобках).

Указав параметр /DISASM, вы можете дизассемблировать секцию кода, однако полученный в результате листинг может оказаться слишком большим и трудным для анализа. Вот фрагмент такого листинга:

Microsoft (R) COFF Binary File Dumper Version 3.10.6038

Copyright (C) Microsoft Corp 1992-1996. All rights reserved.

Dump of file comdlg32.dll

File Type: DLL



  77DF1000: 83 3D EC C4 E0 77  cmp   dword ptr ds:[77E0C4ECh],0

            00

  77DF1007: 56                 push  esi

  77DF1008: 75 2D              jne   77DF1037

  77DF100A: 83 3D 8C C7 E0 77  cmp   dword ptr ds:[77E0C78Ch],0

            00

  77DF1011: 8B 74 24 08        mov   esi,dword ptr [esp+8]

  77DF1015: 0F 84 93 97 00 00  je    77DFA7AE

  77DF101B: 83 FE 01           cmp   esi,1

  77DF101E: 1B C0              sbb   eax,eax

  77DF1020: 24 FE              and   al,0FEh

  77DF1022: 05 02 7F 00 00     add   eax,7F02h

  77DF1027: 50                 push  eax

  77DF1028: 6A 00              push  0

В заключение этого раздела приведем список параметров программы dumpbin.exe.
Параметр Описание
/ALL Просмотр всей доступной информации, исключая листинг дизассемблирования
/ARCHIVEMEMBERS Просмотр минимальной информации об объектах  библиотеки
/DISASM Дизассемблирование секции кода
/EXPORTS Просмотр экспортируемых имен
/FPO Просмотр записи FPO (Frame Pointer Optimization)
/HEADERS Просмотр заголовка файла и заголовков каждой секции, либо заголовка каждого объекта, расположенного в библиотеке
/IMPORTS Просмотр импортированных имен
/LINENUMBERS Просмотр номеров строк формата COFF
/LINKERMEMBER Просмотр доступных символов, опередленных в библиотеке как public
/OUT:ИмяФайла Запись выходной информации не на стандартное устройство вывода (консоль), а в файл с именем ИмяФайла
/RAWDATA Просмотр дампа каждой секции
/RELOCATIONS Просмотр таблицы перемещений
/SECTION:Секция Просмотр информации только о секции, имеющей имя Секция
/SUMMARY Просмотр минимальной информации о секциях
/SYMBOLS Просмотр таблицы символов формата COFF

Содержание раздела