版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简析linux内核的执行流程从bootsect.s到main.c(内核版本0.11)Linux启动的第一阶段(从开机到main.c)3个任务:A、启动BIOS,准备实模式下的中断向量表和中断服务程序。B、从启动盘加载操作系统程序到内存。C、为执行32的main函数做过渡准备。内存变化如下:、0xFE000到0xFFFFF是BIOS启动块,其中上电后第一条指令在0xFFFF0。、而后0x00000到0x003FF总共1KB存放中断向量表,而接下去的地址到0x004FF共256B存放BIOS数据,从0x0E05B开始的约8KB的内存中存放中断服务程序。、利用BIOS中断0x19h把硬盘的第一扇区bootsect.s的代码加载到内存中,即0x07c00处,后转到该处执行。、将bootsect.s的代码复制到0x90000处。、利用中断0x13h将setup.s程序加载到内存0x90200处。、再将剩余的约240个扇区的内容加载到0x10000~0x2EFFF处。、开始转到setup.s处执行,第一件事就利用BIOS提供的中断服务程序从设备上获取内核运行的所需系统数据并存在0x90000的地址处,这时将原来bootsect.s的代码覆盖得只剩2Byte的空间。、关中断并将系统代码复制到0x00000处,将原来放在这里的中断向量表与BIOS数据区覆盖掉,地址范围是0x00000~0x1EFFF。同时制作两表与两寄存器。开地址线A20,寻址空间达到4GB,后对8259重新编程,改变中断号。、转到head.s(大小是25K+184B)执行,执行该程序完后是这样的:0x00000~0x04FFF:页目录与4个页表,每一项是4KB,共20KB;度0x050设00~0x部05400积:共1KB垦的空间是软碌盘缓冲区;搂0x054府01~0x涝054b8绘:共184证B没用;篇0x054死b9~0x别05cb8看:共2KB笨的空间存中邪断描述符表阻;蛋0x05c捧b9~0x想064b8砖:共2KB割的空间存全跑局描述符表筑;爆之后就是m沟ain函数存的代码了!继第二阶段、冰从main末.c函数到趴系统准备完煌毕阶段。翠第一步:创青建进程0,畜并让进程0询具备在32钳位保护模式块下载主机中嗽的运算能力眼。流程是:歉复制根设备谱和硬盘参数蜜表肚(main颜.c中的1坊02、11殊0、111倡行)属进滚市孔物理内存规筹划格局膏(main掠.c的11法2行~12半6行,其中水有恒哀哨rd竞_init英函数定义在摇kerne哲l/ram喇disk.队c中,此函态数用于农钟铲资零虚拟盘初始投化;而me摇m_ini修t函数是用担于内存管理做结构羞返赏绍般初始化,定柴义在mem英/memo多ry.c中宰,该函数页君面使用劳劈虚拟盘设置脱与初始化言焰次数均设置壁成100,皂然后再依据趴主内存的鸭碑歼稠碎郊抛起始位置和反终止位置将洲处于主内存键的所有页面衣的使妻愈关柄谈吗用次数全部胆清零,系统羞以后把使用季次数为0的愈页面视踏阅叫格派视为空闲页陪面。)位内存管理结技构mem_治map初始痒化闯鱼异常处理类画中断服务程周序挂接阵(授在main裕.c的12卖7行,tr惨ap()函荐数定义它性傍ker仙nel/t法rap.c她,目的是将袋各种中断与列中断描述符胡表挂种辩偶研鞠熟接。)抱初始化块设亿备与字符设产备请求项结丽构构(在mai狸n.c的1危28、12链9行,技弓今奖杨识奴blk_d姿ev_in疗it()狭运定义在送缓探闭娇路灾叨倡潮辣伟干kerne贱l/blk谱_dev/睬ll_rw通_blk.宾c,妇chr_d痰ev_in鸟it()定种义在ker丹nel/c鹅hr_de周v/tty摆_io.c按)铃将串口与显艳示器外设的贺中断服务程急序挂接洋(在mai恶n.c的1壶30行,离瞎胡按仿盘此暴tty_i懂nit()距定义在ke换rnel/绞chr_d此ev/tt装y_io.滩c)亡开启时间设不置芳(在mai盛n.c的1御31行,t展ime_i卷nit()罗定义于ma旨in.c函侧数贯元钻员副思砍76行st滴artup少_time单)苦系统开始激披活进程0调(经在main筹.c的13盖1行,sc渗hed_i挣nit()长定义在ke泳rnel/监欢厦酱舌回帖麦sched熔.c函数中园,该函数实持现进程相关涝事务设置聚依据时钟中木断设置,系宾统调用服务矩程序挂接。巨系统调用函陷数是对用户负程序的最基既本支持,利皮用的是惠进程相关事窄务初始化设透置脖枝克疤系统调用软组中断,详细割见下面讲用误台私亏雁躺呢桶溪屯肢的。)束时钟中断设犁置税系统调用服杜务程序挂接泡初始化缓冲衬区管理结构沈(在mai导n.c中1扬33行,储虹扁极友愁运忙房梯肌buffe券r_ini让t(buf适fer_m济emory衰_end)睬定义啄盒千税定忌巾凳鼓巧哲fs/bu数ffer.稳c)充初始化硬、败软盘略(main胖.c中13孕4、135允行,hd_湿init与钳flopp哨y_ini夕t定义骂念启末影既于kern这el/bl党k_drv扎/hd.c赵和kern敲el/bl毙k_drv仁/flop道py.c)黑开中断厚沉春税接桌腔(main歪.c中13唯6行,st猾i())登第二步:以康进程0为母惩本创建进程钉1,使进程病1不仅仅具灰备进程0所外拥有的能力同,而且还能镇以文件的形争式与外设进煎行数据交互竿。流程是:滥操作系统为忌进程0创建苍进程1做准岩备度main.赤c中137残行,mov示e_to_推user_握mode(绝)定义在i馆nclud让e/asm怪/syst娘em.h,执实现从与内核态到用脆户态。进程光0正式开始槐执行,而后例执行mai也n.c的1摔38行的盟“驶if(!f野ork()将)桑”裳,开始创建献在进程槽中代为进程1申咏请一个空闲司位置并获取节进程号瞧进程1,此形时将执行u荐niste合d.h中的所sysca昂ll0宏函废数去,得到一个咱编号,对于惩fork函掩数,其值是绞2,具体斯在这个程序荒中的第62拘行有定义,株然后执行软芬中断僚复制进程0猪的信息之前许,先将一些司数据压栈雹泪及瘦呼众三,进入系统评调用阶段,愿跳到内核态菠,执行取粉岭块梅瓣昂刃详kerne营l/sys梦tem_c陆all.s定中的代码,血将一些寄存输器的也方艳文首灿环值压栈后,钢通过刚才在另unist狮ed.h中横给eax赋胀值川初步设置进先程1管理结精构涨矮艳的2偏移值蛋在系统调用钻sys_c破all_t擦able窝得汽我忽捕崖插中找到sy定s_for叶k函数,跳屿到该函数执嫁行。进话易匀姓乱脆冈辆入后首先申痰请一个空闲箱位置并获取号进程号。抵这同样在s抹ystem前_call凑.s函数中租的sys_驼fork址进程0创建揪进程1的过惠程中发生时墙钟中断沈驴中量的_fin垮d_cop制y_督姑记缠寺呼桂网俱proce贩ss,再跳烧到该函数的盲定义处ke桐rnel/彻fork.肃c中,后返京回到sys语_fork萝中,在呀从中断返回变县授复制进程信皆息前,再将笨一些数据压满栈,盐千峡糕窃溉链龙险泻此时有一个怎寄存器的值答和前面的不扎一样,敌那就是ea岗x,此时是缘1,它从t搞ask[6活4]中惜得到的。之段后执行co意py_pr形ocess倾,跳到迁调整进程1漠的管理结构淡订催定义处ke羞rnel/碎fork.酷c中,设置吹进程1的办唱坡夏陈渴匪蔬白枪管理结构。较假如此时发式生时钟中断乱,系统坝会响应并执概行kern仇el/sy馅stem_缘call.肢s函数总中的tim叔er_in污terru舱pt定义处右,先压栈后寄设置进程1取的线性地址号空间及物理遇页面葵歌驾掠进入ker牲nel/s坚ched.巧c张的do_t婚imer函疮数,别忘了演此时仍在进茶程阻0执行,然慎后便发现时椒间片还没完斤,所以摔跳出,并返子回到ret浇_from讲_sys_长call。兆这是柱继续调整进瑞程1的管理免结构正提世在kern烂el/sy馋stem_洁call.讲s中定义的强,毯接着直接将肢刚才的压栈沫数据出栈,锤继续完成盲刚才创建进饿程1的任务猫,即在fo爱rk.c中剃继续摔调整进程1穴的管理结构阀,同时设置紫进程镇进程0准备欠切换到进程厅1咐今1的线性地忘址空间及物窗理页面,直尤到秃执行到这条役语句辱“左p->st将ate=T谅ASK_裙RUNNI叠NG;re男turn鄙last_堆pid;推”遗,标志着值系统切换到煌进程1执行树泽疾进程1创建重完成。后跳亮出copy征_proc份ess.c遇函数,返回值到syst叫em_ca拆ll.s,考将压栈的微进程1开始拒执行俭喝园的寄存器值啦出栈,此时衔eax是1惑。后中断返掘回土行黎塑民柱烘很悼,进程由从京内核态变为凤用户态,即予到了翅称偏陡款厘碰节收饭unist酿ed.h的笨“蔬if(_r疑es>=0侍)皂”均这条指令中玩,买_res的缸值就是ea鞋x的值,一厕判断成立,写就返傻进程1开始乏以数据块的观形式操作硬滚盘撤炸什回该值。最侦后回到了m饮ain.c许岁奴以损顷饮络醒的歌“领if(!f们ork()角)寄”谎中,一判断六不成立,跳奥出执誓笋梨耗复任挂技行下一条指脏令鞠“朵for(;井;)pau报se();膀”误,同理简Pause炸函数也和f主ork函数借一样,这里雀就不给将找到的缓疲冲块与请求蹲项挂接雁群意讲了,进入供sys_p充ause(殖)后将进程跨0韵置为可中断患等待状态,朽并调用在k蛋ernel丸/sche御d.c定义遇的sche握dule(荐)函数切换吊进程。脊进程切换中数断返回后执栏行了第一条吼语句膛将请求项与庄硬盘处理函腐数挂接受饼册是献“陆if(_r久es>=0拦)刚”认,一判断,惩魄剪土抓叔垫配犁刚存的ea嗽x值为0,磨返回到机“循if(!f导ork()滔)盐”酱判断为真,宗执行ini恋t()函数亭,这在ma冷in.c董定义。进入莫init.渠c后其程序青执行流程见客附录,做进行硬盘读联盘前的工作渐准备吴砌各个程序执葬行目的正如菌左边写的一样。蜂给硬盘下达妄读盘命令露进程1由于晕等待读盘操愚作挂起角系统切换到锯进程0执行仓进程0执行充过程中发生浓硬盘中断千硬盘中断训服务程序响喝应后,进程乘0继续执行状再次响应硬腐盘中断,并给唤醒进程1即读盘操作碍完成后进程求1继续执行不进程1继左续设置硬盘续管理结构泛进程1获肯取软盘超级旱块,为加载草根文件系统校做准备垄进程1备吹份超级块数吐据循进程1将俗根文件系统损从软盘拷贝雪到虚拟盘抢进程1开始斗加载根文件想系统咏进程1准备恋加载根文件这系统超级块段进程1继续崇加载根文件蜂系统是进程1准备熊获取根目录晨节点过进程1加载插根目录节点乞进程1结束江加载根文件谣系统的过程记进程1与内踢核文件表挂贵接,为打开蛾文件做准备沟确定打开操魂作的起点饰获取枝梢i鞠节点浊dev目录隆文件的i节岁点花确定dev墙的目录文件辆i节点为枝馒梢节点江继续返回枝钻梢i节点巴查找tty蜂0文件的i戚节点洪将tty0鸣设备文件的锦i节点,返漫回给sys材_open瞒系统调用堤分析tty胜0文件i节锤点刊设置文件管尾理结构并返休回给用户进莫程匆进程复制t番ty0文件杰句柄及进程1继续崭复制tty客0文件句柄粉第三步:以为进程1为母朽本创建进程膝2,使进程组2在全面具桐备进程1所概拥有的能力笛和环境的基赏础上,进一暑步具备支持朝”贴人机交互佩“立的能力,最帝终实现准备扔阶段完成。越流程如下:糟进程1准备站创建进程2泄拐与进程0创惜建进程1一布样,创建进恢程2,复示臣失罗碗制进程1仔的管理结构就,复制页表飘、页目录竟莫府绝再项等,创驶建进程2后臂即执行到i辽nit/m探ain.c昨中柔复制进程2壮的管理结构判并进行调整旗枝领176行与耀186行,谨分别是:i紫f(!(p禾id变诵帆浊陕=for咏k())中萝子进程即进箭程2执行,览而父进程(列搏渠训蛛进程1)校执行186悬行的if(组pid>0誓),父进程编调整进程2拢管理结构中桐与文件有关兆的内容绢镜进入wai将t函数,等健待!埋摧归豪弹进入wa主it函数后瞎还做了一些叼动作:首先义糖滤艳惊查找自己耀的子进程,急确定是进程殊2后,判断像进程1执行头过程中发生寿时钟中断采妙进程2是否课处于终止状工态或是赏辉恶家容僵死状态践,一判断不哗是,就将进激程1设置为虏辩座挖寻可中断等按待状态,继挽而调用sc仅hedul让e()函数捉进程1从时闪钟中断返回婆轿准备切换到寿进程2执行亡切换掌到进程2。糖部竭床皇进入进娘程2后开始箱加载she洽ll程序。假首先执荒繁跃微偷行ini喂t/mai燥n.c中1吧80行的定“而close饮(0);式”扒,就是求进程1查找良它自己的子慈进程访栗解除fil醋p[20]探与file贩_tabl顽e[64]逼的第一项纠俱场关系,这是寨从进程1继却承过来的。爬然后鹊暗浅天突精是强“呢if(op择en("e共tc/rc殃",O_R遮DONLY必,0))阔”究,拌对进程2的策状态进行处纲理店梁其中是将进岔程2的管理株结构指针表京filp掀佳场畏缠[20数]的第一项辞与file搂_tabl由e[64]革的第一项建欧立下否宽霜忆一个关眠于资源配置允的文件,而妹后再执行凉切换到进程鞠2执行依衫execv适e函数,并创映射到sy凶s_exe子cve系统窝调用。受咳维追蚁再调用锈do_ex声ecve函质数,目的便剥是将参数挥停涝宜树与环境熔变量加载到耍主内存的页拾面中去,中肾断薄为打开/e妨tc/rc传文件做准备生闷返回,但此炸时在该函数暑里已经将E喊IP的链希嘉胆味值指向了夏shell床程序的入口即地址,所以纳返回后忍哨捎愤柔执行的是增shell跪的第一条指团令,但这时梁却发现安进程2打开耽”劈/etc/揪rc疯“胸配置文件贺塞内存中没有恢这一条指令掌的映射,嚷辉约厘设所以发生逃“皇缺页中断功”快,然后调用胀page_奶fault谦很冤浮谈函数中的d姥o_no_熄page。踪通过压栈为踪加载she来ll文件做俭准备罗为参数和环朝境变量设置掩做准备宿得到she扔ll文件i趋节点街为加载参数婚和环境变量谅做准备竹根据i节点停,为she貌ll文件进念行检测查检测she视ll文件头侨备份文件头且并进行分析侦对shel贩l文件进行赴进一步分析鹅拷贝参数与钓环境变量塘调整进程2纳的管理结构滚继续调整进杨程2的管理戴结构之释放进程2黎继承的页面削检测协处理箩器眼调整she舌ll程序所杏在的线性地丧址空间挂为shel痒l程序准备眯参数与环境勉变量垫继续调整进掌程2的管理挎结构饼调整EIP渣,使其指向乞shell秧程序的入口融地址陕Shell技程序执行发豆生缺页中断档缺页中断中歇shell尺程序加载前临检测削为即将载入睛的内容申请础页面温为shel椅l载入新获剑得的页面酱根据she混ll进程的蛇情况,调整魂页面内容三将线性地址钢空间与程序配所在的物理摔页面相对应检溉需荷锹下Shell站程序开始执侦行,执行的撤内容是/e银tc/耐怕栋速惭r袜c里面的命偶令,其中便刚有创建up登date进逗Shell唉进程准备创横建upda防te进程毛程,该进程湿是为同步缓统冲区与硬盘烟而伴闻饺奋视袭设的进程目,它会时不雪时的进入睡兄眠状烫期中剥土蕉态,经过火一定的时间痛再被唤醒然勾后更新惰进程2开始扫执行/et俭c/rc文帮件传镇缓冲区与硬州盘的数据。发之后创建完狼成后投段柜放萝Shel争l进程退出碧,退出操作置当然得释放玻它占脂洋贴尖级销用的资源或参者是清除掉壤,或者是将弹使用次数担准备加载u室pdate位进程跑触减1。然后益为进程1找饼到一个子进呼程,业盆启妇旁那就是up客date进地程了,发信炊号告诉进程拜1状带食秩浴shell达进程退出,跪进程1唤醒尚执行,重新旁进入语Shell军程序检测缺“划etc/r锄c俯”显文件仍璃main.然c函数中执芹行180行敬后面的程序皮能委膏碧再次创建使shell饿进程,现在粉进程号是4叶,同样秒悦厌俭亚与之前灵的一样,但夸此时稍微有喷点不同的是莫Shell秒进程退出环咳帝open政的参数是/迈dev/t溜ty0,这野是一个设备绞洞表掏文以件,与之前溉的/etc蜡/rc文件涝不一样,致呼使这次避伙斯灰描创建完毕后渐并不会退出琴shell助进程了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版担保居间服务线上线下融合合同3篇
- 二零二五年砂石料采购合同2篇
- 二零二五版国际教育服务合同范本及学生权益保护条款3篇
- 二零二五年度变压器安装与环保排放标准合同3篇
- 样板间装修工程2025版知识产权合同3篇
- 二零二五版单位食堂餐饮服务设施租赁合同3篇
- 二零二五年辣椒种植与加工一体化项目合同3篇
- 二零二五版电子商务移动应用开发与推广合同2篇
- 二零二五年酒店会议室装修与设备安装服务合同3篇
- 二零二五版公交公司司机岗位责任与权益保障合同3篇
- 2024年《药物临床试验质量管理规范》(GCP)网络培训题库
- 新华健康体检报告查询
- 2024版智慧电力解决方案(智能电网解决方案)
- 公司SWOT分析表模板
- 小学预防流行性感冒应急预案
- 肺癌术后出血的观察及护理
- 生物医药大数据分析平台建设-第1篇
- 基于Android的天气预报系统的设计与实现
- 冲锋舟驾驶培训课件
- 美术家协会会员申请表
- 聚合收款服务流程
评论
0/150
提交评论