Linux ptrace 用法详解

本文详细探讨了Linux系统的ptrace工具,它允许一个进程(tracer)挂载并控制另一个进程(tracee),用于调试、系统调用跟踪、病毒感染检测等多种场景。通过ptrace,开发者可以读写tracee的内存和寄存器,拦截系统调用,实现低级别的进程交互。了解ptrace的工作原理和使用方法对于提升Linux内核级别的调试能力至关重要。

 

#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,线程就是跟进程的实线机制不一样,是一种比进程轻量的执行单位。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值