关于Linux C程序存储空间的逻辑布局
来源:才华咖 本文已影响3.25W人
来源:才华咖 本文已影响3.25W人
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("%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 通过直接访问栈内容,修改了栈内的值。
注:这种操作相当不安全,因为不能保证栈内没有其它相同的值。
最简单的Linux驱动程序
Win10系统ntoskrnl.exe进程占用大量CPU和内存怎么办
托福英语写作范文:Examinations exert a pernicious influence on educat
Linux认证系统管理:linuxmail命令发送邮件失败
Linux下的两种分层存储方案
关于Linux中vlan的网卡教程
Linux下程序的Profile工具
Linux系统下USB驱动程序的设计与开发
Linux关闭selinux安全子系统的技巧
怎么在Linux下运行C语言程序
Ubuntu Linux系统下设置Static IP的方法
关于Linux内存机制的详解
关于Linux Glibc幽灵漏洞紧急修补的方案
Linux下如何用vi编辑和保存文件
关于linux Crontab 使用的基础教程
关于SEFC Book I Unit 7 Cultural Relics的教学方案
有心情的试一试,考查C++C程序员的基本编程技能
归纳逻辑程序设计的发展论文
在Linux系统中如何清除squid的缓存
Unix和Linux有什么区别
Linux网卡聚合linux多网卡绑定聚合之bond模式的原理是什么
C程序员实习日记
关于Linux中echo命令怎么使用
java程序中如何调用linux命令
Linux内核中的RCU机制
linux下执行java程序的sh脚本教程
Linux认证vi编辑器的基本使用方法
关于Linux系统命令中exit与exit的区别
关于Linux C程序存储空间的逻辑布局
Linux/Unix 简单快捷键汇总整理
实用的Linux/Unix系统磁带管理命令
安装和使用Linux CURL的方法
2016年Linux认证考试要点:shell程序控制结构语句
让XP与Linux系统二者相互共存的方法
Linux系统管理:linux修改键盘按键
Linux系统调用设备的ioctl函数
Linux安装和使用Glances的方法介绍
C语言编程程序的内存如何布局
linux shell编程的简介
关于linux中tail 命令使用详解