Linux内核分析——汇编代码执行及堆栈变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核分析——汇编代码执行及堆栈变化相关的知识,希望对你有一定的参考价值。

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

 

一、实验步骤

    首先借助实验楼这个平台进入Linux系统,打开了Xfce终端将代码写入。

技术分享

    通过cd Code命令打开Code文件夹,将后面录入的代码放在文件夹中,便于下载代码,有利于后面的详细分析。

技术分享

    其中通过命令gcc  main.c命令来编译代码;通过gcc  -S  -o  main.s  main.c  –m32来反汇编代码。-m32代表的是32位系统。

将得到的main.s文件打开,删掉.*的语句,得到最终的、起真正关键作用的语句。

技术分享

技术分享

 

二、堆栈变化

    按照计算机运行前后,代码排序为

技术分享

18    pushl    %ebp       

技术分享

19    movl     %esp, %ebp

技术分享

20    subl     $4, %esp

技术分享

21    movl     $9, (%esp)       

技术分享

22    call    f

技术分享

9    pushl    %ebp       

技术分享

10    movl     %esp, %ebp

技术分享

11    subl      $4, %esp 

技术分享

12    movl     8(%ebp), %eax

13    movl     %eax, (%esp)

技术分享

14    call   g      

技术分享

2    pushl    %ebp       

技术分享

3    movl     %esp, %ebp    

技术分享

4    movl     8(%ebp), %eax         

5    addl     $5, %eax       (eax=9+5=14)

6    popl     %ebp       

技术分享

7    ret       

技术分享

15    leave

技术分享

16    ret

技术分享

23    addl      $2, %eax    (eax=14+2=16)

24    leave

技术分享

25    ret   

 

三、计算机是如何工作的

 

我认为计算机其实是很机械的在工作中,它只是从内存里取出的第一条指令开始,开始做对应的动作。从存储器中取出对应的数据,然后运算或者其他逻辑操作等,然后将结果送去对应的地址去。然后在进行下一条指令,重复一样的动作,直到结束。

 

 

 

 

 

以上是关于Linux内核分析——汇编代码执行及堆栈变化的主要内容,如果未能解决你的问题,请参考以下文章

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程

第二周:一个简单的时间片轮转多道程序内核代码及分析

Linux内核及分析 第二周 操作系统是如何工作的?

Linux内核分析——第七周学习笔记20135308

Linux内核分析——第二周学习笔记

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理