- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机]Linux系统调用与ptrace分析
Linux 系统调用与 ptrace 分析
概述
1.Linux 的系统结构
在 Linux 系统结构中,最核心的是计算机硬件,它提供对 Linux 软件的支持,靠近硬件的
内层是Linux 内核程序(即操作系统)。内核直接和硬件打交道是程序和硬件之间的接口或界面。
它对一切外层程序提供公共服务,把外部程序同硬件隔离开。内核程序大致可分为文件系统管
理,进程管理,内存管理等几部分。进程管理又分为低级进程管理和高级进程管理。低级进程
管理主要包括:进程调度分配,控制占用处理器的程序和基本的进程通信。高级进程管理主要
包括:进程的创建,终止,进程间通信,进程在内存和外存之间的转储,信号机构和进程间跟
踪控制等。内核程序的外层是实用程序,内核提供对实用程序的支持,两层之间的界面是系统
调用。内核外的实用程序通过系统调用来和内核打交道。实现的过程是通过一种特殊的指令(陷
入指令)进入内核,然后转入相应的系统调用处理程序。这也是本文将主要讨论的问题。
2 .80386 体系结构
80386 的体系结构承认两类事件。
1.异常(exceptions )
2. 中断(interrupts )
他们两都会引起“上下文转换”同时建立一个过程或任务,中断可以随时随地发生(包括
在执行程序时)所以用来响应硬件信号。而异常则由指令内部错误引起。
每一个异常或中断都有一个唯一的标识符,在 linux 中被称为向量。
指令内部异常和 NMI (不可屏蔽中断)的中断向量的范围从0—31 。32-255 的任何向量都可以
用做
1.可屏蔽中断
2.编程(调试)异常
至于可屏蔽中断则取决于该系统的硬件配置。外部中断控制器在中断响应周期把中断向量
放到总线上。
3 . Linux 系统调用流程概述
Linux 系统调用的流程非常简单,它由 0x80 号中断进入系统调用入口,通过使用系统
调用表保存系统调用服务函数的入口地址来实现,本文首先分析一般 Linux 系统调用的流
程,然后再分析 Linux 系统调用 sys_ptrace ().
一. Linux 系统调用的流程分析
1.1 设定 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 。
而中断描述表
您可能关注的文档
- [英语学习]新编英语教程6 Unit 13.ppt
- [英语学习]新视野大学英语视听说第二版第三册纯粹答案.doc
- [英语学习]新闻.ppt
- [英语学习]时文阅读训练一.doc
- [英语学习]有道翻译.doc
- [英语学习]替中国人写的英语语法.doc
- [英语学习]李阳疯狂英语之标准美语5b.doc
- [英语学习]有关四级考试.doc
- [英语学习]李开复如何攻克英语难关.doc
- [英语学习]李露+Healthy+eating.doc
- 2025AACR十大热门靶点推荐和解读报告52页.docx
- 财务部管理报表.xlsx
- 高中物理新人教版选修3-1课件第二章恒定电流第7节闭合电路欧姆定律.ppt
- 第三单元知识梳理(课件)-三年级语文下册单元复习(部编版).pptx
- 俄罗斯知识点训练课件-七年级地理下学期人教版(2024).pptx
- 课外古诗词诵读龟虽寿-八年级语文上学期课内课件(统编版).pptx
- 高三语文二轮复习课件第七部分实用类文本阅读7.2.1.ppt
- 高考物理人教版一轮复习课件第4章第3讲圆周运动.ppt
- 高考英语一轮复习课件53Lifeinthefuture.ppt
- 2025-2030衣柜行业风险投资发展分析及投资融资策略研究报告.docx
文档评论(0)