![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux 应用程序调试技术
estate66
这个作者很懒,什么都没留下…
展开
-
ptrace应用之二单步调试
<br /><br /> ptrace提供了PTRACE_SINGLESTEP命令来实现对子进程执行单步调试的功能。在单步调试时,内核在子进程中执行的每一条指令前阻塞,然后将控制权交给父进程,父进程可以查看子进程的变量和寄存器的值,完成程序的调试。<br /> 下面是用汇编写的一个从三个数中找到最大数的程序。文件名为find_maxnum.s 1 .section .data 2 var1: 3 .long 23 4原创 2010-11-29 19:32:00 · 1460 阅读 · 0 评论 -
ptrace应用之三代码注入(codeinjection)
在Linuxjoural杂志上看到了一篇关于ptrace代码注入的文章,写的非常的好,所以就有想翻译一下的想法。基本内容如下:如果我们想跟踪调试一个已经在运行的进程,我们可以使用 ptrace(PTRACE_ATTACH....... ),它的功能基本上等同于ptrace(PTRACE_TRACEME..... )。当我们完成跟踪后,我们可以使用ptrace(PTRACE_DETACH...... )让子进程继续运行。下面是一个实例程序: #include int main()原创 2010-12-07 20:26:00 · 3542 阅读 · 0 评论 -
linux应用程序调试的基石-ptrace
ptrace是process和trace的简写,直译为进程的跟踪。它是操作系统提供给应用程序调试器诸于gdb,strace的系统调用接口(API)。 具体过程为: 父进程首先进行fork调用,并在子进程中执行Ptrace函数,将PTRACE_TRACEME赋值给request形参,紧接着在子进程中执行exec调用完后。将控制权交给父进程,通过使用PTRACE_ATTACH,父进程开始跟踪子进程,每一次被跟踪的子进程都会向父进程发送一个信号。父进程可以忽略掉大部分信号,仅有的一个原创 2010-11-03 20:54:00 · 2106 阅读 · 0 评论 -
ptrace源代码分析
ptrace作为应用程序调试的基石,要想对其有深入的了解,最好的方法是分析它的源代码。选取linux2.6.8,更高版本的内容基本相同。实现ptrace系统调用功能的主要是sys_ptrace函数,当然还包括一些读写寄存器的辅助函数。该函数的基本结构比较简单: (1)判断该进程是否被跟踪,即request==PTRACE_TRACEME,如果是,对其进行处理。 (2)根据被跟踪子进程的pid找到其task结构体 (3)判断是否为init进程(pid==1)原创 2011-01-04 14:47:00 · 2931 阅读 · 0 评论 -
ptrace 应用之一基础知识
Linux提供了ptrace系统函数,使得父进程得以控制和监视其它进程。当使用ptrace跟踪子进程后,所有发给子进程的信号(除了SIGKILL)外,都会被父进程截获,而此时子进程阻塞,并且被标记为TASK_TRACED。父进程收到信号后,可以查看和修改子进程的内核映像和寄存器。父进程完成所要做的工作之后可以选择让子进程继续执行还是终止。 在i386体系中,应用程序的系统调用基本过程:将系统调用号放在eax寄存器,其他的函数形参依次放在ebx,ecx,edx,esi,edi中, 注原创 2010-11-18 16:35:00 · 1416 阅读 · 0 评论