Отладка приложений


Содержимое МАР-файла


Пример МАР-файла показан в листинге 8-1. Верхняя часть МАР-файла содержит имя модуля, метку даты/времени (timestamp), указывающую, когда LINK.EXE скомпоновал модуль и предпочтительный адрес загрузки. После заголовка расположена информация, которая показывает, какие секции присоединил компоновщик из различных OBJ- и LIB-файлов.

Далее следует информация об общих (public) функциях. Обратите внимание на эту часть. Если в программе есть С-функции, объявленные как статические (static), то они не будут показаны в МАР-файле. К счастью, номера строк все еще будут отражать статические функции.

Важными данными для общих функций являются их имена и информация в колонке Rva+Base, в которой указываются их стартовые адреса. За секцией общих функций следует строчная информация. Строки отображаются следующим образом:

10 0001:00000030

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

Если модуль содержит экспортируемые функции, то они перечислены в заключительной секции МАР-файла. Можно получить эту же информацию, запустив утилиту DUMPBIN с параметром <EXPORTS<ИМЯ_МОДУЛЯ>.

Листинг 8-1.Пример MAP-файла

MapDLL

Timestamp is 37f41936 (Thu Sep 30 22:15:18 1999)

 Preferred load address is 03900000

Start          Length         Name        Class

0001:00000000  00001421H    .text         CODE 

0002:00000000  0000012cH    .rdata        DATA

0002:00000130  00000193H    .edata        DATA

0003:00000000  00000104H    .CRT$XCA      DATA 




Начало  Назад  Вперед



Книжный магазин