linux 使用者程序額堆疊空間VMA

2021-06-03 08:17:03 字數 1318 閱讀 3525

linux  堆疊expand_stack

__bprm_mm_init

@@@@@@@@0xbe86f000 - 0xbe871000: address 0xbe84f000

int expand_downwards(struct vm_area_struct *vma,

unsigned long address)

{int error;

if(strncmp(current->comm, "hello", 5) == 0)

printk("@@@@@@@@0x%08lx - 0x%08lx: address 0x%08lx\n", vma->vm_start, vma->vm_end, address);

00008000-00009000 r-xp 00000000 00:01 320        /hello

00010000-00011000 rwxp 00000000 00:01 320        /hello

40023000-40024000 rwxp 00000000 00:00 0 

40049000-40066000 r-xp 00000000 00:01 307        /lib/ld-2.8.so

40066000-40067000 rwxp 00000000 00:00 0 

4006d000-4006e000 r-xp 0001c000 00:01 307        /lib/ld-2.8.so

4006e000-4006f000 rwxp 0001d000 00:01 307        /lib/ld-2.8.so

4009e000-4009f000 rwxp 00000000 00:00 0 

400f4000-4020f000 r-xp 00000000 00:01 282        /lib/libc-2.8.so

4020f000-40217000 ---p 0011b000 00:01 282        /lib/libc-2.8.so

40217000-40219000 r-xp 0011b000 00:01 282        /lib/libc-2.8.so

40219000-4021a000 rwxp 0011d000 00:01 282        /lib/libc-2.8.so

4021a000-4021d000 rwxp 00000000 00:00 0 

be850000-be871000 rw-p 00000000 00:00 0          [stack]

ffff0000-ffff1000 r-xp 00000000 00:00 0          [vectors]

程序的堆疊空間

每乙個程序都有自己的乙個程序堆疊空間。在linux介面執行乙個執行碼時,shell程序會fork乙個子程序,再呼叫exec系統呼叫在子程序中執行該執行碼。exec系統呼叫執行新程式時會把命令列引數和環境變數表傳遞給main函式,它們在整個程序堆疊空間中的位置如下圖12 7所示。圖12 7 程序堆疊空...

linux 程序位址空間

乙個linux程序的虛擬位址空間分布如下圖所示,分為使用者空間和核心空間,對於乙個32位作業系統來說,4gb的空間分成兩部分,低位址的0 3g給使用者空間,高位址的3g 4g給核心空間 2.1 唯讀資料段 rodata,又叫做常量資料段 存放唯讀資料 字串常量和const修飾的全域性變數 const...

Linux程序位址空間

我們知道,在32位機器上linux 作業系統中的程序的位址空間大小是4g,其中0 3g是使用者空間,3g 4g是核心空間。其實,這個4g的位址空間是不存在的,也就是我們所說的虛擬記憶體空間。c程式一直由下列幾部分組成 a.正文段。這是由cpu執行的機器指令部分。通常,正文段是可共享的,所以即使是經常...