首页 > 系统服务 > 详细

《Linux内核分析》第二周学习报告

时间:2016-03-04 22:21:27      阅读:207      评论:0      收藏:0      [点我收藏+]

《Linux内核分析》第二周学习报告

                             ——操作系统是如何工作的

姓名:王玮怡  学号:20135116

第一节 函数调用堆栈

一、三个法宝

二、深入理解函数调用堆栈

三、参数传递与局部变量

1、根据C代码获得反汇编代码

先通过gcc -g生成test.c的可执行文件test,然后使用objdump -S获得test的反汇编文件。

2、函数参数的存储和调用传递方式

(1)参数存储

x+y: move 0xc(%ebp),%eax

     add 0x8(%ebp),%eax

%eax用于函数返回

(2)参数传递

z=p2(x,y):pushl 0xfffffff8(%ebp) //将y的值压进栈

          pushl 0xfffffff4(%ebp) //将x的值压进栈

          call 804839b<p2> 

技术分享

 

                   add $0x8,%esp //清除call之前的内容

            mov %eax,0xfffffffc(%ebp) //函数的返回值通过eax寄存器传递

            printf("%d=%d+%d\n",z,x,y) //依次push y、x、z,最后push常量字串

技术分享

sub $0x18,%esp //新建一个指定大小的堆栈空间来存储局部变量

代码执行大致过程:

(1)main进栈

(2)p1函数进栈

技术分享

 

(3)return

技术分享

(4)p2进栈

技术分享

(5)返回main函数堆栈

 

《Linux内核分析》第二周学习报告

原文:http://www.cnblogs.com/wwy-20135116/p/5243362.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!