linux系统函数ptrace介绍-01

来源:互联网 发布:三星高通9008端口救砖 编辑:程序博客网 时间:2024/06/10 05:26

ptrace系统函数。 ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。使用ptrace,你可以在用户层拦截和修改系统调用(sys call).

学好ptrace,写一个linux下的简单调试器是木有问题的。

Ptrace有四个参数

long ptrace(enum__ptrace_request  request,  pid_tpid,  void *addr, void *data);

第一个参数决定了ptrace的行为与其它参数的使用方法。

下面先介绍如下两个函数

一、PTRACE_TRACEME

告诉自己的父进程来跟踪我吧。

实例:


fork一个子进程,然后告诉父进程来跟踪我吧。父进程Else语句这里写得比较简单,实际上这里可以做很多事,给子进程设置断点、读子进程寄存器数据都是可以的。

二、PTRACE_ATTACH

跟踪某个进程。(备注:如果某一个进程已经被另一个进程ptrace了,那么该进程将不能被另一个进程ptrace。很多反调试基于此点。)

实例:03.c代表将要去跟踪某一个进程。04.c代表要被跟踪的进程

03.c源码:


备注:6065代表被跟踪进程的ID

04.c源码


备注:被跟踪的进程。

    测试:

    运行04.c:

    

    

   此时查看该进程的pid,替换03.c源码中的进程ID

   

   重新编译,执行03程序,

   

   返回值为0,代表attach成功。之后我们就可以根据ptrace的一些其它函数对04程序进行监控了。

   此时如果再开启另一个终端,再次执行03程序,会发现如下结果

   

   返回值为-1,代表attach失败。这就验证了一个程序只能被另一个程序进行监控,这也是现在大多数反调试所采用的技巧。

0 0
原创粉丝点击