Linux 从GDB谈进程跟踪

来源:互联网 发布:淘宝罗技那家店是正品 编辑:程序博客网 时间:2024/06/08 17:28

进程跟踪的系统调用是ptrace(),通过ptrace,一个进程可以动态的读写另一个进程的内存和寄存器,包括数据段、代码段、堆栈以及所有的寄存器。从概念上来说,着似乎也是进程间通信的一种方法。但实际上,这种通信是单方面的,被跟踪的进程并不知道自己是在收到控制和监视的条件下进行。从这个角度来说,这又不属于进程间通信。

 

ptrace格式:

Int ptrace(int request,//具体操作

 int pid,

 int addr,//操作目标的地址

 int data)

 

request参数是由若干宏组成的。比如使用GDB的时候,给出的宏是PTRACE_ATTACH,也就是“attach”到被跟踪进程,之后使用各种操作来读写。这里的addr就是其地址。或者通过PTRACE_SINGLESTEPPTRACE_KILL等来控制被跟踪进程的运行,最后通过PTRACE_DETACH脱离进程跟踪关系。

 

#define PTRACE_TRACEME 0
#define PTRACE_PEEKTEXT 1
#define PTRACE_PEEKDATA 2
#define PTRACE_PEEKUSR 3
#define PTRACE_POKETEXT 4
#define PTRACE_POKEDATA 5
#define PTRACE_POKEUSR 6
#define PTRACE_CONT 7
#define PTRACE_KILL 8
#define PTRACE_SINGLESTEP 9
#define PTRACE_ATTACH 0x10
#define PTRACE_DETACH 0x11
#define PTRACE_SYSCALL 24 

 

与其他系统调用一样,ptrace()在内核的实现是sys_ptrace()

 

跟踪有两种情况,一种是进程主动请求跟踪,还有一种是被跟踪进程本来就是跟踪进程通过forkexec启动的(比如GDB)。所以在函数开头的时候会if检测,这次跟踪是不是主动请求的跟踪,如果是就在该进程修改标志位。

 

接下来就根据参数pid找到其task_struct。不过,一号进程init()是不允许被跟踪的,同时也不能够跟踪自己。

 

找到task_struct后会修改其所在页面的使用计数。原因是有些操作可能会发生进程调度,为了防止子进程得到机会先运行并且exit()释放task_struct页面。

如果两个进程主动请求跟踪,但是两个进程不属于一个用户组,那就要将当前进程提到特权用户才行。此外,一个进程不能够被多个进程跟踪。所以在这里还得再检测一下。

父进程存在着生父和养父之分,养父平常和生父指向同一个进程。但是在存在跟踪的情况下,养父就是“跟踪者”,接下来就会对养父进行修改。

 

在读取被跟踪进程物理页面的时候,为了保证数据正确,会将被跟踪的子进程的状态置于TASK_STOP,实现原子操作。

 

一般来说,读取被跟踪进程的用户空间和系统空间方法是不一样的,跟踪进程只能说在用户空间下跟踪。也就是说不能够读取被跟踪者的系统空间。为了读取被跟踪者的系统空间里的信息,就要进行一个软中断。在日常的GDB下,我们在编译的时候总要-g。这个-g就是为处理一个SIGTRAP信号做准备。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微波炉碗盖子吸住了怎么办 微波炉转饭盖子吸住了怎么办 玻璃碗放进微波炉打不开怎么办 乐扣微波炉加热后打不开怎么办 美的微波炉盖子打不开怎么办 美的微波炉门都打不开了怎么办 饭煮好了有异味怎么办 一正常吃饭就胖怎么办 高铁盒饭没15的怎么办 上火车前票丢了怎么办 减肥期吃了汉堡怎么办 寿司店鳗鱼有刺怎么办 吃泡面胃难受该怎么办 吃上火的东西脸上长痘痘怎么办 减肥期间吃撑了怎么办 喝了变质的牛奶怎么办 绿豆糕吃多了会怎么办 小孩抓米饭烫了手怎么办 减肥不来月经了怎么办 吃了馊了的米饭怎么办 饭在冰箱里硬了怎么办 剩米饭反潮了怎么办 吃馊米饭中毒后怎么办? 蒸熟的米饭发黄怎么办 孕妇肉类吃的少怎么办 大米饭坏了吃了怎么办 米饭煮糊了锅怎么办 减肥吃了猪肉脯怎么办 吃了硬米饭胃痛怎么办 宝宝吃了硬物怎么办 米饭卡在喉咙里了怎么办 喉咙里卡了米饭怎么办 孕妇吃了坏鹅蛋怎么办 1岁大宝宝长短腿怎么办 行测中的判断推理怎么办 塑料盖子玻璃罐头瓶子打不开怎么办 猪肉烫火锅吃怎么办料 自制腊肠放干了怎么办 孕妇吃了4块腊肉怎么办 衣服沾了火锅味怎么办 皮包上有火锅味怎么办