Aus einem C Prog eine andere EXE Datei starten
-
mit fork() oder system()...
-
Unrecht hast du nich, benutze hauptsächlich Windoof, aber jetzt für das Thema bräuchte ich es sogar in Linux/Unix
-
Reasar schrieb:
Unrecht hast du nich, benutze hauptsächlich Windoof, aber jetzt für das Thema bräuchte ich es sogar in Linux/Unix
für Linux:
man system
man fork
Mit system ist das so eine gefährliche sache...benutze lieber fork...
ansonsten system("foo");
-
Ich werds mal ausprobieren. Ersma danke an euch !
-
xxx_L schrieb:
Mit system ist das so eine gefährliche sache...benutze lieber fork...
Gefährlich eher nicht, nur unschön, unpraktisch und ineffizient.
(Und ich weiß dass ich mich wiederhole, aber schau auch bei man: exec mal rein!)
-
nman schrieb:
Gefährlich eher nicht, nur unschön, unpraktisch und ineffizient.
oder praktisch und effizient... je nachdem.
Und fork() braucht man nur, wenn die Prozesse synchron laufen sollen.
-
DrGreenthumb schrieb:
oder praktisch und effizient... je nachdem.
Naja, vor allem wenn man wirklich die Funktionalität einer Shell braucht halt, oder?
-
nman schrieb:
DrGreenthumb schrieb:
oder praktisch und effizient... je nachdem.
Naja, vor allem wenn man wirklich die Funktionalität einer Shell braucht halt, oder?
Ja... bezogen auf diesen Thread, käme es darauf an, was für ein Programm gestartet werden soll.
Bevor dann jemand schreibt fork(); exec("/usr/bin/vim") wäre zB. ein system("vim") viel besser.Jetzt wirds nur gefährlich, wenn daraus ein system("vim " + datei) werden sollte
-
DrGreenthumb schrieb:
Bevor dann jemand schreibt fork(); exec("/usr/bin/vim") wäre zB. ein system("vim") viel besser.
Wenn du vim so in Linux aufrust (system("vim")) hast du automatisch ein riesen sicherheitsloch geöffnet, denn so kann man unter linux mit 3-4 Befehlen den Useraccount hacken unter dem das Programm ausgeführt wird!!!
Also lieber komplette Pfadangaben verwenden!!!
Gruß Wolle
-
Nein, dass ist Quatsch.
1.) exec(..vim) kommt ohnehin einem exec("/bin/sh") gleich.
2.) Wenn die aufrufende Anwendung mit superuser-bit läuft, muss man natürlich mehr aufpassen. Aber das ist die absolute Ausnahme und in diesem Fall, siehe Punkt 1.
-
Hier ein kurzer Auszug aus einem (zugegebenem nicht ganz aktuellem) Bericht. Hier zwar im Bsp in Perl jedoch gilt das selbe für C/C++:
PATH attacks
When one program starts another program, the exact path of the intended program should be given. Some programs rely on the PATH variable to search for a program, but this allows users to insert a fake program into the PATH list which will be executed instead. e.g.#!/usr/bin/perl
# ....
system("ls"); # should be system("/bin/ls");
Über "exec" kann ich nicht mitreden da ich kaum für Linux (Unix) programmiere und deshalb noch nie von "exec" gebrauch machen musste, jedoch bezog sich mein Beitrag nur auf "system" (so wie du in deinem vorherigen Post davon gebrauch gemacht hast :p
).
Ich wollte nur darauf hinweisen, ob ihr es am Ende macht ist eure Sache, jedoch denke ich das sich dieser geringe Aufwand lohnt auch wenn dieser PATH-Trick auf den meisten Systemen nicht mehr funktioniert.
Gruß Wolle
-
das ist aber auch nur relevant, wenn das Programm mit mehr Rechten läuft.