Forum: PC-Programmierung Hilfe bei Ram Adressierungen


von Draco (Gast)


Lesenswert?

Hi Leute,

erschlagt mich nicht :D Aber ich bin in C nicht so ganz konform. Aber 
ich benötige die Daten dieser Adresse wirklich. Jedoch habe ich nicht so 
wirklich die Ahnung wie ich daran komme, erstmal zu 
grundverständnissfrage:

ich habe folgenden Zeiger auf eine Adresse:
1
fCurrDataA = new Address(0x00c15b55, 7344);

Die erste Zahl (hex) ist die Adresse, die zweite Zahl (dec) ist der 
offset.

Nun kommt das Problem was ich nicht zu lösen weis:

"You need to read 4 byte integer to this Address (1st digit)" <- heißt 
das das der erste Wert mir eine Integer von dieser Adresse zurückgibt?

"To this number to add a decimal number (2 number form the address)." <- 
soll ich nun die hinteren zahlen dazuaddieren oder übergibt mir die 
Speicheradresse zwei Werte welche ich addieren muß?

Das Resultat dieser Rechnung jedenfalls gibt mir die Speicherposition 
zurück an welchen ich meine Daten auslesen kann.

von Marius W. (mw1987)


Lesenswert?

Wenn du einen Zeiger auf die Adresse 0x00c15b55 mit Offset 7344 
brauchst, dann nimm das hier:
1
void *zeiger = (void *) (0x00c15b55 + 7344);

MfG
Marius

von Rolf Magnus (Gast)


Lesenswert?

> erschlagt mich nicht :D Aber ich bin in C nicht so ganz konform.

Meinst du "firm"?

> ich habe folgenden Zeiger auf eine Adresse:
>
> fCurrDataA = new Address(0x00c15b55, 7344);

Das sieht erstmal nicht nach C aus, denn da gibt es keinen Operator 
new, Könnte eher C++ sein, und mit "Adresse" ist anscheinend eine 
Instanz einer Klasse namens "Address" gemeint. Nur läßt sich das in 
keiner Weise mit dem in Zusammenhang bringen, was du im Folgenden 
schreibst.

> Die erste Zahl (hex) ist die Adresse, die zweite Zahl (dec) ist der
> offset.

Und was passiert dann damit?

> "You need to read 4 byte integer to this Address (1st digit)" <- heißt
> das das der erste Wert mir eine Integer von dieser Adresse zurückgibt?

Wie "zurückgibt"? Oben übergibst du doch den Wert.

> "To this number to add a decimal number (2 number form the address)." <-
> soll ich nun die hinteren zahlen dazuaddieren oder übergibt mir die
> Speicheradresse zwei Werte welche ich addieren muß?

Hmm, der Satz ergibt erstmal gar keinen Sinn und ist auch in ziemlich 
holprigem Englisch geschrieben, wie der erste. Wo kommt diese Doku denn 
her?

> Das Resultat dieser Rechnung jedenfalls gibt mir die Speicherposition
> zurück an welchen ich meine Daten auslesen kann.

Welche Rechnung?

von Draco (Gast)


Lesenswert?

Na ich denke eher das in dieser Adresse, die Adresse für meine Werte 
liegen, oder sehe ich das falsch?!

von Draco (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Wo kommt diese Doku denn
>
> her?

Von einem Russen via EMail :D

Ich muß mal schauen wie ich das geregelt bekomme... Zumindest steht an 
dieser Position scheinbar die Adresse für meine Adresse zu dem Speicher.

von R. F. (rfr)


Lesenswert?

In C hast du eine variable, deren Typ Pointer ist, und setzt den Pointer 
auf die Adresse, von der du lesen willst. Typischerweise addiert man pro 
Lesen die Grösse des zu lesenden Datentyps hinzu und liest solange, bis 
man fertig ist.

Was du beschrieben hast, ist objektorientiert und ohne weitere Angaben 
unverständlich. Am Einfachsten wäre es, wenn du schreibst, was du machen 
willst und das Codesnippet einfügst.

Gruss

Robert

von Draco (Gast)


Lesenswert?

Also ich möchte aus dem Ram Adressen Daten auslesen jedoch:

"And and so look:
1st digit - the address (hex a number system),
2nd - offset (decimal).

It not simple addresses, is pointers.
To read on them so:
You need to read 4 byte integer to the Address (1st digit).
To this number to add a decimal number (2 number from the address).

And the received number is an address where that is necessary for you
"

Und das brauche ich, den Code oben hat er mir als Snipet mitgeschickt.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

da sieht man mal wohin das Ganze mit Outsourcing, Nearshoring und 
sonstige Auslagerungsstrategien führt ....

von horst (Gast)


Lesenswert?

Der Russe schreibt wohl, dass die erste Zahl die Adresse mit 4 byte, und 
die zweite Zahl der offset ist.


Vermurkste x86 Architektur halt:
Mehrere dieser Adressen können den selben Speicherplatz beschreiben.

Soweit ich mich erinnere, wird der offset noch mit der Blockgröße 
multipliziert, bevor er zur Adresse addiert wird.


Was genau war jetzt deine Frage? Was der Russe dir geschrieben hat?
Das war ziemlich genau:
> Die erste Zahl (hex) ist die Adresse, die zweite Zahl (dec) ist der
> offset.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was ist der Sinn der Übung?
Worauf soll das laufen und was soll es bewirken, was der des Englischen 
eher nicht mächtige russische Zeitgenosse da beschreibt?

von horst (Gast)


Lesenswert?

http://de.wikipedia.org/wiki/X86-Prozessor
unter Real Mode:
Segmentadresse x 16 + Offset ergibt die absolute Adresse.

Aber wenn Du nicht tief im Betriebssystem drinnen bist, dann wird das 
Betriebssystem nicht ohne weiteres einen Zugriff auf diese Adresse 
erlauben.

von Draco (Gast)


Lesenswert?

Rufus t. Firefly schrieb:
> Was ist der Sinn der Übung?
>
> Worauf soll das laufen und was soll es bewirken, was der des Englischen
>
> eher nicht mächtige russische Zeitgenosse da beschreibt?


Na ich denke mein englisch ist auch nicht viel besser :D

Der Sinn der ganzen Geschichte:

An dieser Postion sollen, entweder die Werte oder die Position der Werte 
liegen, welche aus einem Spiel die Geschwindigkeit (m/s) ermitteln.

Diese Werte möchte ich via RS232 auf einem externen Display anzeigen.

Quasi eine externe Geschwindigkeitsanzeige...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du willst also auf Daten zugreifen, die im Adressraum eines Programmes 
liegen. Schön und gut, und unter welchem Betriebssystem hast Du das 
vor?

Unter DOS mag man das so machen können, aber unter den ernstgemeinten 
Windows-Versionen und genauso auch unter Linux und artverwandtem kann 
ein Programm nicht ohne weiteres auf den Speicher zugreifen, den ein 
anderes Programm verwendet.
Ausreichende Berechtigungen vorausgesetzt (Administrator, Debug-Privileg 
etc.) ist es möglich, mit betriebssystemspezifischen Funktionen auf 
Speicherbereiche anderer Prozesse zuzugreifen; mit simplen 
Pointeroperationen aber geht das nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.