Ptrace源码分析报告

Ptrace源码分析报告

ID:37365260

大小:658.36 KB

页数:20页

时间:2019-05-22

Ptrace源码分析报告_第1页
Ptrace源码分析报告_第2页
Ptrace源码分析报告_第3页
Ptrace源码分析报告_第4页
Ptrace源码分析报告_第5页
资源描述:

《Ptrace源码分析报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Ptrace的源码分析•前言我们组选择了系统调用拦截这个题目,本想参考strace来做一个类似的系统调用的拦截程序。但是后来发现我们发言前已经有同学介绍过系统调用ptrace的使用和相应的DEMO程序了,为了和他们的工作区别开来,我们的重点放在了研究ptrace的内核实现上。在这里我们主要描述ptrace的概述、标记跟踪、被跟踪进程与跟踪进程间切换和ptrace调试四大部分。虽然我们自己写了DEMO程序,也简略分析了strace,但是为了能够突出重点更详细的说明ptrace的结构,我们都将这些省去了。下面是我们的报告,请李老师批阅。•Ptrace内核实现•Ptrace概述Ptrac

2、e在Unix的早起版本里面就已经存在了,主要是用来对特定进程进行跟踪和调试的一个系统调用。在ptrace的使用中,我们将相关的进程分为被跟踪的进程和跟踪进程两种。通过ptrace系统调用,跟踪进程可以跟踪被跟踪进程的系统调用行为,并且还可以更改被跟踪进程的寄存器、内存和特定的调式寄存器(i386架构中只能改第七号调试寄存器)。此外,ptrace还提供的单步调试的功能,它的软中断比硬件提供的单步调试功能更加精确。使用这个系统调用,程序员可以很方便的调试自己的程序。据我们所知,现有的strace和gdb都在一定程度上依赖于ptrace系统调用。Ptrace这个系统调用对于程序调试有及其

3、重要的作用,因此ptrace具有较大的研究意义。2.1.2ptrace系统调用的格式Ptrace的原型如图1所示,有四个参数,第一个参数request决定了ptrace的行为。后面三个参数要根据第一个参数的取值才有特定的含义。其中,第二个参数指定了对象进程的进程号,addr和data分别是内存地址和传入的数据。Figure12.1.3ptrace的request参数Ptrace的request参数决定了ptrace系统调用的行为,它在内核源码的"include/linux/ptrace.h"和"include/asm-i386/ptrace.h"中定义。图二、三和图四在"inclu

4、de/linux/ptrace.h"中定义,图五在"include/asm-i386/ptrace.h"。图二罗列了ptrace中与硬件架构无关的几个参数:PTRACE_ME:由被跟踪进程调用,调用该系统调用的进程把自己标记为被父进程跟踪。下面的参数都是由跟踪进程调用的。PTRACE_PEEKTEXT和PTRACE_PEEKDATA:从被跟踪进程的内存空间里读取位于addr地址的一个字长度的数据。忽略data参数。PTRACE_PEEKUSER:读取被跟踪进程的用户空间中偏移量为addr的一个字长度的数据。忽略data参数。PTRACE_POKETEXT和PTRACE_POKEDA

5、TA:把data指向的一个字长的数据拷贝到被跟踪进程的内存中位置为addr内存空间里。PTRACE_POKEUSER:将data指向的一个字长的数据拷贝到被跟踪进程的用户空间中偏移量为addr的内存空间里。PTRACE_CONT:重启被跟踪进程,并将data指向的作为信号传给被跟踪进程。如果data是零,那么只是正常的重启进程。忽略addr参数。PTRACE_KILL:发送SIGKILL到被跟踪进程。忽略addr和data参数。PTRACE_SINGLESTEP:和和PTRACE_CONT类似,只是被跟踪进程执行下一条指令的时候会立刻暂停。PTRACE_ATTACH:跟踪者用这个参

6、数来将指定的pid的进程作为被跟踪进程,并将被跟踪进程作为跟踪进程的子进程。PTRACE_DETACH:和PTRACE_CONT类似,重启被跟踪进程。但是会先回复PTRACE_ATTACH和PTRACE_ME的操作。data被作为参数传递给被跟踪进程,忽略addr参数。PTRACE_SYSCALL:和PTRACE_CONT类似,只是被跟踪进程执行下一个系统调用的时候仍会暂停。Figure2图三表示了ptrace调用实现与硬件有关的四个参数。PTRACE_SETOPTIONS:设置ptrace跟踪的参数选项,选项的值由data中的位图变量指定(可取图4中的值)。PTRACE_GETE

7、VENTMSG:获取被跟踪进程的信息,并存放在data指向的跟踪进程的内存空间里。对于PTRACE_EVENT_EXIT信号,data中的值为跟踪进程终结的时候的返回值。对于PTRACE_EVENT_FORK,PTRACE_EVENT_VFORK和PTRACE_EVENT_CLONE信号,则data中的值为新进程的pid。忽略addr参数。PTRACE_GETSIGINFO:获取引起被跟踪进程暂停的信号,并保存在data指向的内存空间。参数addr忽略。PTRACE_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。