Zeiger einen Speicher zuweissen



  • Kann man einem Zeiger eine Adresse zuweissen, die ich aber bestimme ?



  • char *ptr = (char*)12345678;
    

    das verhalten ist natürlich undefiniert, aber machen kannst du's. Wenn das nicht reicht, gib mal mehr Details.



  • Bashar schrieb:

    char *ptr = (char*)12345678;
    

    das verhalten ist natürlich undefiniert, aber machen kannst du's. Wenn das nicht reicht, gib mal mehr Details.

    Das ist einfach. Und es geht prima, jetzt ist nur noch das Problem, dass das mal einer Probieren muss.

    int main()
    {
    char *c=(char*)-1073741824;
    int n=100000,l;
    for (l=0;n!=l;n)
    {
     c[l]=0;
    }
    
    return 0;
    }
    


  • Segmentation Fault



  • Bashar schrieb:

    Segmentation Fault

    Wieso das denn ?



  • Wahrscheinlich weil du über kurz oder lang mit diesem Konstrukt versuchst auf einen Speicher zuzugreifen, der dir nicht gehört und ein richtiges Betriebssystem wird dir da einen Riegel vorschieben.



  • Kurz oder lang ist gut, sofort. BTW fehlt die inkrementierung der Laufvariablen, aber das ist ja egal.

    chris223: Was erwartest du denn? Dann sag ich dir vielleicht, warum das nicht hinhaut.



  • @Bashar
    Ich neige immer gern zu Unter- bzw. Übertreibungen 😉



  • Also, nur mal zu testzwecken.

    Ich moechte den Speicher von c000 0000 bis d000 0000 uberschreiben.
    Mit der schleife muesst es doch gehen. Und wie kann ich auf speicher schreiben, der mit nicht gehoert ?



  • Garnicht! Das ist der Sinn bei modernen Betriebssystemen. Es gibt aber wahrscheinlich API Funktionen die dir das auf deinem OS erlauben. Welches OS hast du denn?



  • Shade Of Mine schrieb:

    Garnicht! Das ist der Sinn bei modernen Betriebssystemen. Es gibt aber wahrscheinlich API Funktionen die dir das auf deinem OS erlauben. Welches OS hast du denn?

    Da sich die Adresse bei einem Windowssystem auf den Grafikspeicher bezieht, wuerde mich die Info interessieren.



  • Seit wann kann man bei Windows direkt in den Grafikspeicher schreiben? BTW, bist du sicher, dass du nicht DOS und den Speicher von A000:0 bis A000:FFFF meinst?

    (Wieso gehst du eigentlich davon aus, dass hier jeder Windows hat??)



  • Bashar schrieb:

    Seit wann kann man bei Windows direkt in den Grafikspeicher schreiben? BTW, bist du sicher, dass du nicht DOS und den Speicher von A000:0 bis A000:FFFF meinst?

    (Wieso gehst du eigentlich davon aus, dass hier jeder Windows hat??)

    Als erstes, was ist BTW ???

    Ich habe doch nicht gesagt, das hier jeder windows hat. Normalerweise kommt hier nur Lunix und Unix rein, in den Forumteil.

    Und ich bin mir eigentlich sicher, das bei Win2000 der Speicher den ich schon schrieb, auch der grafikspeicher ist.

    Aber das ist auch egal, denn mich interessiert nur, wie ich ihr frei gebe und ueberschreiben kann.



  • Chris233 schrieb:

    Als erstes, was ist BTW ???

    By The Way ("Übrigens"). Eine der wichtigsten Internet-Abkürzungen.

    Ich habe doch nicht gesagt, das hier jeder windows hat. Normalerweise kommt hier nur Lunix und Unix rein, in den Forumteil.

    "Lunix"? Naja egal, jedenfalls hast du ein Programm gepostet, was deiner Ansicht nach nur unter Windows läuft, und dich dann gewundert, dass es bei mir abstürzt. Ich würd das schon so interpretieren, dass du davon ausgehst, dass ich Windows benutze. Wenn nicht, würd ich mich über Aufklärung freuen.

    Aber das ist auch egal, denn mich interessiert nur, wie ich ihr frei gebe und ueberschreiben kann.

    Du musst einen Treiber schreiben.



  • Also, mir war eigentlich egal, welches OS du nutzt, denn es soll ja bei allen gehen.
    Ich moechte keinen Treiber schreiben.

    Ich wollte nur mal sehen, ob es leicht ist, ein einfaches Programm zuschreiben, was den Speicher ueberschreibt, der dem Programm nicht gehoert.



  • Tja, dann weisst du jetzt, dass es nicht geht (ich kann deine Logik immer noch nicht nachvollziehen ... unter Windows soll der Grafikspeicher an einer bestimmten Adresse liegen, und darum muss das überall so sein?)



  • Bashar schrieb:

    Tja, dann weisst du jetzt, dass es nicht geht (ich kann deine Logik immer noch nicht nachvollziehen ... unter Windows soll der Grafikspeicher an einer bestimmten Adresse liegen, und darum muss das überall so sein?)

    Ich wollte doch nur rausfinden wie ich den Speicher ueberschreibe und nix weiter.

    Mir ist doch ganz egal, wo der Speicher bei Lunix oder Unix oder wo auch sonst ist.

    Das prinzip war nur wichtig, das ich weiss wie es geht.



  • @Chris
    Ich frag mich immer noch was du vorhast, irgendwas verschweigst du uns. Es muss doch einen Grund geben warum du Speicher überschreiben willst, der dir nicht gehört und nicht nur der, dass man weiß wies geht.



  • Ist es nur so schwer ?

    Ich wollte mal was neues ausprobieren mit programmieren und dazu bin ich auf die idee mit dem Speicher gekommen.

    Aber warum ist es nur so schwer, etwas zu ueberschreiben, was mir nicht gehoert ?
    Wie wird denn der speicher geschuetzt, auf den ich zugreiffen will ?



  • Genauso könntest du fragen warum man verstrahltes Uran mit Blei ummantelt.

    Ich hoffe du verstehst was ich meine...


Anmelden zum Antworten