- 相关推荐
关于Linux C程序存储空间的逻辑布局
Linux C程序存储空间的逻辑布局是怎么样的?为了方便大家,下面YJBYS小编为大家整理了关于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\n", &a);
u_int8_t *ap = (u_int8_t *)&a;
while(++ap)
{
printf("%p\n", ap);
if( *ap == a)
{
*ap = 7;
break;
}
}
}
main()
{
u_int32_t i = 123;
printf("%p\n", &i);
f1(i);
printf("%d\n", i);
}
运行结果
/* * * result * * */
/*
BTC:/home/leon/test # ./a.out
0xbf905300
0xbf9052e0
0xbf9052e1
0xbf9052e2
0xbf9052e3
0xbf9052e4
0xbf9052e5
0xbf9052e6
0xbf9052e7
0xbf9052e8
0xbf9052e9
0xbf9052ea
0xbf9052eb
0xbf9052ec
0xbf9052ed
0xbf9052ee
0xbf9052ef
0xbf9052f0
0xbf9052f1
0xbf9052f2
0xbf9052f3
0xbf9052f4
0xbf9052f5
0xbf9052f6
0xbf9052f7
0xbf9052f8
0xbf9052f9
0xbf9052fa
0xbf9052fb
0xbf9052fc
0xbf9052fd
0xbf9052fe
0xbf9052ff
0xbf905300
7
*/
从结果可以清晰的看到:
1 进入函数f1()后,栈“向下”生长了。
2 通过直接访问栈内容,修改了栈内的值。
注:这种操作相当不安全,因为不能保证栈内没有其它相同的值。
【Linux C程序存储空间的逻辑布局】相关文章:
Linux下程序的Profile工具04-27
最简单的Linux驱动程序06-28
java程序中如何调用linux命令06-13
C语言程序设计学习技巧09-04
计算机C语言程序设计的介绍10-19
学习二级c语言程序设计的方法06-18
linux操作技巧11-02
Linux认证的概念10-07
学习Linux的忠告05-04
Linux认证的经典技巧08-06