关于Linux C程序存储空间的逻辑布局
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("%pn", &a);
u_int8_t *ap = (u_int8_t *)&a;
while(++ap)
{
printf("%pn", ap);
if( *ap == a)
{
*ap = 7;
break;
}
}
}
main()
{
u_int32_t i = 123;
printf("%pn", &i);
f1(i);
printf("%dn", i);
}
运行结果
/* * * result * * */
/*
BTC:/home/leon/test # ./
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 通过直接访问栈内容,修改了栈内的值。
注:这种操作相当不安全,因为不能保证栈内没有其它相同的值。
-
电子EDA技术的基础知识
EDA技术是把计算机技术应用在电子设计过程的一门技术,从而实现了电子设计的自动化进行,现今EDA技术已经广泛用于电子电路的设计仿真以及集成电路版图设计、印刷电路板的设计和可编程器件的编程等工作中。EDA技术是一门综合的学科,它代表了未来电子设计技术的发展...
-
2016下半年计算机等级考试一级模拟试题及答案
1.设任意一个十进制整数为D,转换成二进制数为B。根据数制的概念,下列叙述中正确的是________。A)数字B的位数<数字D的位数B)数字B的位数≤数字D的位数C)数字B的位数≥数字D的位数D)数字B的位数>数字D的位数2.通常网络用户使用的电子邮箱建在________。A)用户...
-
2016年计算机二级考试须知及备战攻略
现在已经步入九月份了,计算机二级又悄悄来临,那么本月24日-27日的计算机等级考试你准备好了吗?下面本站小编为大家分享计算机等级考试须知及考试攻略,一起来学习吧!01.基本介绍全国计算机等级考试(NationalComputerRankExamination,简称NCRE),是经原国家教育委员会(...
-
2017年计算机二级MSOffice上机操作题及答案
2017年NCRE继续实施2013年版考试大纲(部分科目有修订),大纲和教材详情可查询本网站大纲教材栏目。下面是小编收集的计算机二级MSOffice上机操作题及答案,希望可以帮助大家!一、字处理题请在【答题】菜单下选择【进入考生文件夹】命令,并按照题目要求完成下面的操...