c - 动态库实际上在内存中的什么位置?

标签 c linux memory dynamic-linking dynamic-library

<分区>

在linux平台上,

谁能告诉我内存中的动态库在哪里?

我了解到动态库都是根据GOT mmap到进程的 这个过程,

这是真的吗?

谢谢!

最佳答案

您可以通过查看/proc/pid/maps 来了解在 Linux 进程中映射到什么地方——您只需要知道进程 ID。例如:

$ cat /proc/self/maps
00400000-0040b000 r-xp 00000000 08:01 71827604                           /bin/cat
0060a000-0060b000 r--p 0000a000 08:01 71827604                           /bin/cat
0060b000-0060c000 rw-p 0000b000 08:01 71827604                           /bin/cat
00690000-006b1000 rw-p 00000000 00:00 0                                  [heap]
7f07fbaf7000-7f07fbdc0000 r--p 00000000 08:01 18094104                   /usr/lib/locale/locale-archive
7f07fbdc0000-7f07fbf75000 r-xp 00000000 08:01 14552996                   /lib/x86_64-linux-gnu/libc-2.15.so
7f07fbf75000-7f07fc175000 ---p 001b5000 08:01 14552996                   /lib/x86_64-linux-gnu/libc-2.15.so
7f07fc175000-7f07fc179000 r--p 001b5000 08:01 14552996                   /lib/x86_64-linux-gnu/libc-2.15.so
7f07fc179000-7f07fc17b000 rw-p 001b9000 08:01 14552996                   /lib/x86_64-linux-gnu/libc-2.15.so
7f07fc17b000-7f07fc180000 rw-p 00000000 00:00 0 
7f07fc180000-7f07fc1a2000 r-xp 00000000 08:01 14553008                   /lib/x86_64-linux-gnu/ld-2.15.so
7f07fc37e000-7f07fc381000 rw-p 00000000 00:00 0 
7f07fc3a0000-7f07fc3a2000 rw-p 00000000 00:00 0 
7f07fc3a2000-7f07fc3a3000 r--p 00022000 08:01 14553008                   /lib/x86_64-linux-gnu/ld-2.15.so
7f07fc3a3000-7f07fc3a5000 rw-p 00023000 08:01 14553008                   /lib/x86_64-linux-gnu/ld-2.15.so
7fff90e28000-7fff90e49000 rw-p 00000000 00:00 0                          [stack]
7fff90f1f000-7fff90f20000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

显示为运行 cat 程序而映射的所有内容。

关于c - 动态库实际上在内存中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20107020/

相关文章:

c++ - Linux 中 C++ 代码留下的文件句柄

linux - 从双启动切换到 Virtual Box

c - 过程信号掩码,阻塞信号集和阻塞信号之间的区别?

javascript - X11 xorg Electron App 无法全屏打开

c - 为什么 realloc 只复制部分数据?

c - 返回一个数组

c - … undefined reference …collect2 : ld returned 1 exit status

c++ - GCC优化isnan(x)是否可行|| isnan(y) 变成 isunordered(x, y)?

java - 重新创建对象之前是否需要清空ArrayList?

c++ - 使用 std::move 与使用指向线程的指针相比是否有性能成本?