zoukankan      html  css  js  c++  java
  • Linux C程序存储空间的逻辑布局

    ---------------------------------------------------------------------
    Linux C程序存储空间的逻辑布局
     
    一、APUE上指出了 Linux C程序存储空间的逻辑布局,对于 X86上的Linux
        正文段从 0x08048000单元开始
        栈底则在 0xC0000000之下开始 (栈从高地址向低地址生长)
    图如下:
     
    二、例程
        实现一个函数f(),不用指针,实现在函数内修改传入参数的值。
    #include "stdio.h"
    #include "sys/types.h"
    
    void f1(u_int32_t a)
    {
        printf("%p
    ", &a);
    
        u_int8_t *ap = (u_int8_t *)&a;
        while(++ap)
        {   
            printf("%p
    ", ap);
    
            if( *ap == a)
            {   
                *ap = 7;
                break;
            }   
        }   
    }
    
    main()
    {
        u_int32_t i = 123;
        printf("%p
    ", &i);
    
        f1(i);
    
        printf("%d
    ", i); 
    }
    

      运行结果

    从结果可以清晰的看到:
    1 进入函数f1()后,栈“向下”生长了。
    2 通过直接访问栈内容,修改了栈内的值。

    注:这种操作相当不安全,因为不能保证栈内没有其它相同的值。

  • 相关阅读:
    数组_leetcode283
    数组_leetcode438
    数组_leetcode215
    数组_leetcode167
    数组_leetcode209
    数组_leetcode88
    数组_leetcode80
    数组_leetcode76
    数组_leetcode75
    数组_leetcode27
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7478465.html
Copyright © 2011-2022 走看看