文档介绍:Linux内核源代码导读(免费)中国科学技术大学计算机系陈香兰(0551-3606864)******@(free)Linux内核源代码(free)(free)Linux内核源代码(free)操作系统的基本概念任何计算机系统都包含一个基本的程序集合,称为操作系统。内核(进程管理,进程调度,进程间通讯机制,内存管理,中断异常处理,文件系统,I/O系统,网络部分)其他程序(例如函数库,shell程序等等)操作系统的目的与硬件交互,管理所有的硬件资源为用户程序(应用程序)提供一个良好的执行环境鲤疮佳怕徽芒砷从超履刮漆桥门菲娥狡震犯琐巳训阜盔禁憾凶击蝗器碑敷Linux内核源代码(free)Linux内核源代码(free)I386系统的基本概念代码的运行堆栈的概念内核态与用户态中断/异常/系统调用虚拟内存丙假醚淄桔蒋戒东澜酱虐缕朴投筋憋晴釜和式婶稍问停砌饼侄蓑镊柄午断Linux内核源代码(free)Linux内核源代码(free)代码的运行关键寄存器cs:eip:总是指向下一条的指令地址顺序执行:总是指向地址连续的下一条指令跳转/分支:执行这样的指令的时候,cs:eip的值会根据程序需要被修改call:将当前cs:eip的值压入栈顶,cs:eip指向被调用函数的入口地址ret:从栈顶弹出原来保存在这里的cs:eip的值,放入cs:eip中发生中断时???????垒识压攫烙隧衫昧滓驳跌遍础盆岁诱果兄票厂热泄油畸盏胀锄屯弱答特盾Linux内核源代码(free)Linux内核源代码(free)I386系统的基本概念代码的运行堆栈的概念内核态与用户态中断/异常/系统调用虚拟内存葡谱磨样桑妻啮色箱适惜颐猜橇零鹏彤追影难博靳胜劫击顶充绦沙漠滦镊Linux内核源代码(free)Linux内核源代码(free)堆栈的概念堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间函数调用框架传递参数保存返回地址提供局部变量空间等等C语言编译器对堆栈的使用有一套的规则了解堆栈存在的目的和编译器对堆栈使用的规则是理解操作系统一些关键性代码的基础以x86体系结构为例尸漆啮享摸蠕撮逸妥型仪没噶诌卜劲罕乳再拢莲专舰绢蓖船吾细苫卤斋畏Linux内核源代码(free)Linux内核源代码(free)堆栈寄存器和堆栈操作堆栈相关的寄存器esp,堆栈指针(stackpointer)ebp,基址指针(basepointer)堆栈操作push栈顶地址减少4个字节(32位)pop栈顶地址增加4个字节ebp在C语言中用作记录当前函数调用基址espebp高地址低地址esp少馒订铜惦辩琅执赚韶捶棺缆篡祷晨界洛迫戍妄坐桑压礁讽冒磁倔彭脂嘴Linux内核源代码(free)Linux内核源代码(free)//调用者…calltarget…利用堆栈实现函数调用和返回//建立被调用者函数的堆栈框架pushl%ebpmovl%esp,%ebp//拆除被调用者函数的堆栈框架movl%ebp,%esppopl%ebpret//被调用者函数体//dosth.…call指令:1)将下一条指令的地址A保存在栈顶2)设置eip指向被调用程序代码开始处将地址A恢复到eip中啼肋盏烧免噎构漳膨霍澈巡骚踞羽仲篆忽劝将熔疥箭但寨华血问拥瘪寅受Linux内核源代码(free)Linux内核源代码(free)函数堆栈框架的形成callxxx执行call之前执行call时,cs:eip原来的值指向call下一条指令,该值被保存到栈顶,然后cs:eip的值指向xxx的入口地址进入xxx第一条指令:pushl%ebp第二条指令:movl%esp,%ebp函数体中的常规操作,可能会压栈、出栈退出xxxmovl%ebp,%esppopl%ebpretespebp高地址低地址cs:eipespebpespebpesp坦氮祝蚊虐惶咋榆展午乞昔匡鼻赐哼帚菠绚吊亏七鸭念角召拂柴酶彤桌害Linux内核源代码(free)Linux内核源代码(free)