Linux系统调用与ptrace分析(实验报告)_[文档在线提供].docVIP

Linux系统调用与ptrace分析(实验报告)_[文档在线提供].doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux系统调用与ptrace分析 概述 1.Linux的系统结构 在Linux系统结构中,最核心的是计算机硬件,它提供对Linux软件的支持,靠近硬件的内层是Linux内核程序(即操作系统)。内核直接和硬件打交道是程序和硬件之间的接口或界面。它对一切外层程序提供公共服务,把外部程序同硬件隔离开。内核程序大致可分为文件系统管理,进程管理,内存管理等几部分。进程管理又分为低级进程管理和高级进程管理。低级进程管理主要包括:进程调度分配,控制占用处理器的程序和基本的进程通信。高级进程管理主要包括:进程的创建,终止,进程间通信,进程在内存和外存之间的转储,信号机构和进程间跟踪控制等。内核程序的外层是实用程序,内核提供对实用程序的支持,两层之间的界面是系统调用。内核外的实用程序通过系统调用来和内核打交道。实现的过程是通过一种特殊的指令(陷入指令)进入内核,然后转入相应的系统调用处理程序。这也是本文将主要讨论的问题。 2.80386体系结构 80386的体系结构承认两类事件。 异常(exceptions) 中断(interrupts) 他们两都会引起“上下文转换”同时建立一个过程或任务,中断可以随时随地发生(包括在执行程序时)所以用来响应硬件信号。而异常则由指令内部错误引起。 每一个异常或中断都有一个唯一的标识符,在linux中被称为向量。 指令内部异常和NMI(不可屏蔽中断)的中断向量的范围从0—31。32-255的任何向量都可以用做 可屏蔽中断 编程(调试)异常 至于可屏蔽中断则取决于该系统的硬件配置。外部中断控制器在中断响应周期把中断向量放到总线上。 3. Linux系统调用流程概述 Linux系统调用的流程非常简单,它由0x80号中断进入系统调用入口,通过使用系统调用表保存系统调用服务函数的入口地址来实现,本文首先分析一般Linux系统调用的流程,然后再分析Linux系统调用sys_ptrace(). Linux系统调用的流程分析 设定0x80号中断 系统启动后,先进行初始化,其中一部分重要的工作在start_kernel 函数(main.c中定义)中进行,在该函数中先做必要的初始化工作(setup_arch()与paging_init()),各种trap入口就在该函数中通过调用trap_init (traps.c)被设置,其中与系统调用有关的是:set_system_gate 0x80,system_call ; “set_system_gate ”是一宏,它在“system.h”中被定义: #define set_system_gate n,addr \ _set_gate idt[n],15,3,addr ……中断描述表结构(head.s) 其中“_set_gate ”也是在该文件中定义的宏: #define _set_gate gate_addr,type,dpl,addr \ __asm__ __volatile__ movw %%dx,%%ax\n\t \ movw %2,%%dx\n\t \ movl %%eax,%0\n\t \ movl %%edx,%1 \ : m * long * gate_addr , \ m * 1+ long * gate_addr \ :i short 0x8000+ dpl 13 + type 8 , \ d char * addr ,a KERNEL_CS 16 \ :ax,dx 调用该宏,将使addr地址值置入gate_addr中的地址值所指向的内存单元中,以上过程,使中断向量描述表中的第128项(16进制第80项)保存了0x80号中断的中断服务程序,即system_call。 而中断描述表结构则定义在head.s中. 系统调用的数据结构 系统调用所用到的数据结构也非常简单,主要有两种,系统调用表和寄存器帧结构。 “entry.S”中定义了系统调用表,该表保存了Linux基于Intel x86系列体系结构的计算机的166个系统调用入口地址(其中3个保留,Linux开辟的系统调用表可容纳256项),其中每项都被说明成 long型。 ENTRY sys_call_table .long SYMBOL_NAME sys_setup /* 0 */ .long SYMBOL_NAME sys_exit .long SYMBOL_NAME sys_fork ………… .long SYMBOL_NAME sys_setitimer /* 104 */ ………… .long SYMBOL_NAME sys_select /* 14

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档