当前位置:  技术问答>linux和unix

关于stack 的一个弱弱的问题,望大虾指点

    来源: 互联网  发布时间:2015-07-30

    本文导语:  void fun1(int a, int b) {    char buf_fun1[4];    ...... } void fun2(int a, int b , int c) {     char buf_fun2[100];     ... } 在调用fun1,fun2时它们的stack分布有一些差异. fun1:            stack(低地址)  top of buf_fun1   ...

void fun1(int a, int b)
{
   char buf_fun1[4];
   ......
}

void fun2(int a, int b , int c)
{
    char buf_fun2[100];
    ...
}

在调用fun1,fun2时它们的stack分布有一些差异.

fun1:
           stack(低地址)  top of buf_fun1
                           fsp
                           ret
                           a
                           b
            stack(高地址)  ..
fun2:
           stack(低地址)  top of buf_fun2
                           有其他在top of buf_fun2和fsp之间??why????
                           fsp
                           ret
                           a
                           b
                           c
            stack(高地址)  ..

                          

      望大虾指点                     

|
1.跟源代码注释没有关系
2.如此简单的代码,函数调用,堆栈不会出现问题
08048430 :
 8048430:       55                      push   %ebp
 8048431:       89 e5                   mov    %esp,%ebp
 8048433:       83 ec 78                sub    $0x78,%esp
 8048436:       c9                      leave  
 8048437:       c3                      ret    

08048438 :
 8048438:       55                      push   %ebp
 8048439:       89 e5                   mov    %esp,%ebp
 804843b:       83 ec 04                sub    $0x4,%esp
 804843e:       c9                      leave  
 804843f:       c3                      ret    

08048440 :
 8048440:       55                      push   %ebp
 8048441:       89 e5                   mov    %esp,%ebp
 8048443:       83 ec 08                sub    $0x8,%esp
 8048446:       83 ec 04                sub    $0x4,%esp
 8048449:       6a 03                   push   $0x3
 804844b:       6a 02                   push   $0x2
 804844d:       6a 01                   push   $0x1
 804844f:       e8 dc ff ff ff          call   8048430 
 8048454:       83 c4 10                add    $0x10,%esp
 8048457:       83 ec 08                sub    $0x8,%esp
 804845a:       6a 02                   push   $0x2
 804845c:       6a 01                   push   $0x1
 804845e:       e8 d5 ff ff ff          call   8048438 
 8048463:       83 c4 10                add    $0x10,%esp
 8048466:       c9                      leave  
 8048467:       c3                      ret  
3.exe很搞笑 :)

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教一个process access stack的问题
  • u-boot 内存分布的问题,关于IRQ_STACK_START
  • 最近频频发生 段错误,gdb最后显示Previous frame inner to this frame (corrupt stack?)的问题.
  • 线程的stack属性失效问题
  • java命名空间java.util类stack<e>的类成员方法: stack定义及介绍
  • BitNami Trac Stack
  • C++ Stacks(堆栈) 成员 size():返回栈中元素数目
  • BitNami Moodle Stack
  • C++ Stacks(堆栈) 成员 push():在栈顶增加元素
  • BitNami Subversion Stack
  • C++ Stacks(堆栈) 成员 pop():移除栈顶元素
  • BitNami phpBB Stack
  • C++ Stacks(堆栈) 成员 empty():堆栈为空则返回真
  • BitNami Joomla! Stack
  • 移动开发 iis7站长之家
  • BitNami WordPress Stack
  • C++ Stacks(堆栈) 成员 操作:比较和分配堆栈
  • Drupal安装程序 BitNami Drupal stack
  • java命名空间java.util类stack<e>的类成员方法: empty定义及介绍
  • BitNami JBoss Stack
  • java命名空间java.util类stack<e>的类成员方法: peek定义及介绍
  • BitNami Roller Stack
  • java命名空间java.util类stack<e>的类成员方法: pop定义及介绍
  • BitNami Liferay Stack
  • java命名空间java.util类stack<e>的类成员方法: search定义及介绍
  • BitNami Tomcat Stack


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3