码迷,mamicode.com
首页 > 系统相关 > 详细

Linux平台下变量在栈帧中的存储

时间:2016-04-02 07:19:02      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:运行程序   system   十进制   linux   空间   

局部变量的存储位置是在栈中,栈在内存中的特点是自上而下生长,也就是由高地址到低地址,当变量作为函数参数传递时为传值方式,函数形参作为接收方会开辟一块临时空间来拷贝实参的值,如下代码:

技术分享


当main函数中调用函数stack_test时,将局部变量a,b传值过去,此时调试可得到a,b的存储位置

技术分享

而后进入函数stack_test后,临时开辟了另一块空间来拷贝a,b的值,调试可得出

技术分享

因此,形参和实参并不是同一回事,只是值相同而已,此时输出b,值应该为0xbbbb,而之后将a的地址赋给临时指针变量p,再将p进行自加,调试可得

技术分享

因此将0xdddd赋值给指针p所指向的空间,就是将函数struct_test中的b值更改为0xdddd,但是main函数中的b值并没有改变,此时输出b值为0xdddd。


下面的程序:

技术分享

运行程序会出现重启系统,因为函数bug中用了system("reboot");system函数会调用fork去创建一个子进程,函数stack_test中,调试可得

技术分享

技术分享

将函数bug的入口赋值给了指针变量p,

技术分享

0x8048414转换成十进制就为*p所指向空间的值134513684,也就是将偏移量0x8048414赋给*p

当stack_test函数结束时会去调用bug函数

技术分享

本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1759362

Linux平台下变量在栈帧中的存储

标签:运行程序   system   十进制   linux   空间   

原文地址:http://2627lounuo.blog.51cto.com/10696599/1759362

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!