Ich versuche ein Programm zu debuggen, das ich geschrieben habe. Je nach Debugger enthält ein bestimmter void *
den Wert 0x804b008. Ich würde gerne in der Lage sein, diesen Wert zu dereferenzieren (erstelle ihn auf int *
und erhalte seinen Wert).
Ich bekomme einen Segmentierungsfehler mit diesem Code. (Das Programm mit dem void *
läuft immer noch im Hintergrund btw - es ist 'pausiert')
Ich kann verstehen, warum es gefährlich sein kann, jeden Punkt im Speicher zu berücksichtigen, also funktioniert das vielleicht nicht.
Danke!
Ihr Programm (wird im Debugger ausgeführt) und dieses Programm läuft nicht im selben virtuellen Speicherbereich; Der Zugriff auf diesen Zeiger (selbst wenn es ein gültiger war) gibt Ihnen keine Informationen.
Jedes auf Ihrem Rechner laufende Programm hat seinen eigenen logischen Adressraum. Ihr Betriebssystem, die Laufzeit der Programmiersprache und andere Faktoren können sich auf die tatsächlichen Literalwerte auswirken, die Sie als Zeiger für ein bestimmtes Programm verwenden. Aber ein Programm definitiv kann nicht in den Speicherplatz eines anderen Programms sehen, abgesehen natürlich Software-Debugger, die einige spezielle Tricks ausführen, um dieses Verhalten zu unterstützen.
In jedem Fall sollte Ihr Debugger den von Ihnen gewünschten Speicher anzeigen können, während Ihr Programm pausiert ist - vorausgesetzt, Sie haben eine gültige Adresse. In gdb x/x 0x804b008
würde Sie bekommen, was Sie sehen möchten.
Weitere Informationen:
gdb
documentation Es ist ziemlich einfach. Das Betriebssystem weiß, dass die Adresse nicht zu Ihrem Programm gehört, daher können Sie es nicht ausdrucken, ohne den Speicherschutz zu umgehen.
Tags und Links c memory pointers dereference