2

是否可以执行二进制文件而不将其复制到硬盘驱动器?

我知道/lib/ld-linux.so.2可以加载任意二进制文件,但这仍然需要一个本地存储的文件,我的想法是分配一个内存区域,将内容复制到内存并执行它。

那有可能吗?

4

2 回答 2

0

我的想法是分配一个内存区域,将内容复制到内存并执行它。

对于静态链接的a.out,您可以这样做。

对于动态链接的,您需要类似dlopen_phdr的东西。

于 2013-04-14T21:39:22.287 回答
0

这是可能的,但非常困难。几年前我在这里研究过类似的问题。(注意!该代码不完整并且包含严重的错误。)

困难的部分是确保您的进程的地址空间要求不与二进制文件或动态链接器的(例如,/lib/ld-linux.so.2)冲突。如果您控制两个程序的内存布局(因为您链接了它们),您可以避免这个问题。(我的代码不承担这种控制,如果有必要,它会很费力地将自己移开。)

如果没有地址空间冲突,那就是为 exe 的 PT_LOAD 段(以及链接器的,如果有的话)分配内存,对齐和复制段,保护只读段,分配堆栈,初始化堆栈和寄存器内核的方式,并跳转到 exe 或链接器的入口地址。

于 2013-08-06T19:13:53.363 回答