Kho*_*oth 14
如果要拦截对一系列地址的写入,可以使用mprotect()将所讨论的内存标记为不可写,并使用sigaction()捕获生成的SIGSEGV 安装信号处理程序,执行日志记录或其他任何操作并将页面标记为可写入.
您需要的是访问X86调试寄存器:http://en.wikipedia.org/wiki/Debug_register
您需要在DR0到DR3之一中设置断点地址,然后在DR7中设置条件(数据写入).将发生中断,您可以运行调试代码来读取DR6并找到导致断点的原因.
如果GDB不起作用,您可以尝试更简单/更小的调试器,例如http://sourceforge.net/projects/minibug/ - 如果这不起作用,您至少可以查看代码并了解如何使用自己在处理器上调试硬件.
此外,还有一个很好的IBM开发人员资源来掌握Linux调试技术,它应该提供一些额外的选项:
http://www.ibm.com/developerworks/linux/library/l-debug/
关于这样做的一篇相当不错的文章就是Windows(我知道你在Linux上运行,但其他人可能会想到在windows中执行此问题):
http://www.codeproject.com/KB/debug/hardwarebreakpoint.aspx
-亚当
| 归档时间: |
|
| 查看次数: |
3944 次 |
| 最近记录: |