【问题标题】:linux ELF section and header access permissionlinux ELF部分和头部访问权限
【发布时间】:2012-08-12 12:18:03
【问题描述】:

在我的理解中,ELF header 是用于程序执行视图的。 部分供链接器查看。

但是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

以及section和header中的访问权限??

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

【问题讨论】:

    标签: linux memory permissions elf readelf


    【解决方案1】:

    根据我对上面示例的理解,/proc//maps 中的权限是与不同部分关联的权限。例如,在上面的 sn-p 中,具有权限的条目 - '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)
    

    抱歉,我无法关注您的其他问题。你能详细说明一下吗?另外,你说的是哪本书?

    【讨论】:

    • 当链接器可执行时,书上说(它是一本编译器的书,不是著名的..)节将被合并到段中。但 readelf 显示每个部分都有自己的权限,每个段也有自己的权限。现在假设 A 部分具有权限 RW-,而 B 部分具有权限 R--。如果一个段 C 是从 A、B 部分合并的,C 必须有什么权限? R——??或 RW-??
    • 我知道“为什么” .text 部分只需要 r-x 权限,而 .data 部分需要 rw- 权限。我很好奇的是“如何”从/proc/pid 确定权限。假设可执行 ELF 文件中有一个“.hello”部分。基于 /proc/pid 中的权限是什么决定的??
    • 不能有 .hello 部分。部分是预定义的,所有二进制文件都有相同的部分。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 2011-12-27
      相关资源
      最近更新 更多