Отправка событий отладки в отладчик Windows из внешнего источника - PullRequest
3 голосов
/ 19 июля 2011

Я создал набор мультиплатформенных компонентов C ++ для загрузки и управления различными типами совместно используемых библиотек с цифровой подписью.Это обрабатывает все аспекты загрузки и инициализации, включая отображение их в вызывающий процесс, применение исправлений ветвлений, связывание любых импортов и вызов точки входа инициализации.Компоненты не могут использовать LoadLibrary (), поскольку это зависит от платформы, и не все общие библиотеки имеют формат PE.

Одной из немногих оставшихся проблем, с которыми я сталкиваюсь, является обеспечение соответствующей поддержки отладчика для целевых платформ и сред разработки.В средах MS Windows это включает в себя отладчики для загрузки символьной информации, сгенерированной компилятором и компоновщиком (или преобразованной из другого источника).Поскольку загрузка и инициализация библиотек происходит за пределами ядра, отладчик никогда не получает события LOAD_DLL_DEBUG_EVENT и UNLOAD_DLL_DEBUG_EVENT.Это приводит к следующим вопросам:

  1. Существует ли API или системный вызов, позволяющий отправлять такие события, как LOAD_DLL_DEBUG_EVENT, непосредственно в отладчик?
  2. Есть ли документированный способ связинепосредственно с менеджерами отладки программы или сеанса или со службой диспетчера отладки машины?
  3. Имеется ли доступный API или системный вызов для уведомления ядра и впоследствии отладчика о том, что DLL была загружена?Поскольку PE-файлы являются одним из основных поддерживаемых форматов, это наиболее желательный вариант.Он также имеет потенциальное преимущество, позволяя библиотеке появляться в списке модулей процесса.
  4. Применяется ли WinDBG SDK к отладке в Windows в целом и могут ли расширения WinDBG использоваться для указания отладчику загружатьсяинформация о символе?

Я активно искал информацию по вышеупомянутым темам, но не смог.Я нашел немного информации о структурах данных, используемых отладчиком Windows, но ничего не относилось к моей конкретной ситуации.

Я открыт для вызовов API / системных вызовов и подходов, которые задокументированы или недокументированы, а также тех, которые требуют повышенных привилегийфункционировать.

Ответы [ 2 ]

3 голосов
/ 23 июля 2011

Я не думаю, что есть способ напрямую отправить требуемый тип событий (например, LOAD_DLL_DEBUG_EVENT) в процесс, по крайней мере, нелегко. Почему бы вам просто не обернуть свои библиотеки внутри обычных DLL в Windows? Возможно, вы встраивали свой собственный механизм загрузки модулей в каждую «прокси-библиотеку» DLL, поэтому вам не нужно было бы копировать столько функций, которые ОС уже предоставляет вам.

1 голос
/ 19 июля 2011

Если я понял проблему, вы можете увидеть:

  1. Написание основных отладчиков Windows
  2. Написание отладчика Windows (Подробно)
...