《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函数堆栈
原文:http://www.cnblogs.com/wwy-20135116/p/5243362.html