在 Linux 中,如何 dlopen 未压缩存储在另一个文件中的共享对象?

In Linux, how do I dlopen a shared object stored uncompressed inside another file?

几年前我听说 Google 有一个补丁可以 dlopen 存储在另一个文件中的非零偏移量的共享对象,或者 mmap'd,而不是位于它自己的独立文件中。那有没有着陆?加载这些对象的 API 是什么?

有一个长期但不完整的功能增强请求以在 glibc 中实现这一点,讨论在 https://sourceware.org/bugzilla/show_bug.cgi?id=11767

这是某人的概念实施证明。 https://github.com/m1m1x/memdlopen

Did that ever land in Linux mainline?

  1. 这与 Linux 主线没有任何关系:GLIBC 是一个完全独立于 Linux 内核的项目(人们通常称之为 "Linux mainline").
  2. 没有;我们仍然把它作为本地补丁。它有限制,这使得它有点不适合上游。

What's the API for loading these objects?

void *dlopen_with_offset(const char *name, off_t offset, int flags);