【MOOC EXP】Linux内核分析实验一报告

程涵 
原创博客
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 
【反汇编一个简单的C程序】
 

  • 实验截图:

【MOOC EXP】Linux内核分析实验一报告


  • 分析汇编代码的工作过程中堆栈的变化

【MOOC EXP】Linux内核分析实验一报告

两个宏指令:enter, leave

【MOOC EXP】Linux内核分析实验一报告

  1. 除特殊指明,eip在执行完某一条指令后会自动开始执行下一条指令。
  2. esp,ebp寄存器总是指向一个堆栈。esp指向栈顶,ebp指向栈底(栈底是相对的,每个函数有自己的基地址)。函数调用堆栈是由逻辑上多个堆栈叠加起来的。
  3. 函数的返回值默认使用eax寄存器存储返回给上一级函数。

【MOOC EXP】Linux内核分析实验一报告

  • 刚开始,指向一个空的堆栈。

【MOOC EXP】Linux内核分析实验一报告

  • pushl %ebp

就是把ebp的值放入,ebp的值为0.

【MOOC EXP】Linux内核分析实验一报告

  • movl %esp, %ebp

压栈时,把esp的位置向下移动。

ebp指向标号1的位置。

【MOOC EXP】Linux内核分析实验一报告

【MOOC EXP】Linux内核分析实验一报告

  • subl $4, %esp

将esp向下移动一个位置。

  • movl $8, (%esp)

把8放到标号2的位置。

  • call f

相当于:

pushl %eip

movl f, %eip

【MOOC EXP】Linux内核分析实验一报告【MOOC EXP】Linux内核分析实验一报告

  • pushl %ebp

移动ebp,同时esp自动向下移动一位。

【MOOC EXP】Linux内核分析实验一报告

  • movl %esp, %ebp

【MOOC EXP】Linux内核分析实验一报告

  • subl $4, %esp

【MOOC EXP】Linux内核分析实验一报告

  • movl 8(%ebp), %eax

变址寻址。将ebp的位置向上移动两位,内容是8。 eax=8。

  • movl %eax, (%esp)

把8放到esp的位置。

【MOOC EXP】Linux内核分析实验一报告

  • call g

【MOOC EXP】Linux内核分析实验一报告

(更改15)

  • 执行完g函数

【MOOC EXP】Linux内核分析实验一报告

  • 执行完f函数的leave命令

【MOOC EXP】Linux内核分析实验一报告

  • 执行完全部命令

【MOOC EXP】Linux内核分析实验一报告

以上是实验部分。


  • 阐明自己对“计算机是如何工作的”理解。

引用:Basics of Binary Numbers

For computers, binary numbers are great stuff because:

  • They are simple to work with -- no big addition tables and multiplication tables to learn, just do the same things over and over, very fast.
  • They just use two values of voltage, magnetism, or other signal, which makes the hardware easier to design and more noise resistant.

对于计算机,二进制数字是伟大的,因为他们是简单的一起工作,没有什么大的加法表和乘法表学习,只是做同样的事情一遍又一遍,速度非常快。而且他们仅仅使用电压,磁,或其它信号,这使得硬件更易于设计和更抗噪声的两个值。

 
在学习与计算机有关的课程之前,对于这个话题是一无所知的,但一直存有好奇和探险的心情。
现在因MOOC的这门课程而有机会更加接近计算机是如何工作的这一个问题。
如何回答这个问题,可以从客观的角度回答,由硬件系统(hardware system)和软件系统(software system)两部分组成的。
引用了有关二进制的文章,是因为一直以来都对二进制感到很好奇,仅仅靠0和1就可以让计算机如此快速而高效的运作。
计算机的存储记忆能力和逻辑判断能力让人们不需要进行任何的干预,在程序控制下,计算机可以连续、自动地工作。
现在的我对于计算机如何工作还是一知半解的,希望在今后的课程中不断探索,形成自己对于计算机工作机制的更加多方面和深刻的理解。
 
 
 
 
程涵
上一篇:java分层架构概念


下一篇:LyX使用中的一些问题