2010-05-23 2 views
6

설명자 만 알면 파일을 실행해야합니다. 파일에 대한 링크가 없어도 이름을 찾는 것이 어떻게 든 옵션이 아닐 수도 있습니다. 모든 execve(), execvp() 등의 함수는 파일 이름을 사용합니다. dlopen()도 이름을 사용합니다.파일 설명자에서 프로그램을 실행하는 방법은 무엇입니까?

우스꽝스러운 해결책 (파일 읽기와 일부 함수 포인터 호출과 같은)은 괜찮습니다.

답변

7

fexecve을 사용하십시오.

추신 : 파일을 읽고 일부 함수 포인터를 호출하는 것은 분명히 이 아니며 OK입니다. :)

+0

간단한 해결책이 없으면 괜찮습니다. fexecve()를 호출 할 수만 있다면 그렇게하지 않을 것입니다. 고맙습니다. – stribika

+0

fexecve가 지원되지 않으면 mmap 및 libelf와 함께 끔찍한 일을 할 수 있습니다 - fdlopen을 만드는 종류. 그래도 그럴거야. 그래도 fexecve에 대해 알게되어 기쁩니다. 나는 그것에 대해 궁금해했지만 결코 전에 그것을 보지 못했다. – nategoose

+1

파일/dev/fd/n 또는/proc/self/fd/n을 사용할 수도 있습니다. n을 파일 번호로 바꾸고 일반 exec 호출에 전달하십시오. 이것은 fexecve가 두포에서 어떻게하는지입니다. –

1

흥미 롭습니다. 최선의 방법은 FD를 사용하여 임시 파일을 작성한 다음 일반 exec 호출을 사용하여 실행하는 것입니다.

mkstemp을 사용하면 고유 한 파일 이름을 보장 할 수 있습니다. 그런 다음 파일 디스크립터에서 내용을 읽고 임시 파일로 덤프하십시오. 그런 다음 exec 호출에서 mkstemp가 지정한 이름을 사용하십시오.

만약 당신이 어떤 이유로 새로운 파일을 쓰고 싶지 않다면, 나는 당신의 유일한 다른 옵션은 수동으로 exe 파일 이미지를 파싱하고, 메모리에 적절하게로드 한 다음 main() 함수를 호출하는 것이라고 생각합니다 . 그것은 이미 OS에 존재하는 많은 기능을 복제하고 있으며, 당신이 그것을하고 싶지 않다고 생각합니다. 그것은 옳은 것을 얻는 것이 어려울 것이며 노력할 가치가없는 것 같습니다.