- 相關(guān)推薦
關(guān)于Linux C程序存儲空間的邏輯布局
Linux C程序存儲空間的邏輯布局是怎么樣的?為了方便大家,下面YJBYS小編為大家整理了關(guān)于Linux C程序存儲空間的邏輯布局的文章,希望對你有所幫助。
一、APUE上指出了 Linux C程序存儲空間的邏輯布局,對于 X86上的Linux
正文段從 0x08048000單元開(kāi)始
棧底則在 0xC0000000之下開(kāi)始 (棧從高地址向低地址生長(cháng))
圖如下:
二、例程
實(shí)現一個(gè)函數f(),不用指針,實(shí)現在函數內修改傳入參數的值。
#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 進(jìn)入函數f1()后,棧“向下”生長(cháng)了。
2 通過(guò)直接訪(fǎng)問(wèn)棧內容,修改了棧內的值。
注:這種操作相當不安全,因為不能保證棧內沒(méi)有其它相同的值。
【Linux C程序存儲空間的邏輯布局】相關(guān)文章:
Linux下程序的Profile工具09-23
C語(yǔ)言程序的結構10-17
最簡(jiǎn)單的Linux驅動(dòng)程序09-09
java程序中如何調用linux命令08-27
C語(yǔ)言程序設計學(xué)習技巧08-02
計算機C語(yǔ)言程序設計的介紹09-02
2024年Linux認證考試要點(diǎn):shell程序控制結構語(yǔ)句09-20
Linux認證概念10-29
Linux認證優(yōu)勢06-10