为什么共享文件在一个过程中映射了4次

时间:2018-07-11 18:21:43

标签: linux proc-filesystem

我试图了解Linux中maps文件系统中的/proc。我观察到每个共享文件被映射4次,具有不同的偏移量和权限。我得出结论,这些必须是ELF中的不同部分,因此它们的映射方式不同(.text.data.rodata等)。

但是令人惊讶的是,两个映射在文件中始终具有相同的偏移量。考虑示例-

7fb8eebd6000-7fb8eebe0000 r-xp 00000000 08:06 3285700 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7fb8eebe0000-7fb8eeddf000 ---p 0000a000 08:06 3285700 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7fb8eeddf000-7fb8eede0000 r--p 00009000 08:06 3285700 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7fb8eede0000-7fb8eede1000 rw-p 0000a000 08:06 3285700 /lib/x86_64-linux-gnu/libnss_files-2.19.so

第二个和第四个条目以不同的权限映射到文件中的相同偏移处。 在上述objdump --headers文件上运行.so时,0xa000部分似乎出现了文件偏移.got.plt

24 .got.plt      00000160  000000000020a000  000000000020a000  0000a000  2**3
                 CONTENTS, ALLOC, LOAD, DATA

有人可以解释为什么它被映射了两次吗?

我知道PLT表是在第一次访问该函数时对其进行修补的,因此可能需要写许可权,但是为什么要另一个没有任何读/写许可权的映射呢?

编辑:我检查了其他一些共享库映射,而不是两次映射了.got.plt部分。但是,始终有一个节被两次映射,并且双重映射始终具有---p权限。

0 个答案:

没有答案