gdb是如何工作的?

Ano*_*ous 30 gdb

我想知道gdb如何在内部工作.例如,我知道它使用ptrace()系统调用来监视跟踪程序.但我想知道它如何处理信号,如何插入新代码,以及它做的其他如此神话般的事情.

zen*_*ngr 16

查看GDB内部手册,其中包含一些重要方面.还有一个较旧的PDF版本的本文档.

从手册:

本文档记录了GNU调试器gdb的内部结构.它包括gdb的关键算法和操作的描述,以及使gdb适应特定主机和目标的机制.


Emp*_*ian 5

你会发现的唯一方法是研究来源.

您也可以构建它并自行调试它.逐步完成代码,您将确切知道它是如何完成的.

阅读GDB源代码并不适合胆小的人 - 它充满了宏,并且大量使用libbfd,这本身很难理解.

它必须,因为它是可移植的(特别是,在没有的平台上构建和工作ptrace()).


Coj*_*nes 5

取自gdbint.pdf:

它可以作为硬件断点或作为软件断点来完成:

  • 某些芯片有时会提供硬件断点作为内置调试功能。通常,这些操作是通过使用专用寄存器来实现的,其中可以存储断点地址。如果PC(程序计数器的简写)曾经与断点寄存器中的值匹配,则CPU会引发异常并将其报告给GDB。
  • 另一种可能是使用仿真器时。许多仿真器都包含监视来自处理器的地址线的电路,如果该地址与断点的地址匹配,则强制其停止。
  • 第三种可能性是目标已经能够以某种方式进行断点操作。例如,ROM监视器可以执行自己的软件断点。因此,尽管这些并不是字面上的硬件断点,但从GDB的角度来看,它们的作用相同。
  • 软件断点要求GDB做更多的工作。基本理论是GDB将用陷阱,非法除法或其他引起异常的指令替换程序指令,然后在遇到该指令时,GDB将采用异常并停止程序。当用户说要继续时,GDB将还原原始指令,单步执行,重新插入陷阱,然后继续。