Bestimmte Speicheradresse mit C schreiben/lesen

Gast #542932
Lesenswert?

Hallo,

ich werde wohl bald vor der Aufgabe stehen, in einem C-Programm eine 
bestimmte Speicheradresse lesen bzw. beschreiben zu müssen. Gibt es da 
eine Möglichkeit, einen Speicherbereich mit seiner Hex-Adresse 
anzusprechen, also quasi am Compiler/Linker vorbei? Oder muss ich auf 
Assembler zurückgreifen?

Hintergrund ist, dass an dieser Stelle eine FPGA-Regelung einen Wert 
ablegt.
Gast #693449
Lesenswert?

Hallo alle zusammen,
Ich hab schon viele Forume durchgesucht aber nix gefunden über 
Speicheradressen lesen in C#, und hier hab ich was gefunden aber halt in 
C wie man die Speicheradresse lesen kann, nun ist die frage ob man das 
auch in C# so benutzen kann.
Ich würde mich freuen wenn mir jemand sagen könnte wie man das machen 
könnte in C#.
Ich finde das Forum hier auch bis jetzt das Beste wo ich gefunden habe, 
hat sehr viele nütztliche Post's. Und es gibt hier viele Leute wo echt 
viel ahnung haben von ihrem Fach, das freut mich besonders.
Werde das so testen wie es hier weiter oben beschrieben ist:
int *adresse = 0x1234;
int wert = *adresse;
Ob es in C# geht.
Liebe grüsse von Sap
Gast #693622
Lesenswert?

Danke Karl für die schnelle antwort.
Hab nun raus wie ich Speicheradresse lesen kann in C#.
Hier was ich getestet habe, vielleicht kann es ja dann später irgend wem 
helfen:
            unsafe
            {
                 // *i ist der Valor von der Speicheradresse
                 //  i ist die Speicheradresse

                int y = 7; // Speicheradresse ist: 69133040
                int x = 4; // Speicheradresse ist: 69133036
                int *i = (int*)69133036;
               // int* i = &x; zum sehn welche Speicheradresse x hat
                int aux = (int)*i; // ergebnis wäre 4
               // int aux = (int)i; // ergebnis wäre Speicheradresse
                MessageBox.Show(aux.ToString());
            }
Die Speicheradresse kann verschieden sein bei jedem.
#1665250
Lesenswert?

Patrick S. schrieb:
> entweder verstehe ich das falsch, oder die antworten sind alle nicht auf
> die überschrifft bezogen

Du verstehst das dann falsch. Bis auf die letzten 3 (die das ganez unter 
C# behandeln) sind alle Antworten 'on topic'

> er fragt ja auch, wie er einen wert an eine bestimmte Adresse schreiben
> kann.
>
> Würde mich nämlich auch interessieren, wie das geht ;-)

Du nimmst die Adresse als Zahl, castest sie in einen Pointer um und 
greifst über den Pointer zu.
Gast #2301773
Lesenswert?

Hallo zusammen,

bei mir funktioniert folgendes:

int *iAddress = reinterpret_cast<int*>(0x1234);

aber mit float funktioniert es nicht:

float *fAddress = reinterpret_cast<float*>(0x1234);

Hat jemand eine idee?
Gast #2301837
Lesenswert?

Ok, was ich geschrieben hab stimmt so nicht, die von mir oben genannten 
beispiele funktionieren, den fehler bekomme ich nur bei folgender Zeile:

float *fAddress = reinterpret_cast<float*>(sAddress.toFloat());

int *iAddress = reinterpret_cast<int*>(sAddress.toInt()); <-- wird 
richtig compiliert

sAddress ist ein QString.
#2301848
Lesenswert?

Bash_s schrieb:
> Ok, was ich geschrieben hab stimmt so nicht, die von mir oben genannten
> beispiele funktionieren, den fehler bekomme ich nur bei folgender Zeile:
>
> float *fAddress = reinterpret_cast<float*>(sAddress.toFloat());

toFloat() liefert einen float?


Na ja, was erwartest du, wie soll man aus einem Float (warum eigentlicgh 
float?) eine Adresse machen?  Welches ist denn das 2.5 te Byte?

Ich denke du machst einen Fehler. Im Speicher liegt an dieser Adresse 
ein float. Aber deswegen ist ja die Adresse selber kein float! Eine 
Adresse ist immer eine ganze Zahl. Du musst unterscheiden zwischen der 
Adresse selber und dem was unter dieser Adresse im Speicher zu finden 
ist. Das eine hat mit dem anderen insofern nix zu tun, als eine Adresse 
einfach nur eine ganze Zahl ist. Wenn ich dann diese Zahl hernehme und 
mir die Bytes von dieser Speicheradresse hole, dann kann ich mit diesen 
Bytes einen float bilden. Aber deswegen ist ja eine Adresse kein float.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren