Globale Variablen verändern



  • Hallo, leider muss ich aufgrund der Bibliothek, die ich benutze(Freeglut), globale Variablen verwenden. Gibt es eine Möglichkeit diese aus main heraus zu verändern, sondas ich sie bei dem Programmaufrum zuweisen kann?



  • Was ist ein Programmaufruf (wenn es das ist was du nicht tippen konntest)?

    Ansonsten so:

    int foo;
    int main()
    {
        foo = 1;
    }
    


  • Programmaufruf, sorry 🤡

    ...ist es nicht wenn ich in die Konsole ./programm tippe?



  • Wenn du den Quellcode der Anwendung hast - kannst du auch mit der Parameterliste die globalen Daten ändern.

    #include <cstring>
    #include <iostream>
    
    int bla;
    int main(int argc,char*argv[])
    {
            bla=0;
            if(argc>1 && !strcmp(argv[1],"nutella"))
                    bla=1;
            std::cout<<bla<<"\n";
            return 0;
    }
    

    Ausführung:

    $ ./nutella 
    0
    $ ./nutella nutella
    1
    

    Ansonsten - d.h. wenn du den Quellcode nicht hast - solltest du dir die Frage stellen, was globale Variablen sind.

    Lösung: Portionen im .data-Segment einer Anwendung.

    Wenn du ein Programm hast, welches die Adressen dieser Variablen kennt, kannst du es aufrufen, damit es die Werte vorher überschreibt, bevor das Binary ausgeführt wird.
    Ist aber scheiße, weil dabei einiges schiefgehen kann.


Anmelden zum Antworten