gpt4 book ai didi

linux - 0x08048000 之前的内存用于 32 位机器是什么?

转载 作者:IT王子 更新时间:2023-10-28 23:29:50 29 4
gpt4 key购买 nike

在 Linux 中,我了解到每个进程在 32 位机器中存储从 0x08048000 开始的数据(在 64 位机器中存储从 0x00400000 开始的数据。

但我不知道从那里开始的原因。 0x08048000之前之前的内存是干什么用的?

更新:有些人认为它是为内核映射的。不过据我所知,Linux内核使用的是用户栈之后的高端内存。

最佳答案

答案真的是:一堆东西。可执行文件的加载地址没有神奇的意义,几乎任何东西都可以映射到较低的地址。常见的例子包括:C 库(如 C 库)、动态加载器 ld.so 和内核 VDSO(内核映射的动态代码库,它为 x86 Linux 中的内核提供一些接口(interface))。但是你可以使用 mmap() 系统调用来映射任何你想要的东西。

例如在我的特定机器上, map 如下(获得但“cat/proc/self/maps”):

gby@watson:~$ 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]

关于linux - 0x08048000 之前的内存用于 32 位机器是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7187981/

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