【发布时间】:2016-10-27 11:54:49
【问题描述】:
我发现可以在 GDB 中设置一个断点,该断点在读取或写入特定内存地址时触发。 我想知道它是如何工作的。 GDB 是否有一种进程内存的副本并检查每条指令之间发生了什么变化?或者它是系统调用或内核功能?
(英特尔 x86 32 位和 64 位架构)
【问题讨论】:
-
目标是什么?目标架构以及 gdb 如何在其(或远程)上运行?是 x86 + Linux 和 gdb 在同一台机器上吗?检查 gdb 的“观察点”功能:sourceware.org/gdb/onlinedocs/gdb/Set-Watchpoints.html - 它可以使用硬件调试寄存器(在某些目标上;硬件观察点)或慢速软件观察点工作,实现为单步执行程序并使用 ptrace 读取内存(在 linux 上,它可用于单指令步进和内存读取)。理论上可以使用 mprotect PROT_NONE 加速软件观察点并捕获 SEGV。
-
我不知道 'rtrace' 或 'atrace' gdb 命令。你的“内存读/写断点”命令是什么?
-
对不起,我的意思是 rwatch 和 awatch
标签: gdb