Убедитесь, что файл * .map соответствует приложению Delphi. - PullRequest
3 голосов
/ 07 сентября 2011

Для моей программы delphi-code-cover-wizard мне нужно убедиться, что (подробный) файл сопоставления .map соответствует приложению Delphi .exe

Конечно, эту проверку следует выполнять с Delphi.
Есть ли способ проверить это? Может быть, проверяя некоторую информацию из EXE?

1 Ответ

9 голосов
/ 08 сентября 2011

Я думаю, что довольно простой эвристикой было бы проверить, что различные разделы в файле PE начинаются и заканчиваются в одном и том же месте:

Например, вот вершина файла карты.

 Start         Length     Name                   Class
 0001:00401000 000A4938H .text                   CODE
 0002:004A6000 00000C9CH .itext                  ICODE
 0003:004A7000 000022B8H .data                   DATA
 0004:004AA000 000052ACH .bss                    BSS
 0005:00000000 0000003CH .tls                    TLS

Я также посмотрел, что dumpbin /headers сказал об этих разделах:

SECTION HEADER #1
   .text name
   A4938 virtual size
    1000 virtual address (00401000 to 004A5937)
   A4A00 size of raw data
     400 file pointer to raw data (00000400 to 000A4DFF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

SECTION HEADER #2
  .itext name
     C9C virtual size
   A6000 virtual address (004A6000 to 004A6C9B)
     E00 size of raw data
   A4E00 file pointer to raw data (000A4E00 to 000A5BFF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

...truncated

Посмотрите на раздел .text. Согласно дампбину, он начинается с 00401000 и заканчивается на 004A5937, который имеет длину 000A4938, точно так же, как в файле .map. Естественно, вы будете читать файл PE напрямую, а не запускать dumpbin, но это иллюстрирует суть.

Я бы ожидал, что при таком подходе исчезающе небольшое количество ложных срабатываний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...