概述
#include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
通过ptrace()这个系统调用,可以让一个进程去观察并且改变另外一个进程的行为,同时监测内存和寄存器.主要被用于断点调试以及系统调用的trace.
黑客也常用用它来做一些其他的工作,如hook
首先,tracee需要被tracer attach.附加和命令序列是针对每一个线程来说的,在一个多线程的进程中,每个线程都可以被独立的附加上一个不同的tracer,或者不被附加.这样的情况下,tracee意味着一个线程,不是一个多线程的进程.Ptrace命令是通过下面个调用发送给tracee
ptrace(PTRACE_foo,pid,...)
这里的pid是相关linux线程的ID.也就是在/proc/%d/task/ ,这个文件下的id号
当tracee被跟踪时,每发送一个信号,tracee都会暂停,即使这个信号会被忽略(除非是SIGKILL,这个会是tracee停止).tracer将会在下次waitpid(2)系统调用的时候被通知.该waitpid调用会返回一个status值,该值中包含让tracee停止的信息.当tracee停止的时候,tracer可以通过多种ptrace调用来修改tracee,然后tracer让tracee继续执行,可以有选择的忽略信号,甚至传递一个不同的信号.
后面看过linux内核才知道,对于linux来说,没有什么进程之说(不准确)。在linux内核中,只存在一种最小的执行单位,暂且叫做线程吧,如果多个线程有一个共同的进程组,那么他们就组成了一个进程。
在其他系统中,如windows,线程就是跟进程的实线机制不一样,是一种比进程轻量的执行单位。
最后
以上就是忧郁电脑为你收集整理的Linux ptrace 用法详解的全部内容,希望文章能够帮你解决Linux ptrace 用法详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复