【MOOC EXP】Linux内核分析实验一报告
程涵
原创博客
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
【反汇编一个简单的C程序】
- 实验截图:
- 分析汇编代码的工作过程中堆栈的变化
两个宏指令:enter, leave
- 除特殊指明,eip在执行完某一条指令后会自动开始执行下一条指令。
- esp,ebp寄存器总是指向一个堆栈。esp指向栈顶,ebp指向栈底(栈底是相对的,每个函数有自己的基地址)。函数调用堆栈是由逻辑上多个堆栈叠加起来的。
- 函数的返回值默认使用eax寄存器存储返回给上一级函数。
- 刚开始,指向一个空的堆栈。
- pushl %ebp
就是把ebp的值放入,ebp的值为0.
- movl %esp, %ebp
压栈时,把esp的位置向下移动。
ebp指向标号1的位置。
- subl $4, %esp
将esp向下移动一个位置。
- movl $8, (%esp)
把8放到标号2的位置。
- call f
相当于:
pushl %eip
movl f, %eip
- pushl %ebp
移动ebp,同时esp自动向下移动一位。
- movl %esp, %ebp
- subl $4, %esp
- movl 8(%ebp), %eax
变址寻址。将ebp的位置向上移动两位,内容是8。 eax=8。
- movl %eax, (%esp)
把8放到esp的位置。
- call g
(更改15)
- 执行完g函数
- 执行完f函数的leave命令
- 执行完全部命令
以上是实验部分。
- 阐明自己对“计算机是如何工作的”理解。
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就可以让计算机如此快速而高效的运作。
计算机的存储记忆能力和逻辑判断能力让人们不需要进行任何的干预,在程序控制下,计算机可以连续、自动地工作。
现在的我对于计算机如何工作还是一知半解的,希望在今后的课程中不断探索,形成自己对于计算机工作机制的更加多方面和深刻的理解。
程涵