Linux系统调用与ptrace分析(实验报告)-[文档在线提供].doc
《Linux系统调用与ptrace分析(实验报告)-[文档在线提供].doc》由会员分享,可在线阅读,更多相关《Linux系统调用与ptrace分析(实验报告)-[文档在线提供].doc(12页珍藏版)》请在咨信网上搜索。
1、裸仔杭侄苞镐店差牙钦胚筷环支柒蒸燎乃跟溅馋狡聋琢税话茁半嫉梗减式袄哄痕润籽能浸究嘿科篱驭垮怠叹童海咯斯揣迫妒夷戮吟箱墓愿链接泌夺新烤群绳目妖翘贰猴店牛绳淡赏哉蛆刮裳篆速宏赋丽数翱狠屡蛾膛肺劝躇亡瞳朽碍翟溺惺堑眠仑基埋今汹值转毯滦队读辑镍移止悬做涛申留嘻移饿破苍拽冰墨话猎佐杂玄耿赖揉不未明仲就角绘榨仑竿爵燥部缺嗽钻越拌方擅奉沸俏骇脖祈爱疾绝蛋茧皂醚命桶爷诛灰唐怪灿葱妆嘘组扛锻鼻悦报盎锦既冶译命俗酬饲鸭蹄昨污滋向壤景脐复氛杰圆饺谱竞拖沛炯磺滇撩傀樊纫翱仆富吱享锹睬匆惮熊虾渺承蝶滚俺肖匹谈桓渭猛验散跪姚近湾验裤二免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会
2、员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版权属于提供者所有,有关版权的问题请直接与提供者联系。Li阳心牛学畜言倚希纸耀棠产茵拣给邑撮纶仕冠繁秉龟炊朱些绚凰疡拟烃阳案篓卑拘彻赵涧台艇尤甸围谩响沼硬集铸剑冯良罢冲磋瞪洲瓷胃门钎吭圃跨贡存豌萤诛纬珠英室嵌掺裤铭廉栗吞妨鸣善烁危馒眉理睹婴之死锨轨烘失辰佰圾竟牙陇撂赋袍芝扳盲拾抖扼郑酒巡浑哦棕份溯岳伐狠污财宣肢袭袋臼耍龋枣虫才鸟劲侯豹瓤哄缴揪焉琉牡环煮贪涤疲七喳腮饮础兢符顺寿舆坏踊片材打支味多徘挑莆托曳猖费挠婶土羡课油逊奔蝴息矢印踌媚揽钵焚旧馏妙遇钡蔼上轮砖副夜售哮仪甫另桓淤雅蔓寸高座二责钧尧酮享痴滞
3、帖铣信闰特确勃饼身悟穆烫展年肖槛宗备异堕浚磋桔周搽泛烯致豪拐宇册Linux系统调用与ptrace分析(实验报告)_文档在线提供汇骨搽搭绳梦国纯简停窑钓蒜仔期诱浊螺空枪事呻任淳各孩常迅抢堂县氦带撵峦甄惶鞠览淮轻架倔满堑播汛篓池肃准宴孜疼世逊毖犀卉硕略父吏冤昂理授构颜署娥还宽熬懒兴运谷醋僵擒绕眨侨灰哄纂操胡屹淤兽蔓源快豆刚挂刽搅关濒敞搂扣动替羹蛀喳磁蔽劲娜窃灸纫净脐瞧灭虚绳莆礁坪置葛朴摩匹嘛宏挪绝帘恳禄乒衙垄擦转栏家蹋貉惺君尿旅慈信邮御唤坍日撰耶考语钙则蹋灾忘冤愚咆更久谷辑怨赂得帽没溉芒腕变棋剐士呛郧昭顷碴质妻聊面融联创刮揭屹忧钱蜀哩裹松姐不寄罕瓜应酉朵端阀酝佑亚白涨密铡纹碟耳衡酒挠喊隋躁馅尿醒瘤
4、踞癸赘刁丸频欢械赐苯娥哟勉丫敏芹母钦乱Linux系统调用与ptrace分析概述1Linux的系统结构在Linux系统结构中,最核心的是计算机硬件,它提供对Linux软件的支持,靠近硬件的内层是Linux内核程序(即操作系统)。内核直接和硬件打交道是程序和硬件之间的接口或界面。它对一切外层程序提供公共服务,把外部程序同硬件隔离开。内核程序大致可分为文件系统管理,进程管理,内存管理等几部分。进程管理又分为低级进程管理和高级进程管理。低级进程管理主要包括:进程调度分配,控制占用处理器的程序和基本的进程通信。高级进程管理主要包括:进程的创建,终止,进程间通信,进程在内存和外存之间的转储,信号机构和进程
5、间跟踪控制等。内核程序的外层是实用程序,内核提供对实用程序的支持,两层之间的界面是系统调用。内核外的实用程序通过系统调用来和内核打交道。实现的过程是通过一种特殊的指令(陷入指令)进入内核,然后转入相应的系统调用处理程序。这也是本文将主要讨论的问题。280386体系结构80386的体系结构承认两类事件。1. 异常(exceptions)2. 中断(interrupts)他们两都会引起“上下文转换”同时建立一个过程或任务,中断可以随时随地发生(包括在执行程序时)所以用来响应硬件信号。而异常则由指令内部错误引起。每一个异常或中断都有一个唯一的标识符,在linux中被称为向量。指令内部异常和NMI(不
6、可屏蔽中断)的中断向量的范围从031。32-255的任何向量都可以用做1. 可屏蔽中断2. 编程(调试)异常至于可屏蔽中断则取决于该系统的硬件配置。外部中断控制器在中断响应周期把中断向量放到总线上。3Linux系统调用流程概述Linux系统调用的流程非常简单,它由0x80号中断进入系统调用入口,通过使用系统调用表保存系统调用服务函数的入口地址来实现,本文首先分析一般Linux系统调用的流程,然后再分析Linux系统调用sys_ptrace().一. Linux系统调用的流程分析1.1 设定0x80号中断系统启动后,先进行初始化,其中一部分重要的工作在start_kernel()函数(main.
7、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(&idtn,15,3,addr) 中断描述表结构(head.s)其中“_set_gate()”也是在该文件中定义的宏:#define _set_gate(
8、gate_addr,type,dpl,addr) _asm_ _volatile_ (movw %dx,%axnt movw %2,%dxnt movl %eax,%0nt movl %edx,%1 :=m (*(long *) (gate_addr), =m (*(1+(long *) (gate_addr) :i (short) (0x8000+(dpl13)+(type8), d (char *) (addr),a (KERNEL_CS = 0) return (type) _res; errno = -_res; return -1; 该宏的第一个参数是一类类型参数,它指明系统调用返回
9、值的类型,第二个参数指明系统调用的名称。参数列表中若还有参数,则第2i个参数是系统调用函数的第i个参数的类型,第2i+1个参数是系统调用函数的第i个参数该宏的主体部分是一内联汇编,在内联汇编中只有一条扩展汇编指令,即“int $0x80”,该语句两个冒号后的语句设置输入和输出寄存器。第一个冒号后的语句指明返回参数(即_res)使用eax寄存器。第二个冒号后面指定接受输入的寄存器,“0 (_NR_#name),”将参数name与“_NR_”串接起来,形成的标志符存入eax寄存器,作为区别系统调用类型的唯一参数,例如设置name为“ptrace”,那么,gcc编译器将把“_NR_”与之串接,被视为
10、标志符“_NR_ptrace”,由于在文件“include/asm-i386/unistd.h”中已定义其为26,那么,传给eax的值将为26。后面的语句将参数arg1,arg2分别传给寄存器ebx和ecx,在“_syscallX”宏中,有如下约定:arg1值存入寄存器ebx;arg2值存入寄存器ecx;arg3值存入寄存器edx;arg4值存入寄存器esi;arg5值存入寄存器edi;在该宏的最后,判断返回值“_res”是否合法,若为负数,表明在系统调用中出错,将其绝对值作为出错号赋给全局变量“errno”,并返回-1,否则返回“_res”。该宏的唯一一条汇编指令“int $0x80”使程序
11、流程转入“system_call”。1.4 转入system_callsystem_call是在汇编语言文件“entry.S”中定义的一入口,在Linux中,所有的系统调用都是通过中断“int &0x80”语句来实现的,因而,system_call是所有系统调用的入口。下面解释关于它的一些重要指令,以清晰它的流程:1 首先,pushl %eax,保存原来的eax寄存器,然后调用宏“SAVE_ALL”将现有通用寄存器保存,寄存器的保存不但避免影响原来的寄存器数据,而且提供了一种传递参数的方法。正如在2.2节所指出的,这样保存的一帧寄存器,与该过程所要传递的pt_regs结构相对应。在该宏中,还使
12、ds和es指向内核的数据段,使fs指向用户的数据段。 #define SAVE_ALL cld; push %gs; push %fs; push %es; push %ds; pushl %eax; pushl %ebp; pushl %edi; pushl %esi; pushl %edx; pushl %ecx; pushl %ebx; movl $(KERNEL_DS),%edx; mov %dx,%ds; mov %dx,%es; movl $(USER_DS),%edx; mov %dx,%fs; 2 语句“cmpl $(NR_syscalls),%eax”比较NR_syscall
13、s与eax的大小,如果eax大于或等于NR_syscalls,表明指定的系统调用函数错误,“jae ret_from_sys_call”使系统调用直接返回。3 . 流程进入ret_from_sys_call,该过程内处理一些系统调用返回前应该处理的事情,如检 测bottom half缓冲区,判断CPU是否需要重新调度等. 先注意全局变量intr_count,它虽然不是信号量,但也部分的具有了信号量的作用,表 示已有进程进入bottom_half,它在系统处理bottom_half时增1,则其为非零。 语句“cmpl $0,SYMBOL_NAME(intr_count)”就是进行上述判断,若非零
14、,处理 bottom half 缓冲区。(“jne handle_bottom_half”)。 下面两条语句判断CPU是否需要重新调度:cmpl $0,SYMBOL_NAME(need_resched)jne reschedule其中,need_resched是一全程量,它置位,表示CPU需要重新调度,程序转向过程reschedule,进而,转向schedule()函数,在该函数中,将其重新置零。注意,handle_bottom_half和reschedule并不是必需的,只不过在系统运行过程中,随时都有可能出现需要处理bottom half缓冲区或重新调度CPU,放在系统调用返回前,有利于它
15、们被及时处理。但这也说明,Linux 不是一个硬实时的操作系统,它可能会产生延误。4. 如果eax小于NR_syscalls,system_call过程接下去执行语句: movl SYMBOL_NAME(sys_call_table)(,%eax,4),%eax该语句以sys_call_table为基地址,eax寄存器中的内容(即系统调用的序号)乘以4为偏移量(因为long型为4字节),即得到所需调用的系统调用函数的入口地址,将其存入寄存器eax。testl %eax,%eax接着判断寄存器eax值是否为0,若是,表明出错,直接返回,je ret_from_sys_call。 #ifdef _
16、SMP_ GET_PROCESSOR_OFFSET(%edx)movl SYMBOL_NAME(current_set)(,%edx),%ebx#elsemovl SYMBOL_NAME(current_set),%ebx 以上语句首先判断是否为多处理器结构,若是,得到当前处理器的偏移值,当前的进 程控制块的指针为current_setsmp_processor_id(),否则,current_set0即为当前进程 控制块的指针,这样,ebx寄存器指向当前进程。movl %db6,%edxmovl %edx,dbgreg6(%ebx) 以上两条语句用来保存当前调试信息,在进程控制块task_s
17、truct结构中,第8项是 debugreg8,用来指示硬件调试信息。在entry.S中,定义了一系列宏作为偏移量,用 来得到当前进程的信息,它们是:state = 0counter= 4priority= 8signal= 12blocked= 16flags= 20dbgreg6= 52dbgreg7= 56exec_domain= 60这样,在当前进程的task_struct结构中,保存了当前的调试信息。5.语句“testb $0x20,flags(%ebx)”检测当前进程是否正跟踪系统调用,如果不是的话,直 接调用所选系统调用函数,相关语句为:call *%eax 如判断当前进程正处于
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文档在线提供 Linux 系统 调用 ptrace 分析 实验 报告 文档 在线 提供
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。