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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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平台下变量在栈帧中的存储的主要内容,如果未能解决你的问题,请参考以下文章

class线程信息

(十九)加载指令

Jvm(43),指令集----加载与存储指令

const,static总结

函数调用时栈是如何变化的?

JVM:Java虚拟机栈概述栈帧栈帧中的局部变量表