0

如果我理解正确,linux gdb 断点现在通过使用“int 3”覆盖操作码并在命中时进行跟踪来工作。Ptrace 并没有永远存在。在 ptrace 被引入内核之前断点是如何工作的?

4

1 回答 1

3

我不得不不同意你的假设:ptrace几乎永远存在:

ptrace 最初是在第七版 Unix [ 1979 ] 中实现的,并且出现在 Unix 的 SVr4 [ 1989 ] 和 4.3BSD [ 1986 ] 分支中。

(来源:维基百科,'ptrace',我添加了年份)

gdb最初的版本是在 1986 年。

就 Linux 而言,ptrace自 Linux 1.0 以来一直是一个系统调用 - 您可以在man 2 syscalls.

(我知道这并不能回答“你如何在没有 ptrace 的情况下进行调试”的问题,我很乐意在出现更技术性的答案后立即删除它,但在此之前我认为这提供了一些相关的历史观点。)

于 2013-10-08T11:10:39.233 回答