将自定义数据嵌入到不会被 ld.so 映射的 ELF 文件中

Embedding custom data into ELF file that will not get mmap'ed by ld.so

我有一个 500MB 的文件,其中包含一些自定义数据(即 ZIP 存档)。我想将它嵌入到我的 ELF 可执行文件中,这样当我分发 ELF 文件时,我将只能发送 1 个文件而不是 2 个文件。

问题是我不希望 OS 在我的应用程序启动时自动加载这 500MB ZIP 数据。我希望我的应用程序打开它自己的文件,找到数据,并以这种 "lazy" 方式使用这些数据。

在 Windows,可以将这个 500MB 的 ZIP 文件放到 PE 资源中。这样这些数据就不会被可执行加载程序加载。

ELF 格式中是否有一个地方可以嵌入如此大量的数据,而不会被 OS 自动映射?

我知道我可以将数据附加到文件末尾,然后 OS 应该在加载阶段跳过它。但是是否可以使用ELF结构来嵌入这些数据?

Is there a place in the ELF format to embed such big amount of data in a way that it won't get mapped by the OS automatically?

这对 ELF 来说很简单——只需将数据放入未分配的部分。

使用 objcopy 将任意数据文件转换为可以链接到的 .o 最简单:

objcopy -I binary -B i386 -O elf64-x86-64 \
  --rename-section .data=.mydata,readonly,contents src dst.o