Linux ptrace 用法详解
2015-06-09 16:04
495 查看
#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,线程就是跟进程的实线机制不一样,是一种比进程轻量的执行单位。
相关文章推荐
- redhat6 GCC安装
- 服务器自动发送邮件监测freeswitch进程
- 在Linux下搭建Tiny开发环境
- Linux系列笔记 - vim相关记录
- Linux使用PAM锁定多次登陆失败的用户
- Linux修改SSH端口和禁止Root远程登陆
- Linux常用命令大全
- linux tar.gz zip 减压 压缩命令
- Linux 操作
- Linux useradd命令
- Linux内核实现List二个关键的宏offsetof 和 container_of
- 嵌入式Linux常见问题
- Linux下交互式添加用户脚本(四个示例)
- 配置Centos服务器
- (转)Linux进程池的实现
- linux基本命令<2>
- Linux C编程从入门到精通——Linux基础
- Unix/Linux的 mmap()内存映射
- CentOS6.5安装配置Samba
- linux内核源码的技巧