Solaris(X86版)局部变量入栈顺序的一个小例子

发布于 2022-09-18 21:17:47 字数 2091 浏览 15 评论 0

平台:Solaris(X86版)+gcc
fun1()
{
        int i=1, m=2, n=3;
       ....
}

  这里有三个局部变量i,m,n
   对与gcc编译成机器码后,栈分配顺序一般是从左到右的顺序入栈
    而反汇编的结果中局部变量赋值语句有:

        movl    $1,-4(%ebp)          ; i=1
        movl    $2,-8(%ebp)          ; m=2
        movl    $3,-0xc(%ebp)        ; n=3
   那么,i,m,n的栈中的位置如下图:
        |----------------------------------|------> HIGH
        | EIP (t函数的返回地址)           |
        |----------------------------------|
        | EBP (函数的EBP)                 |
        |----------------------------------|
        | i (EBP-4)                            |
        |----------------------------------|
        | m (EBP-                          |
        |----------------------------------|
        | n (EBP-0xc)                       |
        |----------------------------------|------> LOW

当然实际写或移植编译器时也可不安这个顺序,但为了调试的一致性,可考虑与gcc相近.

[ 本帖最后由 system888net 于 2008-4-25 12:22 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

远昼 2022-09-25 21:17:47

这种方式从栈的方式来看是最合理的。先定义的先入栈,后定义的后入栈。其实从C语言的角度来说,应该没有什么栈与堆这些名词,C语言角度只有局部变量、全局变量、动态分配、静态变量,而栈、堆则是与机器相关、OS相关的术语了。

暗地喜欢 2022-09-25 21:17:47

原帖由 cjaizss 于 2008-4-25 12:27 发表
这种方式从栈的方式来看是最合理的。先定义的先入栈,后定义的后入栈。其实从C语言的角度来说,应该没有什么栈与堆这些名词,C语言角度只有局部变量、全局变量、动态分配、静态变量,而栈、堆则是与机器相关、 ...

斑竹正确,顶...

[ 本帖最后由 system888net 于 2008-4-25 12:43 编辑 ]

满栀 2022-09-25 21:17:47

.......大侠是对混黑社会的人的称呼,偶现在是从政的

べ映画 2022-09-25 21:17:47

原帖由 cjaizss 于 2008-4-25 12:35 发表
.......大侠是对混黑社会的人的称呼,偶现在是从政的

"斑竹正确,顶..." 那这样改可以吗?

狼亦尘 2022-09-25 21:17:47

原帖由 cjaizss 于 2008-4-25 12:35 发表
.......大侠是对混黑社会的人的称呼,偶现在是从政的

念三年u 2022-09-25 21:17:47

先声明先入栈。 还有反例吗?

半透明的墙 2022-09-25 21:17:47

C++这个方面应该是强制的(因为牵涉到析构先后的问题),但是C语言这个还真说不准,因为没有一个标准,栈是机器级的基础概念,不是C语言中的概念。刚才又搜了一下standard C99,全文没搜到stack这个词......

只等公子 2022-09-25 21:17:47

汗~ LZ 这个也叫例子呀,意义何在?

耳根太软 2022-09-25 21:17:47

原帖由 albcamus 于 2008-4-25 13:23 发表
先声明先入栈。 还有反例吗?

有反例,用gcc4编译

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文