Главная » C++, C++ Builder » Программа tdump в CBuilder

0

Программа tdump — еще одна утилита CBuilder, которую можно применять разными способами к файлам вашей системы. В основном tdump позволяет вам посмотреть структуру файла, разбив его на компоненты. В применении к исполняемым файлам tdump может показать вам список модулей экспортируемых идентифика торов и, что самое важное, импортируемых идентификаторов этого исполняемого файла.

Также программа tdump может работать как обычная программа дампа файлов, то есть представления их в шестнадцатеричном виде. Если вы запустите ее на обычном двоичном файле, то можете посмотреть на шестнадцатеричное представление файла, что полезно при отладке для выяснения, почему ваш файл не хранит то, что должен, или почему файл базы данных отказывается открываться.

Короче говоря, tdump — инструмент программиста, дающий доступ к внутренней  структуре файла. Учитывая всю сложность программ под Windows 95 и NT, в наши дни такая  программа ценится на вес золота.

В  табл. 8.5  приведены  основные  параметры  программы  tdump,  которые  вы  можете  задавать  в командной строке.

Таблица 8.5. Основные параметры программы tdump

-a Выводить результат в виде ASCII. Это отображает все ASCII символы в файле. Очень полезно для поиска строк в исполняемом файле

-a7 Как и -a, но отображает только вторую часть ASCII-таблицы

-b# Начать отображение со смещением в # байт во входном файле. Полезен, когда вам нужно посмотреть что-нибудь в середине или в конце файла

-e Обрабатывает файл как исполняемый, независимо от его расширения

-el Не отображать номера строк в выводе. По умолчанию номера строк присутствуют в выводе

-h Шестнадцатеричный вывод. Для типов файлов, которые tdump «понимает» (например, EXE), вывод представляет собой обычный листинг, состоящий из записей

-m Запретить распознавание преобразованных имен C++

-oc Проверять целостность записей в OBJ-файле. В основном необходим для определения, правильны ли записи в OBJ-файле

-xID Не отображать отладочные записи для типа ID

-r Сделать дамп избранных мест в записях

-R Для файлов PE (portable executable) сделать дамп таблицы перемещаемых входов

(relocatable entries)

-v Режим с подробными сообщениями

-o Форсирует программу tdump для обработки данного файла как объектного (OBJ)

Синтаксис программы tdump представлен следующей строкой: tdump [options] InputFile [Listing]

где options — или пусто, или содержит параметры из табл. 8.5, InputFile — имя двоичного файла, содержимое которого вы хотите посмотреть, а Listing — имя выходного файла листинга. Если вы не зададите имя файла листинга, то программа выдаст результаты на консоль.

Как видите, программа tdump может дать вам немало информации о файле. Давайте рассмотрим два простых примера использования программы.

Во-первых, возьмите исполняемый файл в вашей системе и запустите на нем tdump. Это может быть любой файл в каталоге Windows с расширением EXE.

В данном примере я выбрал Exporer.EXE для программы tdump. Когда вы запустите tdump, то получите                                                       примерно                                                        следующее: Turbo Dump Version 5.0.13.1 Copyright (c) 1988, 1997 Borland International

Display of File EXPLORER.EXE Old executable header

DOS File Size 31e00h (204288. ) Load Image Size 450h ( 1104. )

Relocation Table entry count 0000h ( 0. ) Relocation Table address 0040h ( 64. )

Size of header record (in paragraphs)0004h ( 4. )  Minimum Memory requirement (in paragraphs)0000h ( 0. )

Maximum Memory requirement (in paragraphs)FFFFh ( 65535. ) File load checksum 0000h ( 0. )

Overlay number 0000h ( 0. )

Initial Stack Segment (SS:SP) 0000:00B8 Program Entry Point (CS:IP) 0000:0000 Portable Executable (PE) File

Header base: 00000080

CPU type 80386

Flags 10E [ executable backwards 32bit ] DLL flags 0000 [ ]

Linker Version 2.32 Time stamp 2FF35DC9 O/S Version 1.0

User Version 0.0

Subsystem Version 4.0 Subsystem 002 [ Windows GUI ] Object count 00000005

Symbols offset 00000000

Symbols count 00000000 Optional header size 00E0 Magic # 10B

Code size 00021800 Init Data size 00010200

Uninit Data size 00000000 Entry RVA 0000DEF1

Image base 00400000

Code base 00001000

Data base 00023000

Object/File align 00001000/00000200 Reserved 00000000

Image size 00035000

Header size 00000400

Checksum 00034598

Stack reserve/commit 00100000/00001000 Heap reserve/commit 00400000/00001000 Number interesting RVAs 00000010

Вся эта информация говорит вам что-либо о файле: размер кода, размер данных, размер образа загрузчика. Более интересные вещи, однако, находятся в этой секции:

Imports from USER32.dll DispatchMessageA(hint = 0086)

RedrawWindow(hint = 0194) RegisterWindowMessageA(hint = 01a0) SetScrollPos(hint = 01de) ScrollWindowEx(hint = 01ac) RegisterClassExA(hint = 0196) GetClassInfoExA(hint = 00c7) SendNotifyMessageA(hint = 01b5) IsWindowEnabled(hint = 0151)

UnionRect(hint = 0212)

GetMenu(hint = 00f3) SetWindowTextA(hint = 01ee)

Записи в секции «Imports from» показывают вам, какие динамические библиотеки  (DLL)  этот модуль требует для запуска. Поэтому вы с помощью tdump можете узнать, какие DLL должны присутствовать в системе, чтобы данная программа работала в ней. Более интересная идея — посмотреть, откуда у программы определенная функциональ ность, взглянув на набор импортируемых ею функций. И наконец, вы можете узнать кое-что о Windows API, посмотрев на списки импорта из таких системных динамичес ких библиотек (DLL)  Windows, как USER32 и GDI32. Вы сможете найти функции, про которые вы никогда не слышали, зарытые  глубоко  в недрах одной из DLL и при этом экспортируемые.

Второй способ использования tdump — генерация шестнадцатеричного дампа программы. Вместо списка функций программы Explorer мы можем взглянуть на некоторые строки текста, похороненные внутри файла, используя команду:

tdump -a explorer.exe

Это приведет примерно к такому выводу: C:\WINDOWS>tdump -a explorer.exe

Turbo Dump Version 5.0.13.1 Copyright (c) 1988, 1997 Borland International Display of File EXPLORER.EXE

000000:  MZ…………..ё…….@……………………………..Ђ…

000040: ..є….Н!ё.LН!This program cannot be run in DOS mode….$……. 000080:  PE..L…§¤’0……………2…………………0….@………

0000C0:  ……………..P……Р……………..@…………………

000100: .@..м$…p..l«………………. …*……………………..

000140:  …………………………………………………text…

000180: ………………………. ..`.data         0………………

0001C0: ….@..А.idata..м$…@…&…  …………..@..@.rsrc….°…p..

000200:  .¬…F…………..@..@.reloc..d…. …0…т…………..@..B

000240:  ……………………………………………………….

000280:  ……………………………………………………….

0002C0:  ……………………………………………………….

000300:  ……………………………………………………….

То, что вы видите, — это заголовок исполняемого файла, «заглушка», которая загружается при запуске файла. Здесь мы видим знакомое сообщение «This program cannot be run in DOS mode» («программа не может быть запущена в режиме DOS»), которое появляется, когда вы пытаетесь запустить программу explorer вне среды Windows. Если посмотреть весь файл, то можно увидеть сообщения об ошибках для различных случаев, а также имена файлов и каталогов по умолчанию и т. д.

Программа  tdump  в основном используется для  просмотра  информации об  импорте и  экспорте

программы, но, как мы видели, ее можно использовать и для много чего другого.

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии