- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf VIP
- 雨污分流改造工程施工组织设计方案.pdf VIP
- 第九版儿科学配套课件-6.2-正常足月儿和早产儿的特点与护理.ppt VIP
- T_CACM 1601-2024 笑病中医诊疗指南.docx VIP
- 矿山三级(二级)矿量管理办法.doc VIP
- T_CACM 1583-2024 百合病中医诊疗指南.pdf VIP
- 趣味生物知识竞赛100选择题附答案.pdf VIP
- T_CACM 1584-2024 卑惵中医诊疗指南.pdf VIP
- 2025年第二批陕西延长石油集团所属单位内部遴选及选聘81人笔试参考题库附带答案详解.docx
- T_CACM 1585-2024 产后神志异常中医诊疗指南.pdf VIP
文档评论(0)