Warum system(); vermeiden?



  • Hi,

    ich wollte hier mal fragen warum man z.B. system("pause"); vermeiden sollte?

    im gleichen Zuge wollte ich noch fragen welchen Befehl man dann nimmt für PC herunterfahren?

    system("shutdown.exe -f"); || system("stark.exe");

    oder sollte man sowas auch vermeiden, wenn ja, wie löse ich dies dann anders?

    Danke im voraus.



  • Die Funktion erlaubt Zugriffe auf das System.
    Es ist leicht diese Funktion im bestehenden Programm zu manipulieren um eigene Systemfunktionalitäten zu starten. Besonders wenn die Eingabe in deinem Programm variabel ist.
    Um sicherer zu arbeiten sollte man die WINAPI nutzen die analoge Funktionalitäten unter anderem mehr gekapselt bietet.



  • ExitWindows, glaube ich.





  • system() schrieb:

    ich wollte hier mal fragen warum man z.B. system("pause"); vermeiden sollte?

    Das kommt darauf an.
    Wenn du es während der Entwicklung deiner Anwendung einsetzt, stört das niemanden. In Real-World-Code gilt es allerdings mehr oder weniger als unelegant, ein externes Programm für etwas zu starten, das man auch durch den Aufruf der geeigneten Funktion hinbekommen hätte. Die Folgen sind unnötige externe Abhängigkeiten (herunterfahren kann jedes Windows-System, aber shutdown.exe gibt es AFAIK erst seit XP), geringere Performance (was bei shutdown.exe natürlich keine Rolle spielt, aber wenn du z.B. anfängst, für einen Task-Manager die Ausgabe von tasklist.exe zu parsen, wird es grenzwertig) und relativ große Störanfälligkeit (das Interface des benötigten Programmes könnte sich geändert haben, oder es könnte entfernt oder durch etwas anderes ersetzt worden sein; Windows-API-Funktionen verändern ihr Interface auf einer Plattform gewöhnlich nicht, und für das Abfangen von WinAPI-Aufrufen wäre die Injektion von Code in deinen Prozeß nötig).

    In der Unix-Welt wird das ein bißchen anders gesehen; dort hat system() auch seinen Ursprung. Allerdings ist das Starten eines Prozesses dort gewöhnlich nicht so teuer wie unter Windows.

    system() schrieb:

    im gleichen Zuge wollte ich noch fragen welchen Befehl man dann nimmt für PC herunterfahren?

    ExitWindowsEx().



  • system("pause") ist hochgradig unprofessionell imho. Warum? Ein Programm, welches nur auf der Konsole/Shell läuft, soll auch von der Konsole gestartet werden. Wer entweder dumme oder faule Anwender für das eigene Programm hat, kann statt dessen ein batch-file zur Anwendung beilegen, über das der Anwender das Programm starten kann und das die Konsole offen hält, like:

    MeinProgramm.exe -param1 -param2
    @ECHO OFF
    @PAUSE
    

    Alles besser als system("pause").
    Just my 2 Copper.
    rya.



  • Ich glaub Programme mit System Pause kann man recht leicht Exploiten.

    Z.b. anstatt System("PAUSE"); änder wer einfach das Pause in shutdown -s -t01 ( Nur ein beispiel ).


  • Administrator


Anmelden zum Antworten