assignment makes pointer from integer without a cast
-
Hallo allerseits!
Bin recht neu in der C Programmierung und bin gerade bei dem Thema pointer.
Ich habe ein kleines Programm geschrieben was an der Speicheradresse ... den Intergerwert verändern soll aber das scheint nicht zu funktionieren.
Kann mir einer sagen warum und wie man es machen kann?int main(){ int *ptr; ptr = 2293620; //Irgendeine Adresse *ptr = 5; }
-
Das ist nur ein Sicherheitsmechanismus, weil meistens, wenn man sowas schreibt, man was anderes wollte.
Du kannst dem Compiler sagen: Ich will aber, daß die 2293620 als Zeiger auf einen int behandelt wird, und ihn damit dazu bringen, die Klappe zu halten.int main(){ int *ptr; ptr = (int*)2293620; //Irgendeine Adresse *ptr = 5; }
-
Bei mir stützt das Programm anschließend ab. Ich habe mich mal informiert und herausgefunden das der Arbeitsspeicher seinen Speicher schützt. Kann man diesen Schutz umgehen?
-
Warum willst du an irgendwelche Stellen des Speichers schreiben, auf die du garnicht zugreifen sollst?
-
Pointer2 schrieb:
Bei mir stützt das Programm anschließend ab. Ich habe mich mal informiert und herausgefunden das der Arbeitsspeicher seinen Speicher schützt. Kann man diesen Schutz umgehen?
Nee.
Prinzipiell nein.~Naja, als Administrator und mit dem Trick von sysinternals kommt man doch ran.~
Was willst Du eigentlich im Speicher machen, den fremde Anwendungen belegen?
-
Dein Programm arbeitet in einer Art Sandbox und bekommt vom OS Speicher zugewiesen, solltest du ausversehen auf eine ungültige Speicherstelle zugreifen so ist dies nicht schlimm. Dein Programm stürzt einfach nur ab mehr passiert nicht. Je nach Compiler kann man automatisch ausschließen ob zu z.B über Arraygrenzen hinweg schreibst ohne dass du dafür extra einen Bereichscheck machen musst was wieder Performance kostet.
-
Weißt du denn was an der Speicherstelle 2293620 ist?
Ein Programm kann eigentlich nur in dem von ihm benutzten Speicherbereich schreiben. Wenn dem Programm die Speicherstelle 2293620 gehört klappt das auch.
Wenn das was du da vor hast so einfach klappt, würde dein Computer schon längst unter der Kontrolle von irgendeinem Bot-Netz sein.
-
Schade xD
Ich wollte so eine Art Trainer für ein Spiel schreiben und habe zum test ein Programm geschrieben das eine int Variable anlegt und mit 5 initialisiert. Dort habe ich dann die Adresse ausgegeben und wollte sie verändern. Aber das wär wirklich eine riesige Sicherheitslücke fällt mir gerade auf selbst für Windows xD