4 Stimmen

Ändern der Adresse einer Variablen

Gibt es eine Möglichkeit, eine Integer-Variable auf die absolute Adresse zu setzen 0x67a9 auf den Wert 0xaa55 ? Der Compiler ist ein reiner ANSI-Compiler.

Wie kann dies erreicht werden?

Dies ist ein Programm, das sich auf eingebettete Systeme bezieht. Wie dort können wir auf einen bestimmten Speicherplatz zugreifen.

11voto

Bill Punkte 864

Versuchen Sie dies:

*((int*)0x67a9) = 0xaa55;

7voto

phoxis Punkte 55762
int *ptr = (int *) 0x67a9;
*ptr = 0xaa55;  // MBR signature ?

エディトリアル

あなた だめ die Adresse einer Variablen zu ändern, können Sie nur mit einem Zeiger auf eine Adresse zeigen, wie oben gezeigt.

0voto

user3015682 Punkte 1129

Das hängt davon ab, wie der Compiler kompiliert, würde ich denken.

-Wenn beim Kompilieren jede Instanz einer Variablen in eine endgültige Adresse dekodiert wird, können Sie die Adresse einer regulären Variablen nicht ändern.

-Wenn beim Kompilieren jede Instanz einer Variablen dekodiert wird, um auf eine Stelle in einer Nachschlagetabelle für ihre Adresse zu verweisen, könnte dies möglich sein, obwohl man am besten sicherstellt, dass die Adresse, auf die man sie setzt, zugewiesen ist.

Beispiel: Die Adresse der Variablen A ist 0x1000, und der an 0x1000 gefundene Wert ist 0x2000, also ist der Inhalt von A an 0x2000. Um die Adresse von A zu ändern, ändern Sie einfach den Wert an 0x1000. Setzen Sie den Wert von 0x1000 auf 0x3000 und der Inhalt von A steht dann bei 0x3000.

Ja, so funktionieren Zeiger, aber es könnte sein, dass ein Compiler sie unter der Haube gleich behandelt (reguläre Variablen sind einfach Zeiger, die automatisch dereferenziert werden). Natürlich könnten Sie auch einfach alle Variablen zu Zeigern machen und sich auf eine Menge Dereferenzierungen in Ihrem Code einstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X