GDB观察点是如何工作的?是否可以实现类似的功能来在定义的位置利用字节级访问?
72qzrwbm1#
在x86上,存在跟踪存储器地址的CPU调试寄存器D 0-D3。This解释了如何在Linux中实现硬件断点,还详细介绍了使用的处理器特定功能。硬件断点上的另一个article。
dtcbnfnu2#
我相信gdb使用MMU,以便将包含监视地址范围的内存页面标记为受保护-然后,当写入受保护页面时发生异常时,gdb将处理该异常,检查写入地址是否对应于特定的监视点,然后相应地恢复或转到gdb命令提示符。您可以使用mprotect为您自己的调试代码或测试工具实现类似的功能,尽管如果您想做任何复杂的事情,而不仅仅是在错误写入时失败,则需要实现一个异常处理程序。
xzabzqsa3#
使用MMU或MPU(在其他处理器上如嵌入式),可用于实现“硬件观察点”;然而,一些处理器(例如,许多Arm实现)具有经由调试端口访问的专用观察点硬件。这与使用MMU或MPU相比具有一些优点。如果使用MMU或MPU方法:
3条答案
按热度按时间72qzrwbm1#
在x86上,存在跟踪存储器地址的CPU调试寄存器D 0-D3。
This解释了如何在Linux中实现硬件断点,还详细介绍了使用的处理器特定功能。
硬件断点上的另一个article。
dtcbnfnu2#
我相信gdb使用MMU,以便将包含监视地址范围的内存页面标记为受保护-然后,当写入受保护页面时发生异常时,gdb将处理该异常,检查写入地址是否对应于特定的监视点,然后相应地恢复或转到gdb命令提示符。
您可以使用mprotect为您自己的调试代码或测试工具实现类似的功能,尽管如果您想做任何复杂的事情,而不仅仅是在错误写入时失败,则需要实现一个异常处理程序。
xzabzqsa3#
使用MMU或MPU(在其他处理器上如嵌入式),可用于实现“硬件观察点”;然而,一些处理器(例如,许多Arm实现)具有经由调试端口访问的专用观察点硬件。这与使用MMU或MPU相比具有一些优点。
如果使用MMU或MPU方法:
如果您使用专用调试观察点硬件,例如Arm支持的硬件: