从pipe道执行二进制文件的内容

总之, 如何运行一个bash压缩脚本? ,但这可以用二进制,而不是一个shell脚本?


假设我有一个压缩成.gz的二进制文件。 我可以解压缩到一个pipe道,然后检查内容:

 $ gzip -d --stdout hello.gz | 文件 - 
 / dev / stdin:ELF 64位LSB可执行文件,AMD x86-64,版本1(SYSV),dynamic链接(使用共享库),未删除
 $ 

而不是pipe道输出到一个命令,有什么办法,我可以实际执行pipe道本身的内容,而不写入文件?

我考虑使用命名pipe道,但这似乎并不工作:

 $ mkfifo execpipe
 $ chmod 777 execpipe
 $ gzip -d --stdout hello.gz> execpipe&
 [3] 30034
 $ ./execpipe 
 bash:./execpipe:权限被拒绝
 $ [3] +损坏的pipe道gzip -d --stdout hello.gz> execpipe

 $ 

有没有办法执行一个pipe道的内容而不创build一个实际的文件?

我相信答案是否定的。

您可以通过将文件传递给Linux加载程序来手动执行文件,该加载程序将被命名为/lib/ld-linux.so*它需要一个实际的文件,但。 它不能执行管道或标准输入; 它需要能够mmap()文件。

 $ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /bin/true $ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 - < /bin/true -: error while loading shared libraries: -: cannot open shared object file: No such file or directory $ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 <(cat /bin/true) /dev/fd/63: error while loading shared libraries: /dev/fd/63: invalid ELF header 

*在我的Red Hat机器上是/lib/ld-linux.so.2位)或/lib64/ld-linux-x86-64.so.2位)。 在我的Ubuntu机器上是/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2