linux系统调用与ptrace分析(实验报告).doc
约12页DOC格式手机打开展开
linux系统调用与ptrace分析(实验报告),linux系统调用与ptrace分析(实验报告)页数:12字数:7036linux系统调用与ptrace分析概述1.linux的系统结构在linux系统结构中,最核心的是计算机硬件,它提供对linux软件的支持,靠近硬件的内层是linux内核程序(即操作系统)。内核直接和硬件打交道是程序和硬件之间的接口或界面。它对一切...
内容介绍
此文档由会员 cnlula 发布
Linux系统调用与ptrace分析(实验报告)
页数:12 字数:7036
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_a
页数:12 字数:7036
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_a