资讯专栏INFORMATION COLUMN

Linux内核分析-week 1

qpwoeiru96 / 2961人阅读

摘要:本周进行了网易公开课内核分析课程,撰写此博客,一为完成作业,二为记录学习收获。在本次作业的完成过程中,加深了对堆栈变化的理解,对于计算机内部寄存器存储器之间完美有序的配合,实现程序执行的机制有了更深刻的理解,是一次很有意义的实践。

0.本周进行了网易 mooc 公开课 《linux内核分析》课程,撰写此博客,一为完成作业,二为记录学习收获。

命令解释:

    push %eax    <==> sub $4 ,%esp
                      movl %eax,(%esp)
    pop % eax    <==> movl (%esp),%eax
                      addl $4,%esp
    call 0x12345 <==> push %eip
                      movl $012345,%eip
    ret          <==> popl %eip
    enter        <==> pushl %ebp
                      movl %esp,%ebp
    leave        <==> movl %ebp,%esp
                      popl %ebp

1.c程序代码:

    int g(int x,int y)
    {
      return x + y;
    }

    int f(int x)
    {
      return g(x , 2*x);
    }

    int main(void)
    {
      return f(2) + 3;
    }

2.使用gcc –S –o main.s main.c -m32 将C程序汇编成32位汇编代码:

   1. g:
   2.   pushl   %ebp
   3.   movl    %esp, %ebp
   4.   movl    12(%ebp), %eax
   5.   movl    8(%ebp), %edx
   6.   addl    %edx, %eax
   7.   popl    %ebp
   8.   ret
   9. f:
   10.  pushl   %ebp
   11.  movl    %esp, %ebp
   12.  subl    $8, %esp
   13.  movl    8(%ebp), %eax
   14.  addl    %eax, %eax
   15.  movl    %eax, 4(%esp)
   16.  movl    8(%ebp), %eax
   17.  movl    %eax, (%esp)
   18.  call    g
   19.  leave
   20.  ret
   21. main:
   22.  pushl   %ebp
   23.  movl    %esp, %ebp
   24.  subl    $4, %esp
   25.  movl    $2, (%esp)
   26.  call    f
   27.  addl    $3, %eax
   28.  leave
   29.  ret

3.程序分析

(1)pushl    %ebp

(2)movl %esp, %ebp

(3)subl $4, %esp

(4)movl $2, (%esp)

这里是将立即数2存到esp指向的内存地址中

(5)call f

(6)pushl    %ebp

(7)movl %esp, %ebp

(8)subl $8, %esp

(9)movl 8(%ebp), %eax

(10)addl    %eax, %eax

(11)movl    %eax, 4(%esp)

(12)movl    8(%ebp), %eax

(13)movl    %eax, (%esp)

(14)call    g

(15) pushl  %ebp

(16)movl    %esp, %ebp

(17) movl   12(%ebp), %eax

(18)movl    8(%ebp), %edx

(19)addl    %edx, %eax

(20)popl    %ebp

(21)ret

(22) leave

(23) ret

(24)addl    $3, %eax

(25)leave 

(26)ret

最终返回 eax = 9

4.学习总结
计算机通过执行存储的程序指令来进行工作,在程序执行过程中,堆栈存储了临时的数据,以便进行函数的调用和返回,由ebp和esp确定的临时栈对当前程序的执行环境进行了明确。在本次作业的完成过程中,加深了对堆栈变化的理解,对于计算机内部寄存器、存储器之间完美有序的配合,实现程序执行的机制有了更深刻的理解,是一次很有意义的实践。


bintasong 原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/7798.html

相关文章

  • Linux内核分析-week 1

    摘要:本周进行了网易公开课内核分析课程,撰写此博客,一为完成作业,二为记录学习收获。在本次作业的完成过程中,加深了对堆栈变化的理解,对于计算机内部寄存器存储器之间完美有序的配合,实现程序执行的机制有了更深刻的理解,是一次很有意义的实践。 0.本周进行了网易 mooc 公开课 《linux内核分析》课程,撰写此博客,一为完成作业,二为记录学习收获。 命令解释: push %eax ...

    zsy888 评论0 收藏0
  • fir.im Weekly - iOS/Android 应用程序架构解析

    摘要:原文链接原文作者译文出自小鄧子的简书下拉刷新开源库分析对比家艺分析对比了上数的下拉刷新开源库,后面能会加入其它有代表性的库。廖祜秋秋百万也说道史上最强的下拉刷新类库分析,没有之一,太棒了除了下拉刷新对比分析,家艺同学还做了的源码分析。 假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于  iOS/Android ...

    yedf 评论0 收藏0
  • Docker简介与入门

    摘要:下面这个是个例子指令表示这次构建需要基于仓库的这个的镜像,如果本地不存在这个镜像的话,会自动下载镜像。目录下应该有的配置文件片段这步笔者没有成功,日志路径是可以的,但是中的配置始终不行。Docker是个新生的事物,概念类似虚拟化。网上关于Docker入门的东西已经很多了。不过本文探讨了Docker的特点、特性、原理,还介绍了具有中国特色的安装测试过程,另外还谈到了Docker的社区生态和Do...

    tianren124 评论0 收藏0
  • Docker简介与入门

    摘要:下面这个是个例子指令表示这次构建需要基于仓库的这个的镜像,如果本地不存在这个镜像的话,会自动下载镜像。目录下应该有的配置文件片段这步笔者没有成功,日志路径是可以的,但是中的配置始终不行。 Docker是个新生的事物,概念类似虚拟化。网上关于Docker入门的东西已经很多了。不过本文探讨了Docker的特点、特性、原理,还介绍了具有中国特色的安装测试过程,另外还谈到了Docker的社区生...

    mumumu 评论0 收藏0
  • Docker简介与入门

    摘要:下面这个是个例子指令表示这次构建需要基于仓库的这个的镜像,如果本地不存在这个镜像的话,会自动下载镜像。目录下应该有的配置文件片段这步笔者没有成功,日志路径是可以的,但是中的配置始终不行。 Docker是个新生的事物,概念类似虚拟化。网上关于Docker入门的东西已经很多了。不过本文探讨了Docker的特点、特性、原理,还介绍了具有中国特色的安装测试过程,另外还谈到了Docker的社区生...

    baoxl 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<