预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共27页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
PRACE读写操作过程分析--Linux操作系统分析报告学生:洪津津学号:9811507老师:李善平一九九九年六月PRACE读写操作过程分析概述1.1ptrace()功能简介Ptrace()是一个系统调用,让父进程控制子进程的执行,它主要用于断点跟踪调试。当子进程接受到父进程的跟踪信号后,转入暂停状态,等待父进程对它的操作;同时回送一信号给父进程。在子进程处在暂停状态时,父进程可以通过ptrace()对其内核映像空间读写,可以命令子进程结束运行或继续运行。1.2ptrace()系统调用函数原形函数原形:intptrace(intrequest,intpid,intaddr,intdata);函数参数:request系统调用要做的具体操作要求,包括:PTRACE_TRACEME当前进程主动要求被其父进程跟踪;PTRACE_PEEKTEXT在指定地址上读取一条指令;PTRACE_PEEKDATA在指定地址上读取一个字长的数据;PTRACE_PEEKUSR根据指定地址在USER结构区域中读寄存器;PTRACE_POKETEXT在指定地址上改写一条指令;PTRACE_POKEDATA在指定地址上改写一个字长的数据;PTRACE_POKEUSR根据指定地址在USER结构区域中写寄存器;PTRACE_CONT重新开始子进程;PTRACE_SYSCALL重新开始子进程;同PTRACE_CONT不同的是,PTRACE_SYSCALL可以使进程在下一次系统调用开始或结束时中止运行;PTRACE_KILL给子进程发送SIGKILL信号结束子进程;PTRACE_SINGLESTEP在处理器状态字(PSW)中设置Tracebit位,让子进程单步执行;PTRACE_ATTACH连接被跟踪的子进程;PTRACE_DETACH取消原来的连接。pid被跟踪的子进程的进程标志号。需要注意的是,1号进程不能使用该系统调用,1号进程不能被跟踪。data要写入字的数值。返回值:如果调用成功,返回0;如果调用失败一负值,并置相应的错误标志。EPERM表示该子进程不能被跟踪(如1号进程),或者已经被跟踪;ESRCH表示该子进程不存在;EIO表示跟踪请求不合法。1.3ptrace()函数整体框架ptrace系统调用在核心对应的处理函数为sys_ptrace()(/linux/arch/i386/kernel/ptrace.c)。sys_ptrace函数完成了ptrace系统调用功能。2.ptrace()对内存的读写操作下面我们来具体讨论当request等于PTRACE_PPEEKTEXT,PTRACE_PEEKDATA,PTRACE_PEEKUSER,PTRACE_POKETEXT,PTRACE_POKETEXT,PTRACE_POKEUSER时,sys_ptrace()是怎么对数据进行读写的。由于涉及到Linux的内存读写和寄存器读写,首先要对其做个简单的介绍。1Linux内存管理概述在LINUX中,每一个用户进程都可以访问4GB的线性虚拟内存空间。其中从0到3GB的虚拟内存地址是用户空间,用户进程可以直接对其进行访问。从3GB到4GB的虚拟内存地址为核心空间,存放仅供核心态访问的代码和数据,用户进程不可访问。当用户进程通过中断或系统调用对其访问时,就会触发处理器的特权级转换(从处理器的特权级3切换到特权级0),即从操作系统的用户态切换到核心态。所有进程从3GB到4GB的虚拟空间映像都是一样的,LINUX以此方式让核心态进程共享代码段和数据段。核心态虚拟空间从3GB到3GB+4M的一段(也就是进程页目录第768项所管辖的范围),被影射到物理空间0到4M段。因此,进程处于核心态时,只要通过访问虚拟空间3GB到3GB+4M段,即访问了物理空间0到4M段。上述两种空间对用户进程来说都是透明的,用户进程所访问的内存地址都是连续的4GB线性虚拟地址。因此,我们首先关心的是LINUX是如何划分虚拟空间的。LINUX采用“按需调页”(DemandPaging)技术管理虚拟内存。标准LINUX的虚存页表应为三级页表,依次为页目录(PGD,PageDirectory)、中间页目录(PMD,PageMiddleDirectory)和页表(PTE,PageTable)。如图2.1所示。PGDPMDPTEPageFrame图2.1LINUX的三级页表结构在INTEL微机上,LINUX的页表结构实际为两级。80386体系结构之页管理机制中的页目录就是PGD,页表就是