Как отладчик Visual Studio обнаруживает вызовы функций? - PullRequest
0 голосов
/ 03 августа 2020

Когда ive подключил отладчик Visual Studio к процессу, затем добавьте новую точку останова функции и выберите, например, «система» в качестве имени функции. Затем Visual Studio обнаружит, когда функция system() вызывается из целевого процесса.

Есть ли эффективный способ обнаружения вызовов функций из процесса с использованием C ++?

1 Ответ

2 голосов
/ 03 августа 2020

Отладчик обнаруживает, что точка останова была достигнута несколькими способами.

Базовая стратегия c - это программная точка останова. Это означает, что отладчик заменяет инструкцию в целевой точке останова инструкцией ловушки точки останова.

Когда выполнение достигает инструкции точки останова, вызывается исключение ЦП, которое затем обрабатывается отладчиком. Отладчик видит, что выполнение остановлено по определенному адресу и по определенной причине, и это подтверждает, что точка останова была достигнута.

Наконец, реализация отладки точки останова возможна даже без помощи точки останова инструкция. Программная точка останова может быть вставлена ​​в целевой код как обычная инструкция ветвления, которая переходит в подпрограмму внутри отладчика, вместо того, чтобы вызывать исключение ЦП, которое обрабатывается отладчиком. ) поддерживают аппаратные точки останова. Обычно в процессоре можно настроить очень ограниченное количество аппаратных точек останова, которые говорят ему остановиться на определенном адресе. Это менее навязчиво, чем программная точка останова, и будет работать, даже если код находится в памяти только для чтения.

Конечно, если у вас есть программная точка останова, отсутствующая инструкция, которая была заменена, должна быть выполнена, когда выполнение возобновляется. Отладчик должен вставить исходную инструкцию перед возобновлением. Но если это все, что нужно сделать, точка останова исчезнет. Точка останова должна быть повторно активирована, чтобы выполнение остановилось при повторном ударе. Для этого отладчик может перевести процессор в пошаговый режим. Он может заменить исходную инструкцию, затем выполнить код в пошаговом режиме, затем снова установить программную точку останова и продолжить.

Если у процессора нет одношагового режима, а только инструкция останова, тогда процессор может имитировать пошаговое выполнение с использованием временной программной точки останова (которую не нужно повторно активировать после выполнения).

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