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.
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
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
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. –