TOC

Linux 进程的地址空间

地址空间由低到高解读:

代码段 Text segment:映射自 ELF 二进制文件的可执行代码部分,通常只读。
数据段 Data segment:映射自 ELF 二进制文件的已初始化的全局/静态变量。
BSS segment:未初始化的全局/静态变量,属于匿名映射(不占文件空间,运行时分配)。

Random brk offset:堆(通过 brk/sbrk 系统调用扩展)起始地址随机化。

堆 Heap:由 malloc 等动态分配,从低地址向高地址增长。
内存映射段 Memory mapping segment:文件映射(如 .so 库)和匿名映射(如 mmap),从高地址向低地址增长。

Random mmap offset:内存映射区域起始地址随机化,防止攻击者预测库或 mmap 位置。

Stack(栈):存放局部变量、函数调用帧等,从高地址向低地址增长。

Random stack offset:栈基地址随机化是ASLR的重要组成部分。

Kernel address space(内核空间):在 64 位系统(如x86_64)上,内核空间通常占据高半区(例如,0xffff800000000000以上),用户态进程试图访问此区域会引发段错误。

✦ ➜ cat /proc/self/maps
5e34e4967000-5e34e4969000 r--p 00000000 08:30 17564                      /usr/bin/cat # 代码段 (ELF 文件头)
5e34e4969000-5e34e496e000 r-xp 00002000 08:30 17564                      /usr/bin/cat # 代码段 (可执行代码, .text)
5e34e496e000-5e34e4970000 r--p 00007000 08:30 17564                      /usr/bin/cat # 数据 (.data + .bss)
5e34e4970000-5e34e4971000 r--p 00008000 08:30 17564                      /usr/bin/cat
5e34e4971000-5e34e4972000 rw-p 00009000 08:30 17564                      /usr/bin/cat # 数据端 (.data + .bss)
5e351ca60000-5e351ca81000 rw-p 00000000 00:00 0                          [heap]
7da4c4400000-7da4c4428000 r--p 00000000 08:30 31361                      /usr/lib/x86_64-linux-gnu/libc.so.6 # 内存映射段 (共享库)
7da4c4428000-7da4c45b0000 r-xp 00028000 08:30 31361                      /usr/lib/x86_64-linux-gnu/libc.so.6
7da4c45b0000-7da4c45ff000 r--p 001b0000 08:30 31361                      /usr/lib/x86_64-linux-gnu/libc.so.6
7da4c45ff000-7da4c4603000 r--p 001fe000 08:30 31361                      /usr/lib/x86_64-linux-gnu/libc.so.6
7da4c4603000-7da4c4605000 rw-p 00202000 08:30 31361                      /usr/lib/x86_64-linux-gnu/libc.so.6
7da4c4605000-7da4c4612000 rw-p 00000000 00:00 0
7da4c46cb000-7da4c46ed000 rw-p 00000000 00:00 0
7da4c46ed000-7da4c4746000 r--p 00000000 08:30 10630                      /usr/lib/locale/C.utf8/LC_CTYPE
7da4c4746000-7da4c4747000 r--p 00000000 08:30 10636                      /usr/lib/locale/C.utf8/LC_NUMERIC
7da4c4747000-7da4c4748000 r--p 00000000 08:30 10639                      /usr/lib/locale/C.utf8/LC_TIME
7da4c4748000-7da4c4749000 r--p 00000000 08:30 10629                      /usr/lib/locale/C.utf8/LC_COLLATE
7da4c4749000-7da4c474a000 r--p 00000000 08:30 10634                      /usr/lib/locale/C.utf8/LC_MONETARY
7da4c474a000-7da4c474b000 r--p 00000000 08:30 10633                      /usr/lib/locale/C.utf8/LC_MESSAGES/SYS_LC_MESSAGES
7da4c474b000-7da4c474c000 r--p 00000000 08:30 10637                      /usr/lib/locale/C.utf8/LC_PAPER
7da4c474c000-7da4c474d000 r--p 00000000 08:30 10635                      /usr/lib/locale/C.utf8/LC_NAME
7da4c474d000-7da4c474e000 r--p 00000000 08:30 10628                      /usr/lib/locale/C.utf8/LC_ADDRESS
7da4c474e000-7da4c4751000 rw-p 00000000 00:00 0
7da4c4751000-7da4c4752000 r--p 00000000 08:30 10638                      /usr/lib/locale/C.utf8/LC_TELEPHONE
7da4c4752000-7da4c4753000 r--p 00000000 08:30 10632                      /usr/lib/locale/C.utf8/LC_MEASUREMENT
7da4c4753000-7da4c475a000 r--s 00000000 08:30 31350                      /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
7da4c475a000-7da4c475b000 r--p 00000000 08:30 10631                      /usr/lib/locale/C.utf8/LC_IDENTIFICATION
7da4c475b000-7da4c475d000 rw-p 00000000 00:00 0
7da4c475d000-7da4c475e000 r--p 00000000 08:30 31358                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7da4c475e000-7da4c4789000 r-xp 00001000 08:30 31358                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7da4c4789000-7da4c4793000 r--p 0002c000 08:30 31358                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7da4c4793000-7da4c4795000 r--p 00036000 08:30 31358                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7da4c4795000-7da4c4797000 rw-p 00038000 08:30 31358                      /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7fff2f666000-7fff2f688000 rw-p 00000000 00:00 0                          [stack]
7fff2f7b8000-7fff2f7bc000 r--p 00000000 00:00 0                          [vvar]
7fff2f7bc000-7fff2f7be000 r-xp 00000000 00:00 0                          [vdso]
如果你有魔法,你可以看到一个评论框~