在 GDB 源中的哪个位置是从 GDB 到 BFD 的转换,它将与内存交互到 "apply" 断点?
Where in GDB source is the transition from GDB to BFD which will interact with the memory to "apply" a breakpoint?
我目前正在调查 GDB 来源。我试图找到从 GDB 到 BFD 的转换是与内存交互以“应用”断点的地方。所以代码中的地方就是为了设置断点而操作内存的地方。
谁能指导我?
BFD不参与断点插入
GDB 有许多插入断点的机制。但是,如果我们只查看内存断点,那么您应该开始查看 gdb/mem-break.c.
当插入一个内存断点时,你将在 memory_insert_breakpoint
中结束,对于大多数体系结构,然后将调用 default_memory_insert_breakpoint
。
这个函数然后利用target_read_memory
和target_write_raw_memory
来读写内存。
这些目标函数将根据您的目标做不同的事情,本机 Linux 目标将使用 ptrace 命令来获取内存,远程目标将向 gdbserver 发送数据包.
您还必须考虑远程目标可以支持硬件断点,或者也可以 insert/remote 使用 the z/Z remote protocol packets, these can all be found in gdb/remote.c 的数据包,但是由于您特别询问了内存断点,我不会详细说明这些案例。
我目前正在调查 GDB 来源。我试图找到从 GDB 到 BFD 的转换是与内存交互以“应用”断点的地方。所以代码中的地方就是为了设置断点而操作内存的地方。
谁能指导我?
BFD不参与断点插入
GDB 有许多插入断点的机制。但是,如果我们只查看内存断点,那么您应该开始查看 gdb/mem-break.c.
当插入一个内存断点时,你将在 memory_insert_breakpoint
中结束,对于大多数体系结构,然后将调用 default_memory_insert_breakpoint
。
这个函数然后利用target_read_memory
和target_write_raw_memory
来读写内存。
这些目标函数将根据您的目标做不同的事情,本机 Linux 目标将使用 ptrace 命令来获取内存,远程目标将向 gdbserver 发送数据包.
您还必须考虑远程目标可以支持硬件断点,或者也可以 insert/remote 使用 the z/Z remote protocol packets, these can all be found in gdb/remote.c 的数据包,但是由于您特别询问了内存断点,我不会详细说明这些案例。