【发布时间】:2013-10-08 03:49:59
【问题描述】:
如果我理解正确,linux gdb 断点现在通过使用“int 3”覆盖操作码并在命中时进行 ptracing 来工作。 Ptrace 并没有永远存在。在 ptrace 被引入内核之前断点是如何工作的?
【问题讨论】:
标签: linux assembly gdb breakpoints ptrace
如果我理解正确,linux gdb 断点现在通过使用“int 3”覆盖操作码并在命中时进行 ptracing 来工作。 Ptrace 并没有永远存在。在 ptrace 被引入内核之前断点是如何工作的?
【问题讨论】:
标签: linux assembly gdb breakpoints ptrace
我不得不不同意你的假设:ptrace 几乎永远存在:
ptrace 最初是在第七版 Unix [1979] 中实现的,并且存在 在 Unix 的 SVr4 [1989] 和 4.3BSD [1986] 分支中。
(来源:维基百科,'ptrace',我添加了年份)
gdbs 的初始版本是在 1986 年。
就 Linux 而言,ptrace 自 Linux 1.0 以来一直是一个系统调用 - 您可以在 man 2 syscalls 中找到初始版本。
(我知道这并不能回答“如何在没有 ptrace 的情况下进行调试”的问题,我很乐意在出现更多技术性答案后立即删除它,但在那之前我认为这提供了一些相关的历史观点。)
【讨论】: