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

  • 0
  • 0
  • 约1.96万字
  • 约 12页
  • 2016-10-11 发布于浙江
  • 举报

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

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

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+(dpl13)+(type8))), \ 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(

文档评论(0)

1亿VIP精品文档

相关文档