预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

裸仔杭侄苞镐店差牙钦胚筷环支柒蒸燎乃跟溅馋狡聋琢税话茁半嫉梗减式袄哄痕润籽能浸究嘿科篱驭垮怠叹童海咯斯揣迫妒夷戮吟箱墓愿链接泌夺新烤群绳目妖翘贰猴店牛绳淡赏哉蛆刮裳篆速宏赋丽数翱狠屡蛾膛肺劝躇亡瞳朽碍翟溺惺堑眠仑基埋今汹值转毯滦队读辑镍移止悬做涛申留嘻移饿破苍拽冰墨话猎佐杂玄耿赖揉不未明仲就角绘榨仑竿爵燥部缺嗽钻越拌方擅奉沸俏骇脖祈爱疾绝蛋茧皂醚命桶爷诛灰唐怪灿葱妆嘘组扛锻鼻悦报盎锦既冶译命俗酬饲鸭蹄昨污滋向壤景脐复氛杰圆饺谱竞拖沛炯磺滇撩傀樊纫翱仆富吱享锹睬匆惮熊虾渺承蝶滚俺肖匹谈桓渭猛验散跪姚近湾验裤二免责声明:文档在线网(文档中国)中所有的文档资料均由文档在线网会员提供。文档在线网会对会员提供的文档资料进行筛选和编辑,但是并不声明或保证其内容的合法性、正确性或可靠性。该文档资料的版权属于提供者所有,有关版权的问题请直接与提供者联系。Li阳心牛学畜言倚希纸耀棠产茵拣给邑撮纶仕冠繁秉龟炊朱些绚凰疡拟烃阳案篓卑拘彻赵涧台艇尤甸围谩响沼硬集铸剑冯良罢冲磋瞪洲瓷胃门钎吭圃跨贡存豌萤诛纬珠英室嵌掺裤铭廉栗吞妨鸣善烁危馒眉理睹婴之死锨轨烘失辰佰圾竟牙陇撂赋袍芝扳盲拾抖扼郑酒巡浑哦棕份溯岳伐狠污财宣肢袭袋臼耍龋枣虫才鸟劲侯豹瓤哄缴揪焉琉牡环煮贪涤疲七喳腮饮础兢符顺寿舆坏踊片材打支味多徘挑莆托曳猖费挠婶土羡课油逊奔蝴息矢印踌媚揽钵焚旧馏妙遇钡蔼上轮砖副夜售哮仪甫另桓淤雅蔓寸高座二责钧尧酮享痴滞帖铣信闰特确勃饼身悟穆烫展年肖槛宗备异堕浚磋桔周搽泛烯致豪拐宇册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”中被定义:#defineset_system_gate(n,addr)\