How to execute a program from file descriptor?

你说的曾经没有我的故事 提交于 2019-12-19 17:32:42

问题


I need to execute a file when I only know the descriptor. It is also possible that there are no links to the file so finding out the name somehow is not an option. All the execve(), execvp(), etc functions take a file name. dlopen() also takes a name.

Ugly solutions (like reading the file and calling some function pointer) are OK.


回答1:


Use fexecve.

PS: reading the file and calling some function pointer is definitely not OK. :)




回答2:


Interesting. I think your best bet is going to be to use the FD that you have to write a temporary file and then exec it using a normal exec call.

You can use mkstemp to make a guaranteed unique file name. Then read the content from your file descriptor and dump it to the temp file. Then use the name given to you by mkstemp in an exec call.

If you don't for some reason want to write a new file then I think your only other option will be to manually parse the exe file image, load it properly in memory, and then call it's main() function. That's duplicating a lot of functionality that already exists in the OS, and I don't think you want to do it. It will be hard to get right, and does not seem to be worth the effort.



来源:https://stackoverflow.com/questions/2892503/how-to-execute-a-program-from-file-descriptor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!