0

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

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

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

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

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

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

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

4

1 回答 1

1

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

core的手册页:

一个进程可以设置它的软RLIMIT_CORE资源限制来设置一个核心转储文件的大小上限,如果它接收到一个“核心转储”信号就会产生这个文件。

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


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

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

然后是动态链接器

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

参考:基于 ELF 的类 Unix 系统上的动态链接器

于 2013-08-30T03:47:12.000 回答