Linux内核分析MOOC课程汇编分析

    在大学就对Linux很感兴趣。记得当时装各种Linux玩,但玩了一段时间之后感觉自己没有深入进去。想好好研究一下内核和架构之类的也没什么时间了。毕业之后工作也把这事丢到一边了,最近看到MOOC学院有这门课程,所以果断报了,不管最后怎么样,好歹把心愿了一下。好了言归正传。本文是课程的作业。程序源代码如图

用gcc编译后得到汇编代码


为了便于分析去掉辅助代码


分析:

    pushl %ebp                   把基址寄存器的值保存到堆栈, %esp自动指向下一个堆栈地址。

    movl %esp, %ebp        把堆栈指针保存到基址寄存器中。

    subl $4, %esp              使堆栈指针指向下一个内存地址。

    movl $18, (%esp)         把立即数18放到堆栈指针所指的内存中。

    call f                                 调用函数f。eip入栈。

                             pushl %ebp                   把基址寄存器的值保存到堆栈, %esp自动指向下一个堆栈地址。

                             movl %esp, %ebp        把堆栈指针保存到基址寄存器中。

                             subl $4, %esp              使堆栈指针指向下一个堆栈地址。

                             8(%ebp), %eax             把18放到eax寄存器中。

                             movl %eax, (%esp)     把eax寄存器中的值放到%esp指向的堆栈地址中。

                             call g      调用函数g。 eip入栈。

                                                            pushl %ebp                   把基址寄存器的值保存到堆栈, %esp自动指向下一个堆栈地址。

                                                            movl %esp, %ebp        把堆栈指针保存到基址寄存器中。

                                                            8(%ebp), %eax             把18放到eax寄存器中。

                                                           addl $3, %eax                18 + 3。

                                                           popl %ebp                       弹出%ebp。

                                                           ret                                      弹出eip的值。即函数f的leave

                              leave                              把ebp的值给esp, 弹出ebp。

                              ret                                   弹出eip的值。即addl $1, %eax的位置。

    addl $1, %eax                1 + eax中的值。即最后结果保存在eax中

     leave                              把ebp的值给esp, 弹出ebp。

     ret                                   弹出eip的值。main函数之前eip的指令位置。


计算机的工作原理: 通过取指令,取数据,运算,变址等操作来完成一系列的工作流程。


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值