Нужен обзор процесса отладки на аппаратном уровне - PullRequest
0 голосов
/ 02 февраля 2020

Мне нужен подробный обзор процесса отладки на типичной машине x86 с операционной системой Linux; допустим, для отладки используется gdb. Вопрос № 1: облегчается ли процесс отладки аппаратным обеспечением (или он полностью реализован в программном обеспечении?). Если да, то какие архитектурные особенности из набора команд задействованы?

1 Ответ

3 голосов
/ 02 февраля 2020

ISA x86 включает однобайтовую кодировку int3, предназначенную для программных точек останова. GDB использует это (через ptrace) по умолчанию для точек останова.

( Почему Single Stepping Instruction на X86? )

x86 также имеет флаг прерывания (TF) в EFLAGS для одношагового режима. (https://en.wikipedia.org/wiki/Trap_flag). См. Также Разница между флагом прерывания (TF) и флагом прерывания монитора?

Существуют даже "регистры отладки" для установки аппаратных точек останова, без изменения машинного кода на быть запущенным А также аппаратная поддержка точек наблюдения, для прерывания записи на определенный адрес. Это делает точки наблюдения GDB эффективными, не требуя от него одношагового и ручного декодирования инструкции, чтобы увидеть, где она пишет.

https://wiki.osdev.org/CPU_Registers_x86#Debug_Registers

Реализация аппаратные точки останова, использующие регистр отладки x86 ветка форума osdev может быть уместна.


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

ARM Linux Раньше это делалось для реализации ptrace одношагового, но этот код дизассемблера был удален из ядра и теперь просто возвращает -EIO. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=425fc47adb5bb69f76285be77a09a3341a30799e - это коммит, который удалил его.

...