zoukankan      html  css  js  c++  java
  • Linux内核分析——第一周学习笔记

    20135313吴子怡.北京电子科技学院

    chapter 1 知识点梳理

    第一节 存储程序计算机工作模型

    1.冯诺依曼体系结构:即具有存储程序的计算机体系结构。目前大多数拥有计算和存储功能的设备(智能手机、平板、计算机等)其核心构造均为冯诺依曼体系结构

    a.从硬件来看:CPU与内存通过主线连接,CPU上的IP(可能是16、32、64位)总指向内存的某一块区域;IP指向的CS(代码段)也在内存中;CPU总是执行IP指向的指令。

    b.从软件来看:API(应用程序编程接口,与编程人员)与ABI(程序与CPU的借口界面) 是两个比较重要的软件接口

     

    2、CPU可以抽象成一个for循环,总是从内存中执行下一条指令。

    内存:保存指令数据
    CPU:解释执行指令、数据

    内存与CPU通过总线连接。

    3.其他

    API:应用程序编程接口
    ABI:二进制(指令编码)接口
    

    4.例子

    例如:32位计算机X86,EIP指向内存的某条指令
    1、自动加到下一条指令,数值加一
    2、可被其他指令修改,如CALL,RET,JMP等。
    

    第二节 X86汇编基础

    一、X86 CPU的寄存器

    16位寄存器:AX,BX,CX,DX,BP,SI,DI,SP等

    32位寄存器:EAX累加寄存器,EBX基址寄存器,ECX技术寄存器等 前面加上E的均为32位寄存器。

    二、mov指令及几种内存寻址方式

    1、movl

    a.寄存器寻址%eax,%edx

    即操作寄存器,与内存无关,相当于eax=edx

    b.立即寻址$0x123,%edx

    123这个16进制数值放进寄存器edx中($表示立即数)

    c.直接寻址0x123,%edx

    123这个地址指向寄存器edx(没有$表示地址)

    c.间接寻址(%ebx),%edx

    (%ebx)表示ebx这个寄存器存的值为内存地址

    d.变值寻址4(%ebx),%edx

    在间接寻址的基础上加上4

    2、movb:8 bit;movw:16 bit

    三、其他指令:push、pop、call、ret

    1、pushl %eax

    把eax压栈到堆栈栈底
    即首先把esp减4
    esp表示堆栈栈顶
    ebp表示堆栈基址

    2、popl %eax

    把eax从堆栈栈顶取32位,放在寄存器eax中
    即首先把栈顶esp的数值放在eax中,再把栈顶加4

    3、call 0x12345

    调用该地址
    即将当前的eip(当前CPU执行命令的指针)压栈,赋给eip一个新值(CPU下一条执行的指令)

    4、ret

    即将call时保存的eip还原到eip寄存器,return call之前的那条指令
    eip(*)这个*指程序员不能直接修改eip

    chapter 2 小练习

    堆栈变化如下:

    chapter 3 将C代码编译成汇编代码

    实验:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    我修改完毕的实验代码如下:

    编译:

     

    由于后来转在Ubuntu虚拟机上操作,将所得的汇编代码显示出来如下:

    去掉用于关联的代码得到纯汇编代码:

     堆栈变化情况演示如下图:

    过程完毕。

    chapter 4 总结

    对“计算机是如何工作的”理解

    1、计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作。 

    2、计算机的工作过程其实集中在了CPU和为其传输数据的地址总线上。计算机执行的最底层的操作其实就是N种指令而已。

    3、CPU可以抽象成一个for循环,总是从内存中执行下一条指令。内存负责保存指令数据,CPU负责解释执行指令、数据。内存与CPU通过总线连接。

    4、CPU中一个关键寄存器IP总是指向内存中某块区域。计算机在工作时会先从内存中取出一条IP指向的指令给CPU执行,按指令的要求从存储器中取出数据进行指定的运算和逻辑操作,然后再把结果送到内存中去。

    chapter 5 附录

    作者:吴子怡.北京电子科技学院

    原创作品转载请注明出处

    《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

  • 相关阅读:
    linux就该这么学.pdf
    linux中shell编辑小技巧
    相关功能分享
    现代操作系统第三版高清.pdf中文版免费下载
    linux高性能服务器编程pdf免费下载
    git每次更新都需要输入账号密码,如何解决?
    Python 面向对象
    模块和包
    Python常用模块(collections、 time、 random、 os 、sys、序列化模块)
    内置函数和匿名函数(lambda)
  • 原文地址:https://www.cnblogs.com/paperfish/p/5218231.html
Copyright © 2011-2022 走看看