在 RAMDisk 上执行二进制文件是不是会将可执行文件重新加载到内存中?

Posted

技术标签:

【中文标题】在 RAMDisk 上执行二进制文件是不是会将可执行文件重新加载到内存中?【英文标题】:Does executing a binary on a RAMDisk reload the executable into memory?在 RAMDisk 上执行二进制文件是否会将可执行文件重新加载到内存中? 【发布时间】:2014-06-03 13:59:41 【问题描述】:

假设我有两个相同的 10MB 二进制可执行文件,AB

如果我有足够的可用内存并运行./A,我的理解是A 将被加载到内存中并从那里运行。这将需要大约 10MB 的 RAM 才能完成。

如果我有足够的可用内存,创建一个 RAMDisk,将 B 复制到 RAMDisk,然后从 RAMDisk 运行 ./B,我的理解是 B 将被(重新)加载到内存中并从那里。这将需要大约 10MB 的 RAM 用于可执行文件,加上 RAMDisk 正在使用的内存。

这是正确的吗? RAMDisk 是否足够聪明,可以说“哦,我已经在内存中有二进制可执行文件,让我们就地运行它?”即使是这样,加载程序不是必须施展魔法来运行它吗?

我正在使用 QNX 并运行 ELF without COFF 二进制文件,但我希望得到任何 *Nix 系统的答案。

【问题讨论】:

【参考方案1】:

我真的希望它被加载,典型的 ELF 二进制文件真的不是“execute in place”格式。

您需要做一些事情,例如重新定位任何与位置无关的代码,当然还有动态库加载,RAM 磁盘上的文件系统对此一无所知。

【讨论】:

以上是关于在 RAMDisk 上执行二进制文件是不是会将可执行文件重新加载到内存中?的主要内容,如果未能解决你的问题,请参考以下文章

调试选项 -g 如何更改二进制可执行文件?

我应该对转换和删除的图片使用 ramdisk 吗?

如何在 Android NDK 项目中包含二进制文件?

分别构建第二个可执

在构建期间生成 ramdisk 并填充内容

反编译和反汇编有啥区别?