Dereferenzierung beliebiger Speicherorte in C

8

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')

%Vor%

Ich kann verstehen, warum es gefährlich sein kann, jeden Punkt im Speicher zu berücksichtigen, also funktioniert das vielleicht nicht.

Danke!

    
Tyler 16.02.2010, 05:08
quelle

2 Antworten

7

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:

  1. Wikipedia-Artikel auf Virtueller Speicher .
  2. gdb documentation
Carl Norum 16.02.2010, 05:13
quelle
0

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.

    
Matthew Flaschen 16.02.2010 05:14
quelle

Tags und Links