文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>函数调用时栈内容和函数栈帧的分析

函数调用时栈内容和函数栈帧的分析

时间:2010-09-16  来源:Acikee

函数调用时的内存分析

(为即将调用的函数准备参数)

mov %ebp+偏移 ,%eax 将参数传到eax

mov %eax ,%esp+偏移 将参数放到当前空间。

sub $18 ,%ebp #将栈底指针向下移动以存放参数和变量。

(call 保存函数执行现场)

call %eip

相当于指令:push %eip

                     mov addr ,%eip

(保存栈的相关指针)

push %ebp #保存栈顶。

mov %esp, %ebp #将栈底赋给栈顶。

 

(将返回值放入eax中,供调用函数读取)

mov 返回变量地址, %eax

(还原栈指针,释放被调用函数的内存空间。)

leave

相当于一下指令:mov %ebp, %dsp

                            pop %ebp

(恢复调用前的现场)

ret

相当于一下指令: ~call

                            pop %eip //恢复执行前的地址。

问题:

       每次为参数和变量预留空间时 sub的值是怎么确定的?

sub 的值是由被调用函数内部声明的变量和参数决定的。每多一个参数地址就加0x04,而函数中的变量为每四个,地址就增加0x10。例如:有两个整形参数,则加0x08,有一个整形参数的话加0x10,有四个整形参数也加0x10,有五个时就加0x20。

调用函数的栈帧分布

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载