Zugriff auf bestimmte Speicherbereiche in C

In Assembler haben wir Anweisungen wie:

movl ax, [1000]

Dieser ermöglicht uns den Zugang zu bestimmten Speicherbereichen.

Aber in C können wir etwas tun, ähnlich wie diese?

Weiß ich inline-Assembler-code mit asm() wird Ihnen erlauben, dies zu tun,
aber ich würde gerne wissen, über einige C bestimmte Technik, dies zu erreichen.

Habe ich versucht den folgenden code und bekam Segmentierung Fehler:

int *ptr=0xFE1DB124;
*ptr;

Das war wieder verwirrend, da die Speicherstelle identifiziert wurde, indem Sie den unten angegebenen code ein:

int var;
printf("\nThe Address is %x",&var);

Also der Speicherbereich verfügbar ist, aber ich bin noch immer ein "segmentation fault".

Warum?

  • Moderne OSs randomize-Speicher-Abschnitt-Adressen (es macht einige Angriffe schwieriger), so dass, wenn Sie neu starten, Programm-Adresse Ihrer Variablen unterscheiden.
  • Moderne Betriebssysteme nicht zeigen die tatsächlichen physikalischen Adressen zu Programme. Ihre printf drucken wird eine virtuelle Adresse. Ich habe keine Ahnung, wie Sie daran vorbei, um die tatsächliche Adresse. Außerdem ist das OS wird nicht lassen Sie Ihr Programm Zugriff auf den Speicher außerhalb der zugewiesenen Grenzen.
  • Welche code-Zeile verursacht die Segmentierung Fehler ?
  • Aber ich dachte, wir bekommen segmentation fault nur, wenn wir Zugriff auf Teile des Hauptspeichers enthält system-Programme.
  • Die Zeile, wo ich versuchte, das zuordnen einer bestimmten Adresse auf die der Zeiger ptr. int *ptr=0xFE1DB123;
  • Die Linie sollte in Ordnung sein. Hovever, wenn du hast *ptr = some number, die Versagen sollte.
  • Hängt vom OS. Eine gute (=sicherer) OS geben wird "segmentation fault" wenn Sie den Zugriff auf Speicher, die nicht an den Prozess reserviert.
  • Sind Sie sicher, dass Sie bekam, dass die Adresse richtig? Die meisten Compiler setzen int - Variable auf einer geraden Adresse. Siehe auch zch Kommentar immer verschiedene Adressen jeder Ausführung.
  • Lindback: es tut mir Leid. Korrigiert habe ich es, aber der segmentation fault steht.

InformationsquelleAutor Deepu | 2013-03-26
Schreibe einen Kommentar