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

         

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


Пример МАР-файла показан в листинге 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 


0003:00000104  00000104H    .CRT$XCZ      DATA

0003:00000208  00000104H    .CRT$XIA      DATA

0003:0000030с  00000104Н    .CRT$XIZ      DATA

0003:00000410  00000176H    .data         DATA

0003:00000588  00000030H    .bss          DATA

0004:00000000  00000014H    .idata$2      DATA

0004:00000014  00000014H    .idata$3      DATA

0004:00000028  00000050H    .idata$4      DATA

0004:00000078  00000050H    .idata$5     DATA 

0004:000000c8  00000179H    .idata$6      DATA 

Address         Publics by Value        Rva+Base    Lib:0bject

0001:00000030  _DllMain@12               03901030 f MapDLL.obj 

0001:0000004с  ?MapDLLFunction@@YAHXZ     0390104с f MapDLL.obj

0001:00000076  ?MapDLLHappyFunc@@YAPADPAD@Z 03901076 f MapDLL.obj

0001:000000f6  _printf               039010f6  f MSVCRTD:MSVCRTD.dll

0001:000000fc  _chkesp               039010fc  f MSVCRTD:MSVCRTD.dll

0001:00000110  _CRT_INIT@12          03901110  f MSVCRTD:crtdll.obj

0001:00000220  _DllMainCRTStartup@12 03901220  f MSVCRTD:crtdll.obj

0001:00000314  _free_dbg             03901314  f MSVCRTD:MSVCRTD.dll



0001:0000031a _initterm              0390131a  f MSVCRTD:MSVCRTD.dll

0001:00000320 _onexit                03901320  f

MSVCRTD:atonexit.obj

0001:00000360 __atexit               03901360  f

MSVCRTD:atonexit.obj

0001:00000378 _malloc_dbg            03901378  f MSVCRTD:MSVCRTD.dll

0001:0000037e __dllonexit            0390137e  f MSVCRTD:MSVCRTD.dll

0002:0000001c ??_C@_08JKC@crtdll?4c?$AA@ 0390301с MSVCRTDrcrtdll.obj

0003:00000000 __xc_a                 03904000

MSVCRTD:cinitexe.obj

0003:00000104 __xc_z                 03904104

MSVCRTD:cinitexe.obj

0003:00000208 __xi_a                 03904208

MSVCRTD:cinitexe.obj

0003:0000030с __xi_z                 0390430с

MSVCRTD:cinitexe.obj

0003:0000058с _adjust_fdiv           0390458с       <common>

0003:00000598 __onexitend            03904598       <common>

0003:000005a8 __onexitbegin          039045a8       <common>

0003:000005ac _pRawDllMain           039045ac       <common>

0004: 00000000 _IMPORT_DESCRIPTOR_MSVCRTD 03905000  MSVCRTD:MSVCRTD.dll



0004:00000014 _NULL_IMPORT_DESCRIPTOR 03905014     MSVCRTD:MSVCRTD.dll

0004:00000078 __imp__malloc_dbg       03905078     MSVCRTD:MSVCRTD.dll

0004:0000007с _imp chkesp             0390507с     MSVCRTD:MSVCRTD.dll

0004:00000080 imp free_dbg            03905080     MSVCRTD:MSVCRTD.dll

0004:00000084 _imp initterm           03905084     MSVCRTD:MSVCRTD.dll

0004:00000088 _imp_jjrintf            03905088     MSVCRTD:MSVCRTD.dll

0004:0000008с _imp adjust_fdiv        0390508с     MSVCRTD:MSVCRTD.dll

0004:00000090 _imp___dllonexit        03905090     MSVCRTD:MSVCRTD.dll

0004:00000094 _imp onexit             93905094     MSVCRTD:MSVCRTD.dll

0004:00000098 \177MSVCRTD_NULL_THUNK_DATA 03905098 MSVCRTD:MSVCRTD.dll

entry point at 0001:00000220

Line numbers for .\Debug\MapDLL.obj(D:\MapFile\MapDLL\MapDLL.cpp)

segment '. text

10 0001:00000030  12 0001:0000003b  19 0001:00000041 20 0001:00000046' 24 0001:0000004c  25 0001:00000050  26 0001:00000067 27 0001:0000006c 35 0001:00000076  36 0001:0000007a  37 0001:0000007f 38 0001:00000096 39 0001:0000009c  40 0001:0000009f  30 0001:000000a9 31 0001:OOOOOOad 32 0001:000000c4 

Line numbers for g:\vc\LIB\MSVCRTD.lib(atonexit.c) segment .text

84 0001:00000320  89 0001:00000324  98 0001:0000035b 103 0001:00000360

104 0001:00000363 105 0001:00000376 

Line numbers for g:\vc\LIB\MSVCRTD.lib(crtdll.c) segment .text

135 0001:00000110   140 0001:00000114   141 0001:0000011a  142



0001:00000123

143 0001:00000130   147 0001:00000132   156 0001:00000139  164

0001:00000147

170 0001:0000014d   175 0001:00000175   177 0001:0000017с  179

0001:00000187

184 0001:00000193   189 0001:OOOOOlaS   192 0001:000001b4  219 0001:OOOOOlbc

220 0001:000001c5   222 0001:000001cd   227 0001:OOOOOlel  228 0001:000001e9

236 0001:000001ee   238 0001:00000202   242 0001:0000020c  243 0001:00,000211

251 0001:00000220   252 0001:00000224   258 0001:0000022b  259 0001:0000023a

261 0001:00000241   263 0001:0000024d   264 0001:00000256  266 0001:0000026b

267 0001:00000271   269 0001:00000285   270 0001:0000028b  273 0001:0000028f

276 0001:000002a3   284 0001:000002af   287 0001:000002be  289 0001:000002ca

290 0001:000002df   292 0001:000002e6   293 0001:000002f5  296 0001:ОООООЗОа

297 0001:0000030d '

Exports

ordinal name

1 ?MapDLLFunction@@YAHXZ (int_cdecl MapDLLFunction(void))

2 ?MapDLLHappyFunc@@YAPADPAD@Z (char * _cdecl MapDLLHappyFunc(char *))



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