2010-05-23 8 views
6

Ich muss eine Datei ausführen, wenn ich nur den Deskriptor kenne. Es ist auch möglich, dass es keine Links zu der Datei gibt, daher ist es nicht möglich, den Namen herauszufinden. Alle Funktionen von execve(), execvp() usw. haben einen Dateinamen. dlopen() nimmt auch einen Namen.Wie führe ich ein Programm vom Dateideskriptor aus?

Hässliche Lösungen (wie das Lesen der Datei und das Aufrufen eines Funktionszeigers) sind OK.

Antwort

7

Verwenden Sie fexecve.

PS: Lesen der Datei und Aufruf eines Funktionszeigers ist definitiv nicht OK. :)

+0

Ich meinte, es ist in Ordnung, wenn es keine einfachen Lösungen gibt. Ich werde das nicht tun, wenn ich nur fexecve() aufrufen kann. Vielen Dank. – stribika

+0

Wenn fexecve nicht unterstützt wird, könntest du mit mmap und libelf ein paar schreckliche Sachen machen - das macht einen fdlopen. Das würde aber scheiße machen. Ich freue mich aber, über fexecve zu erfahren. Ich habe mich gefragt, aber ich habe es nie zuvor gesehen und musste es nie haben. – nategoose

+1

Sie können auch die Dateien/dev/fd/n oder/proc/self/fd/n verwenden, ersetzen Sie einfach n durch die Dateinummer und übergeben Sie sie an einen normalen Exec-Aufruf. So macht es fexecve unter der Haube. –

1

Interessant. Ich denke, Ihre beste Wette wird sein, die FD zu verwenden, die Sie eine temporäre Datei schreiben müssen, und es dann mit einem normalen exec-Aufruf auszuführen.

Sie können mkstemp verwenden, um einen eindeutigen Dateinamen zu garantieren. Lesen Sie dann den Inhalt aus Ihrem Dateideskriptor und legen Sie ihn in die temporäre Datei ab. Verwenden Sie dann den Namen, den Ihnen mkstemp in einem Exec-Aufruf gegeben hat.

Wenn Sie nicht aus irgendeinem Grund eine neue Datei schreiben möchten, dann denke ich, Ihre einzige andere Option wird das EXE-Dateibild manuell analysieren, laden Sie es ordnungsgemäß im Speicher, und rufen Sie es dann main() -Funktion . Das ist eine Duplizierung vieler Funktionen, die bereits im Betriebssystem vorhanden sind, und ich glaube nicht, dass Sie das tun wollen. Es wird schwer sein, richtig zu werden, und es scheint nicht die Mühe wert zu sein.

Verwandte Themen