在不创建本地文件的情况下执行ELF二进制文件?

时间:2013-04-12 11:39:20

标签: linux elf

是否可以在不将其复制到硬盘的情况下执行二进制文件?

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

那可能吗?

2 个答案:

答案 0 :(得分:0)

  

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

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

对于动态关联的内容,您需要dlopen_phdr之类的内容。

答案 1 :(得分:0)

这可能但非常困难。几年前我曾遇到过类似的问题here。 (注意!该代码不完整,包含严重错误。)

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

如果没有地址空间冲突,则需要为exe的PT_LOAD段(以及链接器,如果有的话)分配内存,对齐和复制段,保护只读段,分配堆栈,初始化堆栈和寄存器the way the kernel does,并跳转到exe或链接器的入口地址。