linux ELF部分和头部访问权限

时间:2012-08-16 07:05:50

标签: linux memory permissions elf readelf

根据我的理解,ELF标题用于程序执行视图。 section是链接器的视图。

但linux命令'readelf'显示有 每个部分的内存访问权限标志(AWX) 和每个标题(RWE)。

该书说不止一个部分被合并为单个标题。 如果链接器将多个节合并到单个标头中会发生什么 并且每个部分都有不同的访问权限标志??

和/ proc / [pid] / maps中的访问权限之间的关系是什么 比如

root@declspec-desktop:/tmp# cat /proc/1951/maps
004a5000-005f8000 r-xp 00000000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so
005f8000-005fa000 r--p 00153000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so
005fa000-005fb000 rw-p 00155000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so

和节和标题中的访问权限??

这些权限(/proc/[pid]/maps)如何确定?

2 个答案:

答案 0 :(得分:0)

根据我对上面示例的理解,/ proc // maps中的权限是与不同部分关联的权限。例如,在上面的代码段中,带有权限的条目 - 'r-xp'给出了.text段的地址(代码存在的位置)。因此,如果您检查,它不包含'w'权限,因为我们不应该在执行二进制文件中编写新代码。 所以,在上面的例子中 -

004a5000-005f8000 r-xp 00000000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so - TEXT AREA which contains executable code

005f8000-005fa000 r--p 00153000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so - Area that contains read only variables or constants (.rodata data)

005fa000-005fb000 rw-p 00155000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so - Area where we have variables used by program i.e. (.data)

抱歉,我无法解答您的其他问题。你能详细说明吗?还有,你在谈论哪本书?

答案 1 :(得分:0)

我的理解是程序头(或段)包含合并到其中的部分的按位或权限。 因此,在您的示例中,如果RW部分与R--部分合并为一个段,则最终将成为RW-。为避免这种情况,您可以安排将它们放在独特的部分中。

如果你有'.hello'部分(这确实可能!)那么它在内存映射中的条目取决于哪个部分包含它。权限至少与部分一样严格,但如果在同一段中还有其他具有附加权限的部分,则可能更宽松。

但对我来说 - 目前尚不清楚为什么有人在谈论'部分'如何以“可执行文件”结束。正如OP所提到的,部分用于链接,而段用于加载。有一个没有部分的ELF并且仍然加载并正常运行是没关系的。 / proc / map lines only 对应于段表