存档

文章标签 ‘ptrace’

调试器是怎样工作的: Part 3 – 调试信息

2011年2月11日 1 条评论

In this part

我将解释调试器是怎样在机器代码中找到C函数和变量,以及那些用来记录每个机器代码对应的C源代码行的数据.

分类: debugger theory 标签:

调试器是怎样工作的: Part 2 – 断点

2011年2月7日 3 条评论

In this part

我会展示调试器中的”断点”是如何实现的.作为调试器的两大杀手级功能(另一个是查看进程内存),尽管在part 1中对断点我们已经有了一个初步的了解,但它还是太神秘了.不过,没关系,相信在读过本文之后,浮云终将不能蔽日.

分类: debugger theory 标签:

调试器是怎样工作的: Part 1 – 基础

2011年2月7日 没有评论

In this part

在这篇文章中,我将解释实现Linux下的调试器的基石–ptrace系统调用.本文的所有例子都是在32位Ubuntu上编写的,需要注意的是,这些代码是高度依赖于计算机体系结构的,好在移植他们应该不会太难.

分类: debugger theory 标签:

Playing with ptrace, Part II — 玩转ptrace(二)

2010年9月7日 1 条评论

在这篇文章中,我们将要研究如何在子进程中设置断点和往运行中的程序里插入代码。实际上调试器就是用这种方法来设置断点和执行调试句柄。与前面一样,这里的所有代码都是针对i386平台的。

分类: debugger theory, gdb 标签: ,

Playing with ptrace, Part I — 玩转ptrace(一)

2010年9月7日 没有评论

你想过怎么实现对系统调用的拦截吗?你尝试过通过改变系统调用的参数来愚弄你的系统kernel吗?你想过调试器是如何使运行中的进程暂停并且控制它吗?
你可能会开始考虑怎么使用复杂的kernel编程来达到目的,那么,你错了。实际上Linux提供了一种优雅的机制来完成这些:ptrace系统函数。 ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。
使用ptrace,你可以在用户层拦截和修改系统调用(sys call)
在这篇文章中,我们将学习如何拦截一个系统调用,然后修改它的参数。在本文的第二部分我们将学习更先进的技术:设置断点,插入代码到一个正在运行的程序中;我们将潜入到机器内部,偷窥和纂改进程的寄存器和数据段。

分类: debugger theory, gdb 标签: ,