gpt4 book ai didi

linux - 为什么 Linux 程序的 .text 部分从 0x0804800 开始,堆栈顶部从 0xbffffff 开始?

转载 作者:IT王子 更新时间:2023-10-29 01:01:27 26 4
gpt4 key购买 nike

根据 Assembly Primer For Hackers (Part 2) Virtual Memory Organization , Linux 程序 .text 部分从 0x0804800 开始,栈顶从 0xbffffff 开始。这些数字有什么意义?为什么不从 0x0000000(或 0x00000200x0000040 开始 .text 以进入下一个 32 位或 64 位 )?为什么不从 0xfffffff 开始栈顶?

最佳答案

先这么说吧:很多时候,各个版 block 不需要放在特定的位置,更重要的是布局。如今,堆栈顶部实际上是随机化的,请参阅 here

0x08048000 是 ld 在 Linux/x86 上启动第一个 PT_LOAD 段的默认地址。在 Linux/amd64 上,默认值为 0x400000,您可以使用自定义链接描述文件更改默认值。您还可以将 .text 部分以 -Wl,-Ttext,0xNNNNNNNN 标志开始的位置更改为 gcc。要理解为什么 .text 没有映射到地址 0,请记住,为方便起见,NULL 指针通常映射到 ((void *) 0)。那么,将零页映射为不可访问以捕获 NULL 指针的使用是很有用的。 .text 开始之前的内存实际上被很多东西使用;以cat/proc/self/maps为例:

$ cat /proc/self/maps 
001c0000-00317000 r-xp 00000000 08:01 245836 /lib/libc-2.12.1.so
00317000-00318000 ---p 00157000 08:01 245836 /lib/libc-2.12.1.so
00318000-0031a000 r--p 00157000 08:01 245836 /lib/libc-2.12.1.so
0031a000-0031b000 rw-p 00159000 08:01 245836 /lib/libc-2.12.1.so
0031b000-0031e000 rw-p 00000000 00:00 0
00376000-00377000 r-xp 00000000 00:00 0 [vdso]
00852000-0086e000 r-xp 00000000 08:01 245783 /lib/ld-2.12.1.so
0086e000-0086f000 r--p 0001b000 08:01 245783 /lib/ld-2.12.1.so
0086f000-00870000 rw-p 0001c000 08:01 245783 /lib/ld-2.12.1.so
08048000-08051000 r-xp 00000000 08:01 2244617 /bin/cat
08051000-08052000 r--p 00008000 08:01 2244617 /bin/cat
08052000-08053000 rw-p 00009000 08:01 2244617 /bin/cat
09ab5000-09ad6000 rw-p 00000000 00:00 0 [heap]
b7502000-b7702000 r--p 00000000 08:01 4456455 /usr/lib/locale/locale-archive
b7702000-b7703000 rw-p 00000000 00:00 0
b771b000-b771c000 r--p 002a1000 08:01 4456455 /usr/lib/locale/locale-archive
b771c000-b771e000 rw-p 00000000 00:00 0
bfbd9000-bfbfa000 rw-p 00000000 00:00 0 [stack]

我们在这里看到的是 C 库、动态加载器 ld.so 和内核 VDSO(内核映射动态代码库,为内核提供一些接口(interface))。请注意,堆的开始也是随机的。

关于linux - 为什么 Linux 程序的 .text 部分从 0x0804800 开始,堆栈顶部从 0xbffffff 开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14795164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com