码迷,mamicode.com
首页 > 系统相关 > 详细

linux 进程学习笔记-进程跟踪

时间:2015-11-23 14:46:21      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:

<!--[if !supportLists]-->Ÿ <!--[endif]-->进程跟踪  




long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);



  

Linux用ptrace来进行进程跟踪,就跟我们平时用GDB debug一样,它允许一个进程去跟踪和控制另外一个进程。当被跟踪进程有信号发生时,被跟踪进程会被暂停下来,其内存空间变得可读写,跟踪它的进程可以选择是否忽略该信号和让程序继续进行。被跟踪进程无论是进行系统调用还是从系统调用返回时,跟踪它的进程都可以来处理该系统调用,比如检查或修改调用参数,修改寄存器和向代码段插入新的代码等。 




requset参数:用于表示该次ptrace的类型,有很多种:
PTRACE_TRACEME 
本进程被其父进程所跟踪。其父进程应该希望跟踪子进程。 
PTRACE_PEEKTEXT, PTRACE_PEEKDATA 
从内存地址中读取一个字节,内存地址由addr给出。
PTRACE_PEEKUSR 
从USER区域中读取一个字节,偏移量为addr。 
PTRACE_POKETEXT, PTRACE_POKEDATA 
往内存地址中写入一个字节。内存地址由addr给出。
PTRACE_POKEUSR 
往USER区域中写入一个字节。偏移量为addr。
PTRACE_SYSCALL, PTRACE_CONT 
重新运行。 
PTRACE_KILL 
杀掉子进程,使它退出。 
PTRACE_SINGLESTEP 
设置单步执行标志 
PTRACE_ATTACH 
跟踪指定pid 进程。 
PTRACE_DETACH 
结束跟踪
Intel386特有:
PTRACE_GETREGS
读取寄存器
PTRACE_SETREGS
设置寄存器
PTRACE_GETFPREGS
读取浮点寄存器
PTRACE_SETFPREGS
设置浮点寄存器
pid参数:表示被跟踪的进程的pid
addr参数和data参数:因requset参数的不同而有不同的作用,比如request为PTRACE_POKETEXT,其表示向内存写入一个字节的数据,那么addr表示要写入的内存地址,data则表示要写入的那一个字节。
 
ptrace是一个很复杂的topic,更多的可以参考这篇文章:Playing with ptrace: Part I, Part II

 

linux 进程学习笔记-进程跟踪

标签:

原文地址:http://www.cnblogs.com/zendu/p/4988383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!