Wie man einen Wert von einer absoluten Adresse durch C-Code liest

Lesezeit: 3 Minuten

Benutzer-Avatar
niteshnarayanlal

Ich wollte einen Wert lesen, der an einer Adresse gespeichert ist, deren Absolutwert bekannt ist. Ich frage mich, wie ich das erreichen könnte. Zum Beispiel. Wenn ein Wert bei 0xff73000 gespeichert wird. Dann ist es möglich, den hier gespeicherten Wert über den C-Code abzurufen. Danke im Voraus

  • Technisch ja. Wenn der Wert beispielsweise eine Ganzzahl ist, könnten Sie Folgendes deklarieren: int *xp = 0xff73000; dann in Ihrer Codereferenz *xp. Wird normalerweise auf eingebetteten Systemen verwendet. Wenn Sie dies unter Windows oder Linux versuchen, erhalten Sie wahrscheinlich eine Speicherausnahme.

    – Schleicher

    11. September 2013 um 12:29 Uhr


  • Jedes Programm hat seinen eigenen Speicher, der vom Betriebssystem zugewiesen wird, daher ist es “unmöglich”, solche Dinge abzurufen. Weiterlesen hier [windows]

    – Kyslik

    11. September 2013 um 12:29 Uhr


  • Woher wissen Sie, dass der Wert an dieser Adresse gespeichert ist? Der Punkt des geschützten Modus ist, dass es für eine Anwendung unmöglich ist, fest codierte Speicheradressen zu verwenden. Das ist wahrscheinlich im Land der speicherabgebildeten Geräte. Sind Sie sicher, dass Sie das tun möchten?

    – Dan

    11. September 2013 um 12:32 Uhr

  • Würden Sie bitte erklären, was der Kontext Ihres Problems ist? Warum müssen Sie das tun? Programmierst du für Bare Metal?

    – Lorenzo Donati unterstützt die Ukraine

    11. September 2013 um 12:34 Uhr

  • Zuerst müssen Sie definieren, welchen Adressraum Sie meinen – physische Adresse oder virtuelle Adresse? Userspace oder Kernelspace?

    – Chris Dodd

    26. April 2020 um 19:52 Uhr

Benutzer-Avatar
Zdenek Gromnica

Zwei Wege:

1. Adressliteral als Zeiger umwandeln:

char value = *(char*)0xff73000;

Wandeln Sie das Literal in einen Zeiger auf den Typ um.

und

Mit dem Präfix dereferenzieren *.

Dieselbe Technik gilt auch für andere Typen.

2. Weisen Sie die Adresse einem Pointer zu:

char* pointer = (char*)0xff73000;

Greifen Sie dann auf den Wert zu:

char value = *pointer;
char first_byte = pointer[0];
char second_byte = pointer[1];

Wo char ist der Typ, den Ihre Adresse darstellt.

Benutzer-Avatar
Juraj Blaho

Weisen Sie einfach die Adresse einem Zeiger zu:

char *p = (char *)0xff73000;

Und greifen Sie nach Belieben auf den Wert zu:

char first_byte = p[0];
char second_byte = p[1];

Beachten Sie jedoch, dass das Verhalten plattformabhängig ist. Ich gehe davon aus, dass dies für eine Art eingebettete Programmierung auf niedriger Ebene gilt, bei der die Plattformabhängigkeit kein Problem darstellt.

  • Danke für die Antworten, ich habe versucht, auf den Statusregisterwert für einen i2c-Bustreiber zuzugreifen. Das oben Gesagte führte zu einer Kernel Panic.

    – niteshnarayanlal

    12. September 2013 um 4:59 Uhr

  • Wie würde man das machen, wenn Sie die Adresse in einer Variablen haben?

    Benutzer4244405

    29. Dezember 2015 um 3:30 Uhr

  • Sie können es einfach kopieren.

    – unendlichLerner

    6. Januar 2019 um 10:15 Uhr

  • Wooooooh fühlt sich an, als wäre ich gerade der Meister im Array geworden, nachdem ich deine Antwort gelesen habe 🙂

    – Santreffen

    10. November 2021 um 5:23 Uhr

Benutzer-Avatar
Ari

char* p = 0x66FC9C;

Dies würde diese Warnung verursachen:

Test.c: In Funktion ‘main’: Test.c:57:14: Warnung: Initialisierung macht Zeiger aus Integer ohne Cast [-Wint-conversion]
Zeichen * p = 0x66FC9C;

Um eine bestimmte Adresse festzulegen, müssen Sie Folgendes tun:

char* p = (char *) 0x66FC9C; 

  • Willkommen bei Stapelüberlauf!

    – LF

    24. Februar 2019 um 11:39 Uhr

  • @LF Gib mir einen Daumen nach oben, damit ich richtig kommentieren und posten kann, hahah

    – Ari

    24. Februar 2019 um 11:42 Uhr

1186000cookie-checkWie man einen Wert von einer absoluten Adresse durch C-Code liest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy