【问题标题】:Exec(Linux). How it functions internally? Linux executable attributes(rlimit)执行(Linux)。它在内部如何运作? Linux 可执行属性(rlimit)
【发布时间】:2013-08-29 12:09:53
【问题描述】:

我想了解可执行文件的 rlimit 和管道限制是什么? 我正在调试一个问题,即动态构建的可执行文件在加载时崩溃,但静态构建的可执行文件很好。 当加载动态构建的可执行文件时,

我在寄存器转储后看到以下打印件

Process 2748(ls) has RLIMIT_CORE set to 1
Aborting Core

首先请一些人解释一下什么是 rlimit 与 exec 的透视图。还有一些叫做管道限制的东西吗?我看到了这个 proc 条目。

请指出一些解释可执行文件这些属性的资源。

问题 2: 加载可执行文件时, exec 究竟做了什么?链接器将加载我的可执行文件所需的共享库。因此,要发生这种情况,链接器(/system/bin 中的二进制文件)应该首先执行。

因此,我知道链接器(系统/bin/链接器)和可执行文件(ls)都是由 exec 加载的。我的理解正确吗?这都是理论。如果有人(可能同时擅长 fs 和 proc 管理)可以向我指出相关来源,那将是很大的帮助。谢谢。

【问题讨论】:

    标签: android linker linux-kernel filesystems exec


    【解决方案1】:

    RLIMIT_CORE 用于限制 coredump 在中止之前允许生成的信息量。一旦达到此限制,就不会记录更多信息,并且消息 Aborting Core 会记录到控制台。

    来自 core 的手册页:

    一个进程可以设置它的软 RLIMIT_CORE 资源限制,为收到“核心转储”信号时生成的核心转储文件的大小设置一个上限。 p>

    使用setrlimit()RLIMIT_CORE 配置为更大的值以获得完整的核心转储。


    最常见的可执行文件/共享对象格式是ELF。在 Linux 上,这些共享对象的动态加载和链接由 ld.so

    执行

    ld.so 被加载到一个新创建的进程的地址空间中(在这种情况下由 exec )并首先执行。这是可能的,因为它的路径在编译期间嵌入到可执行二进制文件的.interp 部分。

    然后是动态链接器

    • 加载初始可执行映像
    • 加载依赖的共享对象(*.so 文件)
    • 跳转到可执行文件的入口点

    参考:Dynamic linker on ELF-based Unix-like systems

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 2018-05-02
      相关资源
      最近更新 更多