Является ли каждый адрес строки источника в подробном файле MAP действительным адресом для вставки Int3h?

Я пытаюсь создать инструмент покрытия кода с помощью Delphi 2007.

Мой общий подход заключается в использовании Win32 Debug API для вставки точек останова для каждой исходной строки, а затем удаления контрольных точек по мере их передачи - таким образом, я мог бы отслеживать каждую выполненную исходную строку.

Схема моего подхода:

  • проанализируйте подробный файл MAP (созданный Delphi 2007), чтобы найти все адреса для каждой строки источника (только для сегментов .text)
  • откройте приложение в режиме отладки с помощью вызова API OpenProcess
  • итерация по каждой строке источника и вставка инструкции Int3 (один байт $ cc с использованием WriteProcessMemory + FlushInstructionCache) по адресу каждой строки
  • продолжить выполнение и по мере запуска каждой точки останова удалить соответствующую точку останова и пометить линию как охватываемую
  • После того как каждая точка останова передана или существует программа, я генерирую отчет о том, какие линии были охвачены, а какие строки не были для каждого исходного модуля

Теперь на мой вопрос:

Является ли каждый адрес строки источника в подробном файле MAP действительным адресом для вставки точки останова Int3?

Хотя этот подход был успешным для некоторых простых устройств, я столкнулся с проблемой доступа к некоторым более крупным приложениям, где нарушенный адрес содержит $ cc, что привело бы меня к мысли, что мой подход нуждается в некоторой модификации для работы.

Советы по лучшим подходам также очень приветствуются!

delphi,winapi,debugging,

3

Ответов: 1


1 принят

Ну, теоретически: да. И практично, я думаю, да. Если Delphi может разместить точку останова на каждой строке, то вы можете :-).

Вероятно, для некоторых случаев вам нужна определенная обработка (например: первая строка процедуры - это инициализация локальных варов, настройка EBP и т. Д.). Так вы можете узнать, в каком случае это не удается?

Btw: хороший проект! Это открытый источник?

PS, если вам нужна обработка кода сборки: посмотрите на koldetours.pas (используйте google search).

Дельфы, WinAPI, отладка,
Похожие вопросы