Я хочу знать, как работает gdb внутри. например Я знаю краткую идею о том, что он использует системный вызов ptrace() для отслеживания отслеживаемой программы. Но я хочу знать, как он обрабатывает сигналы, как он вставляет новый код и другие такие невероятные вещи, которые он делает.
Как работает gdb?
Ответ 1
Ознакомьтесь с Руководством по внутренним документам GDB, которое охватывает некоторые важные аспекты. Там также есть более старая версия PDF этого документа.
Из руководства:
Этот документ документирует внутренности отладчика GNU, gdb. Он включает описание алгоритмов и операций ключа gdb, а также механизмы, которые адаптируют gdb к конкретным хостам и целям.
Ответ 2
Единственный способ, которым вы узнаете, - изучить источник .
Вы также можете создать его и отладить его самостоятельно. Пройдите через код, и вы точно узнаете, как он делает то, что он делает.
Чтение источника GDB не для слабонервных, хотя - оно заполнено макросами и сильно использует libbfd
, что само по себе трудно понять.
Он должен, потому что он переносимый (и, в частности, строит и работает на платформах, у которых вообще нет ptrace()
).
Ответ 3
Взято из gdbint.pdf:
Это можно сделать либо как аппаратные точки останова, либо как программное обеспечение контрольные точки:
- Аппаратные точки останова иногда доступны как встроенные функции отладки с некоторыми чипами. Как правило, эти работы, посвятив зарегистрируйтесь, в который может быть сохранен адрес точки останова. Если ПК (сокращенное значение для счетчика программ) всегда соответствует значению в точке останова регистров, CPU вызывает исключение и сообщает об этом в GDB.
- Другая возможность заключается в использовании эмулятора; многие эмуляторы включают в себя схему, которая отслеживает адресные строки, выходящие из процессор и заставить его остановиться, если адрес соответствует точке останова адрес.
- Третья возможность заключается в том, что у мишени уже есть возможность делать точки прерывания; например, монитор ПЗУ может выполнять свои собственные программные точки останова. Поэтому, хотя они не являются буквально аппаратными точки останова, с точки зрения GDB они работают одинаково;
- Контрольные точки программного обеспечения требуют, чтобы GDB выполнял несколько большую работу. Основная теория состоит в том, что GDB заменит программную инструкцию ловушкой, незаконное разделение или какую-либо другую инструкцию, которая исключение, а затем, когда он столкнулся, GDB примет исключение и остановите программу. Когда пользователь скажет продолжить, GDB восстановит первоначальная инструкция, одношаговая, повторная установка ловушки и продолжить.