Подтвердить что ты не робот

Как работает gdb?

Я хочу знать, как работает gdb внутри. например Я знаю краткую идею о том, что он использует системный вызов ptrace() для отслеживания отслеживаемой программы. Но я хочу знать, как он обрабатывает сигналы, как он вставляет новый код и другие такие невероятные вещи, которые он делает.

4b9b3361

Ответ 1

Ознакомьтесь с Руководством по внутренним документам GDB, которое охватывает некоторые важные аспекты. Там также есть более старая версия PDF этого документа.

Из руководства:

Этот документ документирует внутренности отладчика GNU, gdb. Он включает описание алгоритмов и операций ключа gdb, а также механизмы, которые адаптируют gdb к конкретным хостам и целям.

Ответ 2

Единственный способ, которым вы узнаете, - изучить источник .

Вы также можете создать его и отладить его самостоятельно. Пройдите через код, и вы точно узнаете, как он делает то, что он делает.

Чтение источника GDB не для слабонервных, хотя - оно заполнено макросами и сильно использует libbfd, что само по себе трудно понять.

Он должен, потому что он переносимый (и, в частности, строит и работает на платформах, у которых вообще нет ptrace()).

Ответ 3

Взято из gdbint.pdf:

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

  • Аппаратные точки останова иногда доступны как встроенные функции отладки с некоторыми чипами. Как правило, эти работы, посвятив зарегистрируйтесь, в который может быть сохранен адрес точки останова. Если ПК (сокращенное значение для счетчика программ) всегда соответствует значению в точке останова регистров, CPU вызывает исключение и сообщает об этом в GDB.
  • Другая возможность заключается в использовании эмулятора; многие эмуляторы включают в себя схему, которая отслеживает адресные строки, выходящие из процессор и заставить его остановиться, если адрес соответствует точке останова адрес.
  • Третья возможность заключается в том, что у мишени уже есть возможность делать точки прерывания; например, монитор ПЗУ может выполнять свои собственные программные точки останова. Поэтому, хотя они не являются буквально аппаратными точки останова, с точки зрения GDB они работают одинаково;
  • Контрольные точки программного обеспечения требуют, чтобы GDB выполнял несколько большую работу. Основная теория состоит в том, что GDB заменит программную инструкцию ловушкой, незаконное разделение или какую-либо другую инструкцию, которая исключение, а затем, когда он столкнулся, GDB примет исключение и остановите программу. Когда пользователь скажет продолжить, GDB восстановит первоначальная инструкция, одношаговая, повторная установка ловушки и продолжить.