0

我目前正在调查 GDB 来源。我试图找到从 GDB 到 BFD 的过渡是与内存交互以“应用”断点的位置。因此,代码中的位置是操作内存以设置断点的位置。

谁能指导我?

4

1 回答 1

1

BFD 不参与插入断点。

GDB 有许多可以插入断点的机制。但是如果我们只查看内存断点,那么您应该开始查看gdb/mem-break.c

插入内存断点时,您最终会进入memory_insert_breakpoint,对于大多数体系结构,然后会调用default_memory_insert_breakpoint.

然后,此函数使用target_read_memoryandtarget_write_raw_memory来读取和写入内存。

这些目标函数将根据您的目标执行不同的操作,本地 Linux 目标将使用 ptrace 命令来戳内存,远程目标将向 gdbserver 发送数据包。

您还必须考虑远程目标可以支持硬件断点,或者也可以使用z/Z 远程协议数据包插入/远程数据包,这些都可以在gdb/remote.c中找到,但是当您特别询问内存断点时,我对于这些案例,我们将不做详细介绍。

于 2022-01-07T13:35:11.040 回答