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

来源:互联网 发布:易语言七夕表白源码 编辑:程序博客网 时间:2024/05/16 07:11

    在大学就对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
原创粉丝点击